class Grape::Router::Pattern
def build_path_from_pattern(pattern, anchor)
def build_path_from_pattern(pattern, anchor) return pattern.dup.insert(pattern.rindex('/') + 1, '?') if pattern.end_with?('*path') return pattern if anchor return "#{pattern}?*path" if pattern.end_with?('/') "#{pattern}/?*path" end
def captures_default
def captures_default to_regexp.names .delete_if { |n| DEFAULT_CAPTURES.include?(n) } .to_h { |k| [k, ''] } end
def extract_capture(format, version, requirements)
def extract_capture(format, version, requirements) capture = {} capture[:format] = map_str(format) if format.present? capture[:version] = map_str(version) if version.present? return capture if requirements.blank? requirements.merge(capture) end
def initialize(origin:, suffix:, anchor:, params:, format:, version:, requirements:)
def initialize(origin:, suffix:, anchor:, params:, format:, version:, requirements:) @origin = origin @path = PatternCache[[build_path_from_pattern(@origin, anchor), suffix]] @pattern = MustermannPattern.new(@path, uri_decode: true, params:, capture: extract_capture(format, version, requirements)) @to_regexp = @pattern.to_regexp end
def map_str(value)
def map_str(value) Array.wrap(value).map(&:to_s) end