From 939f30ace091ac054021a36e3f581be2e149ac89 Mon Sep 17 00:00:00 2001 From: "blake.mizerany@gmail.com" Date: Sun, 9 Sep 2007 22:21:18 +0000 Subject: [PATCH] refactoring --- examples/hello/test.rb | 18 +++++++++++------- lib/sinatra.rb | 2 +- lib/sinatra/dispatcher.rb | 27 +++++++-------------------- lib/sinatra/event.rb | 19 +++++++++++++++++++ 4 files changed, 38 insertions(+), 28 deletions(-) diff --git a/examples/hello/test.rb b/examples/hello/test.rb index f0179aa..bbc0c46 100644 --- a/examples/hello/test.rb +++ b/examples/hello/test.rb @@ -1,13 +1,13 @@ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib/' require 'sinatra' -after_attend :log_fun_stuff - -helpers do - def log_fun_stuff - logger.debug "THIS IS COOL!" - end -end +# after_attend :log_fun_stuff +# +# helpers do +# def log_fun_stuff +# logger.debug "THIS IS COOL!" +# end +# end get '/' do body <<-HTML @@ -15,6 +15,10 @@ get '/' do HTML end +get '/hello' do + "Hello World!" +end + post '/' do body "You entered #{params[:name]}" end diff --git a/lib/sinatra.rb b/lib/sinatra.rb index 8fe526a..cb7e514 100644 --- a/lib/sinatra.rb +++ b/lib/sinatra.rb @@ -18,7 +18,7 @@ require File.dirname(__FILE__) + '/sinatra/dsl' SINATRA_LOGGER = Sinatra::Logger.new(STDOUT) def set_logger(logger = SINATRA_LOGGER) - [Sinatra::Server, Sinatra::EventContext, Sinatra::Event].each do |klass| + [Sinatra::Server, Sinatra::EventContext, Sinatra::Event, Sinatra::Dispatcher].each do |klass| klass.logger = logger end end diff --git a/lib/sinatra/dispatcher.rb b/lib/sinatra/dispatcher.rb index 173eeef..3f9e996 100644 --- a/lib/sinatra/dispatcher.rb +++ b/lib/sinatra/dispatcher.rb @@ -3,6 +3,8 @@ module Sinatra DEFAULT_HEADERS = { 'Content-Type' => 'text/html' } class Dispatcher + + cattr_accessor :logger def headers DEFAULT_HEADERS @@ -11,32 +13,17 @@ module Sinatra def call(env) @request = Rack::Request.new(env) - event = EventManager.events.detect(lambda { not_found }) do |e| - e.path == @request.path_info && e.verb == @request.request_method.downcase.intern - end + event = EventManager.determine_event( + @request.request_method.downcase.intern, + @request.path_info + ) result = event.attend(@request) - [result.status, headers.merge(result.headers), result.body] rescue => e - puts "#{e.message}:\n\t#{e.backtrace.join("\n\t")}" + logger.exception e end - private - - def not_found - Event.new(:get, nil) do - status 404 - views_dir SINATRA_ROOT + '/files' - - if request.path_info == '/' - erb :default_index - else - erb :not_found - end - end - end - end end diff --git a/lib/sinatra/event.rb b/lib/sinatra/event.rb index d39fbd8..27b8dd3 100644 --- a/lib/sinatra/event.rb +++ b/lib/sinatra/event.rb @@ -12,6 +12,25 @@ module Sinatra (@events ||= []) << event end + def determine_event(verb, path) + EventManager.events.detect(method(:not_found)) do |e| + e.path == path && e.verb == verb + end + end + + def not_found + Event.new(:get, nil) do + status 404 + views_dir SINATRA_ROOT + '/files' + + if request.path_info == '/' + erb :default_index + else + erb :not_found + end + end + end + end class EventContext -- 2.11.4.GIT