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 :requirements, :conditions, :defaults
attr_reader :to, :default_controller, :default_action, :as, :anchor 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 = scope[:options].merge(options) if scope[:options]
options.delete :only options.delete :only
@@ -77,12 +77,13 @@ def self.build(scope, path, options)
defaults = (scope[:defaults] || {}).merge options.delete(:defaults) || {} defaults = (scope[:defaults] || {}).merge options.delete(:defaults) || {}
new scope, path, defaults, options new scope, set, path, defaults, options
end end
def initialize(scope, path, defaults, options) def initialize(scope, set, path, defaults, options)
@requirements, @conditions = {}, {} @requirements, @conditions = {}, {}
@defaults = defaults @defaults = defaults
@set = set

This comment has been minimized.

Show comment
Hide comment
@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?

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

0 comments on commit 0777b17

Please sign in to comment.