diff --git a/actionpack/lib/action_controller/routing/recognition_optimisation.rb b/actionpack/lib/action_controller/routing/recognition_optimisation.rb index 306219a431d24aa11cd23e167a6d85684dd656f6..4935432d876df49a85826ebd453ef90435d8c648 100644 --- a/actionpack/lib/action_controller/routing/recognition_optimisation.rb +++ b/actionpack/lib/action_controller/routing/recognition_optimisation.rb @@ -134,6 +134,9 @@ def to_plain_segments(str) def write_recognize_optimized! tree = segment_tree(routes) body = generate_code(tree) + + remove_recognize_optimized! + instance_eval %{ def recognize_optimized(path, env) segments = to_plain_segments(path) @@ -149,12 +152,22 @@ def recognize_optimized(path, env) end def clear_recognize_optimized! - instance_eval %{ + remove_recognize_optimized! + + class << self def recognize_optimized(path, environment) write_recognize_optimized! recognize_optimized(path, environment) end - }, __FILE__, __LINE__ + end + end + + def remove_recognize_optimized! + if respond_to?(:recognize_optimized) + class << self + remove_method :recognize_optimized + end + end end end end