diff options
Diffstat (limited to 'actionpack/lib/action_dispatch/journey')
4 files changed, 28 insertions, 14 deletions
| diff --git a/actionpack/lib/action_dispatch/journey/formatter.rb b/actionpack/lib/action_dispatch/journey/formatter.rb index 7764763791..4410c1b5d5 100644 --- a/actionpack/lib/action_dispatch/journey/formatter.rb +++ b/actionpack/lib/action_dispatch/journey/formatter.rb @@ -33,8 +33,8 @@ module ActionDispatch            return [route.format(parameterized_parts), params]          end -        message = "No route matches #{constraints.inspect}" -        message << " missing required keys: #{missing_keys.inspect}" if name +        message = "No route matches #{Hash[constraints.sort].inspect}" +        message << " missing required keys: #{missing_keys.sort.inspect}" if name          raise ActionController::UrlGenerationError, message        end diff --git a/actionpack/lib/action_dispatch/journey/parser.rb b/actionpack/lib/action_dispatch/journey/parser.rb index bb4cbb00e2..430812fafe 100644 --- a/actionpack/lib/action_dispatch/journey/parser.rb +++ b/actionpack/lib/action_dispatch/journey/parser.rb @@ -1,7 +1,7 @@  #  # DO NOT MODIFY!!!!  # This file is automatically generated by Racc 1.4.9 -# from Racc grammer file "". +# from Racc grammar file "".  #  require 'racc/parser.rb' diff --git a/actionpack/lib/action_dispatch/journey/router.rb b/actionpack/lib/action_dispatch/journey/router.rb index da32f1bfe7..419e665d12 100644 --- a/actionpack/lib/action_dispatch/journey/router.rb +++ b/actionpack/lib/action_dispatch/journey/router.rb @@ -54,7 +54,7 @@ module ActionDispatch        end        def call(env) -        env['PATH_INFO'] = normalize_path(env['PATH_INFO']) +        env['PATH_INFO'] = Utils.normalize_path(env['PATH_INFO'])          find_routes(env).each do |match, parameters, route|            script_name, path_info, set_params = env.values_at('SCRIPT_NAME', @@ -103,12 +103,6 @@ module ActionDispatch        private -        def normalize_path(path) -          path = "/#{path}" -          path.squeeze!('/') -          path -        end -          def partitioned_routes            routes.partitioned_routes          end diff --git a/actionpack/lib/action_dispatch/journey/visitors.rb b/actionpack/lib/action_dispatch/journey/visitors.rb index 9e66cab052..daade5bb74 100644 --- a/actionpack/lib/action_dispatch/journey/visitors.rb +++ b/actionpack/lib/action_dispatch/journey/visitors.rb @@ -77,12 +77,32 @@ module ActionDispatch          end        end -      class OptimizedPath < String # :nodoc: +      class OptimizedPath < Visitor # :nodoc: +        def accept(node) +          Array(visit(node)) +        end +          private -        def visit_GROUP(node) -          "" -        end +          def visit_CAT(node) +            [visit(node.left), visit(node.right)].flatten +          end + +          def visit_SYMBOL(node) +            node.left[1..-1].to_sym +          end + +          def visit_STAR(node) +            visit(node.left) +          end + +          def visit_GROUP(node) +            [] +          end + +          %w{ LITERAL SLASH DOT }.each do |t| +            class_eval %{ def visit_#{t}(n); n.left; end }, __FILE__, __LINE__ +          end        end        # Used for formatting urls (url_for) | 
