提交 0777b17d 编写于 作者: A Aaron Patterson

RouteSet should be in charge of constructing the dispather

Now we can override how requests are dispatched in the routeset object
上级 93e09f52
......@@ -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
@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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册