aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/routing_optimisation.rb
diff options
context:
space:
mode:
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]