Line | |
---|
1 | #
|
---|
2 | # erbhandler.rb -- ERBHandler Class
|
---|
3 | #
|
---|
4 | # Author: IPR -- Internet Programming with Ruby -- writers
|
---|
5 | # Copyright (c) 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
---|
6 | # Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
---|
7 | # reserved.
|
---|
8 | #
|
---|
9 | # $IPR: erbhandler.rb,v 1.25 2003/02/24 19:25:31 gotoyuzo Exp $
|
---|
10 |
|
---|
11 | require 'webrick/httpservlet/abstract.rb'
|
---|
12 |
|
---|
13 | require 'erb'
|
---|
14 |
|
---|
15 | module WEBrick
|
---|
16 | module HTTPServlet
|
---|
17 |
|
---|
18 | class ERBHandler < AbstractServlet
|
---|
19 | def initialize(server, name)
|
---|
20 | super
|
---|
21 | @script_filename = name
|
---|
22 | end
|
---|
23 |
|
---|
24 | def do_GET(req, res)
|
---|
25 | unless defined?(ERB)
|
---|
26 | @logger.warn "#{self.class}: ERB not defined."
|
---|
27 | raise HTTPStatus::Forbidden, "ERBHandler cannot work."
|
---|
28 | end
|
---|
29 | begin
|
---|
30 | data = open(@script_filename){|io| io.read }
|
---|
31 | res.body = evaluate(ERB.new(data), req, res)
|
---|
32 | res['content-type'] =
|
---|
33 | HTTPUtils::mime_type(@script_filename, @config[:MimeTypes])
|
---|
34 | rescue StandardError => ex
|
---|
35 | raise
|
---|
36 | rescue Exception => ex
|
---|
37 | @logger.error(ex)
|
---|
38 | raise HTTPStatus::InternalServerError, ex.message
|
---|
39 | end
|
---|
40 | end
|
---|
41 |
|
---|
42 | alias do_POST do_GET
|
---|
43 |
|
---|
44 | private
|
---|
45 | def evaluate(erb, servlet_request, servlet_response)
|
---|
46 | Module.new.module_eval{
|
---|
47 | meta_vars = servlet_request.meta_vars
|
---|
48 | query = servlet_request.query
|
---|
49 | erb.result(binding)
|
---|
50 | }
|
---|
51 | end
|
---|
52 | end
|
---|
53 | end
|
---|
54 | end
|
---|
Note:
See
TracBrowser
for help on using the repository browser.