aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/routing_optimisation.rb
diff options
context:
space:
mode:
authorMichael Koziarski <michael@koziarski.com>2007-09-17 09:30:18 +0000
committerMichael Koziarski <michael@koziarski.com>2007-09-17 09:30:18 +0000
commit7cb26b5d2d0ecb4945f01b1aa1d398eb85c9f1a4 (patch)
tree24f361b1f6e4e6738ebb71344dcb61f0ac2f50fa /actionpack/lib/action_controller/routing_optimisation.rb
parentacbec3e565909da5811488e88066a01f71b68a94 (diff)
downloadrails-7cb26b5d2d0ecb4945f01b1aa1d398eb85c9f1a4.tar.gz
rails-7cb26b5d2d0ecb4945f01b1aa1d398eb85c9f1a4.tar.bz2
rails-7cb26b5d2d0ecb4945f01b1aa1d398eb85c9f1a4.zip
Disable optimisation code for UrlWriter as request.host doesn't make sense there.
Don't try to use the .to_query method when the route has no dynamic segments. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7501 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/lib/action_controller/routing_optimisation.rb')
-rw-r--r--actionpack/lib/action_controller/routing_optimisation.rb22
1 files changed, 20 insertions, 2 deletions
diff --git a/actionpack/lib/action_controller/routing_optimisation.rb b/actionpack/lib/action_controller/routing_optimisation.rb
index eaff1869dd..7cf85c9b9a 100644
--- a/actionpack/lib/action_controller/routing_optimisation.rb
+++ b/actionpack/lib/action_controller/routing_optimisation.rb
@@ -13,8 +13,8 @@ module ActionController
def generate_optimisation_block(route, kind)
return "" unless route.optimise?
OPTIMISERS.inject("") do |memo, klazz|
- optimiser = klazz.new(route, kind)
- memo << "return #{optimiser.generation_code} if #{optimiser.guard_condition}\n"
+ memo << klazz.new(route, kind).source_code
+ memo
end
end
@@ -32,6 +32,18 @@ module ActionController
def generation_code
'nil'
end
+
+ def source_code
+ if applicable?
+ "return #{generation_code} if #{guard_condition}\n"
+ else
+ "\n"
+ end
+ end
+
+ def applicable?
+ true
+ end
end
# Given a route:
@@ -89,6 +101,12 @@ module ActionController
def generation_code
super.insert(-2, '?#{args.last.to_query}')
end
+
+ # To avoid generating http://localhost/?host=foo.example.com we
+ # can't use this optimisation on routes without any segments
+ def applicable?
+ route.segment_keys.size > 0
+ end
end
OPTIMISERS = [PositionalArguments, PositionalArgumentsWithAdditionalParams]