diff options
| -rw-r--r-- | actionpack/lib/action_dispatch/routing/mapper.rb | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb index ec76d1da1e..187a98342e 100644 --- a/actionpack/lib/action_dispatch/routing/mapper.rb +++ b/actionpack/lib/action_dispatch/routing/mapper.rb @@ -49,6 +49,9 @@ module ActionDispatch        class Mapping #:nodoc:          IGNORE_OPTIONS = [:to, :as, :via, :on, :constraints, :defaults, :only, :except, :anchor, :shallow, :shallow_path, :shallow_prefix] +        ANCHOR_CHARACTERS_REGEX = %r{\A(\\A|\^)|(\\Z|\\z|\$)\Z} +        SHORTHAND_REGEX = %r{^/[\w/]+$} +        WILDCARD_PATH = %r{\*([^/]+)$}          def initialize(set, scope, path, options)            @set, @scope = set, scope @@ -77,18 +80,18 @@ module ActionDispatch                # segment_keys.include?(k.to_s) || k == :controller                next unless Regexp === requirement && !constraints[name] -              if requirement.source =~ %r{\A(\\A|\^)|(\\Z|\\z|\$)\Z} +              if requirement.source =~ ANCHOR_CHARACTERS_REGEX                  raise ArgumentError, "Regexp anchor characters are not allowed in routing requirements: #{requirement.inspect}"                end                if requirement.multiline?                  raise ArgumentError, "Regexp multiline option not allowed in routing requirements: #{requirement.inspect}"                end              end -          end +        end            # match "account/overview"            def using_match_shorthand?(path, options) -            path && options.except(:via, :anchor, :to, :as).empty? && path =~ %r{^/[\w\/]+$} +            path && options.except(:via, :anchor, :to, :as).empty? && path =~ SHORTHAND_REGEX            end            def normalize_path(path) @@ -107,7 +110,7 @@ module ActionDispatch              # Add a constraint for wildcard route to make it non-greedy and match the              # optional format part of the route by default -            if path.match(/\*([^\/]+)$/) && @options[:format] != false +            if path.match(WILDCARD_PATH) && @options[:format] != false                @options.reverse_merge!(:"#{$1}" => /.+?/)              end | 
