aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/routing/url_for.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_dispatch/routing/url_for.rb')
-rw-r--r--actionpack/lib/action_dispatch/routing/url_for.rb45
1 files changed, 29 insertions, 16 deletions
diff --git a/actionpack/lib/action_dispatch/routing/url_for.rb b/actionpack/lib/action_dispatch/routing/url_for.rb
index 5da41df485..edcb7f9cbe 100644
--- a/actionpack/lib/action_dispatch/routing/url_for.rb
+++ b/actionpack/lib/action_dispatch/routing/url_for.rb
@@ -123,27 +123,40 @@ module ActionDispatch
# url_for :controller => 'tasks', :action => 'testing', :host=>'somehost.org', :anchor => 'ok', :only_path => true # => '/tasks/testing#ok'
# url_for :controller => 'tasks', :action => 'testing', :trailing_slash=>true # => 'http://somehost.org/tasks/testing/'
# url_for :controller => 'tasks', :action => 'testing', :host=>'somehost.org', :number => '33' # => 'http://somehost.org/tasks/testing?number=33'
- def url_for(options = nil)
- case options
- when String
- options
- when nil, Hash
- routes = (options ? options.delete(:routes) : nil) || _routes
-
- _with_routes(routes) do
- routes.url_for((options || {}).reverse_merge!(url_options).symbolize_keys)
+ def url_for(*args)
+ if args.first.respond_to?(:routes)
+ app = args.shift
+ _with_routes(app.routes) do
+ if args.first.is_a? Symbol
+ named_route = args.shift
+ url_for _routes.url_helpers.__send__("hash_for_#{named_route}", *args)
+ else
+ url_for(*args)
+ end
end
else
- polymorphic_url(options)
+ options = args.first
+ case options
+ when String
+ options
+ when nil, Hash
+ routes = (options ? options.delete(:routes) : nil) || _routes
+ _with_routes(routes) do
+ routes.url_for((options || {}).reverse_merge!(url_options).symbolize_keys)
+ end
+ else
+ polymorphic_url(options)
+ end
end
end
- def _with_routes(routes)
- old_routes, @_routes = @_routes, routes
- yield
- ensure
- @_routes = old_routes
- end
+ protected
+ def _with_routes(routes)
+ old_routes, @_routes = @_routes, routes
+ yield
+ ensure
+ @_routes = old_routes
+ end
end
end
end