Class: Webmachine::Dispatcher
- Inherits:
-
Object
- Object
- Webmachine::Dispatcher
- Defined in:
- lib/webmachine/dispatcher.rb,
lib/webmachine/dispatcher/route.rb
Overview
Handles dispatching incoming requests to the proper registered resources and initializing the decision logic.
Defined Under Namespace
Classes: Route
Instance Attribute Summary collapse
-
#resource_creator ⇒ Object
The creator for resources used to process requests.
-
#routes ⇒ Array<Route>
readonly
The list of routes that will be dispatched to.
Instance Method Summary collapse
-
#add_route(*args, &block) ⇒ Object
(also: #add)
Adds a route to the dispatch list.
-
#dispatch(request, response) ⇒ Object
Dispatches a request to the appropriate Resource in the dispatch list.
-
#find_resource(request, response) ⇒ Object
Find the first resource that matches an incoming request.
-
#find_route(request) ⇒ Object
Find the first route that matches an incoming request.
-
#initialize(resource_creator = method(:create_resource)) ⇒ Dispatcher
constructor
Initialize a Dispatcher instance.
-
#reset ⇒ Object
Resets, removing all routes.
Constructor Details
#initialize(resource_creator = method(:create_resource)) ⇒ Dispatcher
Initialize a Dispatcher instance
21 22 23 24 |
# File 'lib/webmachine/dispatcher.rb', line 21 def initialize(resource_creator = method(:create_resource)) @routes = [] @resource_creator = resource_creator end |
Instance Attribute Details
#resource_creator ⇒ Object
The creator for resources used to process requests. Must respond to call(route, request, response) and return a newly created resource instance.
17 18 19 |
# File 'lib/webmachine/dispatcher.rb', line 17 def resource_creator @resource_creator end |
#routes ⇒ Array<Route> (readonly)
Returns the list of routes that will be dispatched to.
12 13 14 |
# File 'lib/webmachine/dispatcher.rb', line 12 def routes @routes end |
Instance Method Details
#add_route(*args, &block) ⇒ Object Also known as: add
Adds a route to the dispatch list. Routes will be matched in the order they are added.
29 30 31 32 33 |
# File 'lib/webmachine/dispatcher.rb', line 29 def add_route(*args, &block) route = Route.new(*args, &block) @routes << route route end |
#dispatch(request, response) ⇒ Object
Dispatches a request to the appropriate Resource in the dispatch list. If a matching resource is not found, a “404 Not Found” will be rendered.
41 42 43 44 45 46 47 |
# File 'lib/webmachine/dispatcher.rb', line 41 def dispatch(request, response) if resource = find_resource(request, response) Webmachine::Decision::FSM.new(resource, request, response).run else Webmachine.render_error(404, request, response) end end |
#find_resource(request, response) ⇒ Object
Find the first resource that matches an incoming request
58 59 60 61 62 |
# File 'lib/webmachine/dispatcher.rb', line 58 def find_resource(request, response) if route = find_route(request) prepare_resource(route, request, response) end end |
#find_route(request) ⇒ Object
Find the first route that matches an incoming request
66 67 68 |
# File 'lib/webmachine/dispatcher.rb', line 66 def find_route(request) @routes.find {|r| r.match?(request) } end |
#reset ⇒ Object
Resets, removing all routes. Useful for testing or reloading the application.
51 52 53 |
# File 'lib/webmachine/dispatcher.rb', line 51 def reset @routes.clear end |