refactored
[sinatra.git] / lib / sinatra.rb
blob100093ba129fe5e4f970fd7a85ab30081ae38baf
2 module Sinatra
4   Result = Struct.new(:body)
5   
6   class Event
7     
8     attr_reader :path, :block
9     
10     def initialize(path, &b)
11       @path = path
12       @block = b
13     end
14     
15     def invoke
16       Result.new(block.call)
17     end
18     
19   end
20   
21   class Application
22     
23     attr_reader :events
24     
25     def initialize
26       @events = Hash.new { |hash, key| hash[key] = [] }
27     end
28     
29     def define_event(method, path, &b)
30       events[method] << event = Event.new(path, &b)
31       event
32     end
33     
34     def lookup(method, path)
35       events[method].find do |e| 
36         result = e.invoke and break result
37       end
38     end
39     
40   end
41   
42 end