11 def register_event(event)
12 (@events ||= []) << event
15 def determine_event(verb, path)
16 EventManager.events.detect(method(:not_found)) do |e|
17 e.path == path && e.verb == verb
22 Event.new(:get, nil) do
24 views_dir SINATRA_ROOT + '/files'
26 if request.path_info == '/'
38 cattr_accessor :logger
42 def initialize(request)
47 def status(value = nil)
48 @status = value if value
53 @body = value if value
57 def error(value = nil)
66 # header 'Content-Type' => 'text/html'
67 # header 'Foo' => 'Bar'
69 # headers 'Content-Type' => 'text/html',
72 # Whatever blows your hair back
73 def headers(value = nil)
74 @headers.merge!(value) if value
77 alias :header :headers
80 @params ||= @request.params.symbolize_keys
84 logger.info "#{request.request_method} #{request.path_info} | Status: #{status} | Params: #{params.inspect}"
85 logger.exception(error) if error
92 cattr_accessor :logger
93 cattr_accessor :after_filters
95 self.after_filters = []
97 def self.after_attend(filter)
98 after_filters << filter
101 after_attend :log_event
103 attr_reader :path, :verb
105 def initialize(verb, path, &block)
109 EventManager.register_event(self)
114 context = EventContext.new(request)
115 context.instance_eval(&@block) if @block
120 run_through_after_filters(context)
127 def run_through_after_filters(context)
128 after_filters.each { |filter| context.send(filter) }