Class: Webmachine::Dispatcher

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(resource_creator = method(:create_resource)) ⇒ Dispatcher

Initialize a Dispatcher instance

Parameters:

  • resource_creator (defaults to: method(:create_resource))

    Invoked to create resource instances.



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_creatorObject

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

#routesArray<Route> (readonly)

Returns the list of routes that will be dispatched to.

Returns:

  • (Array<Route>)

    the list of routes that will be dispatched to

See Also:



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.

See Also:

  • Route#new


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.

Parameters:

  • request (Request)

    the request object

  • response (Response)

    the response object



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

Parameters:

  • request (Request)

    the request to match

  • response (Response)

    the response for the resource



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

Parameters:

  • request (Request)

    the request to match



66
67
68
# File 'lib/webmachine/dispatcher.rb', line 66

def find_route(request)
  @routes.find {|r| r.match?(request) }
end

#resetObject

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