diff options
Diffstat (limited to 'actionpack/lib/action_controller/routing_optimisation.rb')
-rw-r--r-- | actionpack/lib/action_controller/routing_optimisation.rb | 22 |
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] |