class Journey::Path::Pattern
Attributes
anchored[R]
requirements[R]
spec[R]
Public Class Methods
new(strexp)
click to toggle source
# File lib/journey/path/pattern.rb, line 6 def initialize strexp parser = Journey::Parser.new @anchored = true case strexp when String @spec = parser.parse strexp @requirements = {} @separators = "/.?" when Router::Strexp @spec = parser.parse strexp.path @requirements = strexp.requirements @separators = strexp.separators.join @anchored = strexp.anchor else raise "wtf bro: #{strexp}" end @names = nil @optional_names = nil @required_names = nil @re = nil @offsets = nil end
Public Instance Methods
ast()
click to toggle source
# File lib/journey/path/pattern.rb, line 32 def ast @spec.grep(Nodes::Symbol).each do |node| re = @requirements[node.to_sym] node.regexp = re if re end @spec.grep(Nodes::Star).each do |node| node = node.left node.regexp = @requirements[node.to_sym] || /(.+)/ end @spec end
match(other)
click to toggle source
# File lib/journey/path/pattern.rb, line 166 def match other return unless match = to_regexp.match(other) MatchData.new names, offsets, match end
Also aliased as: =~
names()
click to toggle source
# File lib/journey/path/pattern.rb, line 46 def names @names ||= spec.grep(Nodes::Symbol).map { |n| n.name } end
optional_names()
click to toggle source
# File lib/journey/path/pattern.rb, line 54 def optional_names @optional_names ||= spec.grep(Nodes::Group).map { |group| group.grep(Nodes::Symbol) }.flatten.map { |n| n.name }.uniq end
required_names()
click to toggle source
# File lib/journey/path/pattern.rb, line 50 def required_names @required_names ||= names - optional_names end
source()
click to toggle source
# File lib/journey/path/pattern.rb, line 172 def source to_regexp.source end
to_regexp()
click to toggle source
# File lib/journey/path/pattern.rb, line 176 def to_regexp @re ||= regexp_visitor.new(@separators, @requirements).accept spec end
Private Instance Methods
offsets()
click to toggle source
# File lib/journey/path/pattern.rb, line 185 def offsets return @offsets if @offsets viz = RegexpOffsets.new @requirements @offsets = viz.accept spec end
regexp_visitor()
click to toggle source
# File lib/journey/path/pattern.rb, line 181 def regexp_visitor @anchored ? AnchoredRegexp : UnanchoredRegexp end