File: webrick/httpservlet/erbhandler.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: WEBrick#15
  module: HTTPServlet#16
  class: ERBHandler#18
inherits from
  AbstractServlet ( WEBrick::HTTPServlet )
has properties
method: initialize / 2 #19
method: do_GET / 2 #24
alias: do_POST do_GET #42
method: evaluate / 3 #45

Class Hierarchy

Code

   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