class ActionDispatch::Journey::Path::Pattern
Experimental RBS support (using type sampling data from the type_fusion
project).
# sig/action_dispatch/journey/path/pattern.rbs class ActionDispatch::Journey::Path::Pattern def match?: (String other) -> untyped def requirements_for_missing_keys_check: () -> untyped end
:nodoc:
:nodoc:
:nodoc:
def build_formatter
def build_formatter Visitors::FormatBuilder.new.accept(spec) end
def eager_load!
def eager_load! required_names offsets to_regexp @ast = nil end
def initialize(ast, requirements, separators, anchored)
def initialize(ast, requirements, separators, anchored) @ast = ast @spec = ast.root @requirements = requirements @separators = separators @anchored = anchored @names = ast.names @optional_names = nil @required_names = nil @re = nil @offsets = nil end
def match(other)
def match(other) return unless match = to_regexp.match(other) MatchData.new(names, offsets, match) end
def match?(other)
Experimental RBS support (using type sampling data from the type_fusion
project).
def match?: (String other) -> untyped
This signature was generated using 2 samples from 1 application.
def match?(other) to_regexp.match?(other) end
def offsets
def offsets return @offsets if @offsets @offsets = [0] spec.find_all(&:symbol?).each do |node| node = node.to_sym if @requirements.key?(node) re = /#{Regexp.union(@requirements[node])}|/ @offsets.push((re.match("").length - 1) + @offsets.last) else @offsets << @offsets.last end end @offsets end
def optional_names
def optional_names @optional_names ||= spec.find_all(&:group?).flat_map { |group| group.find_all(&:symbol?) }.map(&:name).uniq end
def regexp_visitor
def regexp_visitor @anchored ? AnchoredRegexp : UnanchoredRegexp end
def required_names
def required_names @required_names ||= names - optional_names end
def requirements_anchored?
def requirements_anchored? # each required param must not be surrounded by a literal, otherwise it isn't simple to chunk-match the url piecemeal terminals = ast.terminals terminals.each_with_index { |s, index| next if index < 1 next if s.type == :DOT || s.type == :SLASH back = terminals[index - 1] fwd = terminals[index + 1] # we also don't support this yet, constraints must be regexps return false if s.symbol? && s.regexp.is_a?(Array) return false if back.literal? return false if !fwd.nil? && fwd.literal? } true end
def requirements_for_missing_keys_check
Experimental RBS support (using type sampling data from the type_fusion
project).
def requirements_for_missing_keys_check: () -> untyped
This signature was generated using 2 samples from 1 application.
def requirements_for_missing_keys_check @requirements_for_missing_keys_check ||= requirements.transform_values do |regex| /\A#{regex}\Z/ end end
def source
def source to_regexp.source end
def to_regexp
def to_regexp @re ||= regexp_visitor.new(@separators, @requirements).accept spec end