Permalink
Browse files

RouteSet should be in charge of constructing the dispather

Now we can override how requests are dispatched in the routeset object
  • Loading branch information...
tenderlove committed Jul 1, 2014
1 parent 93e09f5 commit 0777b17dafd54442409c02237be8b5562025ed3f
@@ -66,7 +66,7 @@ class Mapping #:nodoc:
attr_reader :requirements, :conditions, :defaults
attr_reader :to, :default_controller, :default_action, :as, :anchor
def self.build(scope, path, options)
def self.build(scope, set, path, options)
options = scope[:options].merge(options) if scope[:options]
options.delete :only
@@ -77,12 +77,13 @@ def self.build(scope, path, options)
defaults = (scope[:defaults] || {}).merge options.delete(:defaults) || {}
new scope, path, defaults, options
new scope, set, path, defaults, options
end
def initialize(scope, path, defaults, options)
def initialize(scope, set, path, defaults, options)
@requirements, @conditions = {}, {}
@defaults = defaults
@set = set

This comment has been minimized.

@egilburg

egilburg Jul 15, 2014

Contributor

Perhaps instead/additionally define @dispatcher = set.dispatcher(@defaults) once and then can just use it in rest of method?

@to = options.delete :to
@default_controller = options.delete(:controller) || scope[:controller]
@@ -249,9 +250,9 @@ def app(blocks)
Constraints.new(to, blocks, false)
else
if blocks.any?
Constraints.new(dispatcher, blocks, true)
Constraints.new(dispatcher(defaults), blocks, true)
else
dispatcher
dispatcher(defaults)
end
end
end
@@ -348,8 +349,8 @@ def path_ast(path)
parser.parse path
end
def dispatcher
Routing::RouteSet::Dispatcher.new(defaults)
def dispatcher(defaults)
@set.dispatcher defaults
end
end
@@ -1551,7 +1552,7 @@ def add_route(action, options) # :nodoc:
options[:as] = name_for_action(options[:as], action)
end
mapping = Mapping.build(@scope, URI.parser.escape(path), options)
mapping = Mapping.build(@scope, @set, URI.parser.escape(path), options)
app, conditions, requirements, defaults, as, anchor = mapping.to_route
@set.add_route(app, conditions, requirements, defaults, as, anchor)
end
@@ -334,6 +334,10 @@ def clear!
@prepend.each { |blk| eval_block(blk) }
end
def dispatcher(defaults)
Routing::RouteSet::Dispatcher.new(defaults)
end
module MountedHelpers #:nodoc:
extend ActiveSupport::Concern
include UrlFor
@@ -3,7 +3,7 @@
module ActionDispatch
module Routing
class MapperTest < ActiveSupport::TestCase
class FakeSet
class FakeSet < ActionDispatch::Routing::RouteSet
attr_reader :routes
alias :set :routes
@@ -38,7 +38,7 @@ def test_initialize
def test_mapping_requirements
options = { :controller => 'foo', :action => 'bar', :via => :get }
m = Mapper::Mapping.build({}, '/store/:name(*rest)', options)
m = Mapper::Mapping.build({}, FakeSet.new, '/store/:name(*rest)', options)
_, _, requirements, _ = m.to_route
assert_equal(/.+?/, requirements[:rest])
end

0 comments on commit 0777b17

Please sign in to comment.