mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
rafactored the regex related code in the mapper class
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user