Permalink
Browse files

url_for: avoid a nil check. unroll a loop. handle most common case 1st.

  • Loading branch information...
ahoward committed Apr 5, 2012
1 parent 697991a commit 99c08c702eea705471e07bc83a9bdea7edadfb7b
Showing with 13 additions and 18 deletions.
  1. +13 −18 actionpack/lib/action_dispatch/routing/url_for.rb
@@ -144,33 +144,28 @@ def url_options
# # => 'http://somehost.org/tasks/testing?number=33'
def url_for(options = nil)
case options
+ when nil
+ _routes.url_for(url_options)
+ when Hash
+ symbolized = {}
+ options.keys.each do |k|
+ sym = k.to_sym
+ symbolized[sym] = options[k] unless symbolized.has_key?(sym)
+ end
+ url_options.keys.each do |k|
+ sym = k.to_sym
+ symbolized[sym] = url_options[k] unless symbolized.has_key?(sym)
+ end
+ _routes.url_for(symbolized)
when String
options
- when nil, Hash
- _routes.url_for(_merge_url_for_options(options, url_options))
else
polymorphic_url(options)
end
end
protected
- def _merge_url_for_options(h1, h2)
- opts = {}
-
- h1.keys.each do |k|
- s = k.to_sym
- opts[s] = h1[k] unless opts.has_key?(s)
- end if h1
-
- h2.keys.each do |k|
- s = k.to_sym
- opts[s] = h2[k] unless opts.has_key?(s)
- end if h2
-
- opts
- end
-
def optimize_routes_generation?
return @_optimized_routes if defined?(@_optimized_routes)
@_optimized_routes = _routes.optimize_routes_generation? && default_url_options.empty?

1 comment on commit 99c08c7

@korny

This comment has been minimized.

Show comment Hide comment
@korny

korny May 13, 2012

Contributor

Very nice!

Contributor

korny commented on 99c08c7 May 13, 2012

Very nice!

Please sign in to comment.