class Cannonbol::Match
Public Class Methods
new(sub_pattern_or_name = nil, &block)
click to toggle source
# File lib/cannonbol/cannonbol.rb, line 256 def initialize(sub_pattern_or_name = nil, &block) if block @block = block elsif sub_pattern_or_name and sub_pattern_or_name.class == Symbol @name = sub_pattern_or_name elsif sub_pattern_or_name and sub_pattern_or_name.respond_to? "_match?" @pattern = sub_pattern_or_name elsif sub_pattern_or_name and sub_pattern_or_name.respond_to? "to_s" @pattern = sub_pattern_or_name.to_s end end
Public Instance Methods
__match?(needle, pattern = nil, s = [])
click to toggle source
# File lib/cannonbol/cannonbol.rb, line 268 def __match?(needle, pattern = nil, s = []) pattern ||= if @block @block.call elsif @name needle.captures[@name] || "" else @pattern end existing_captures = needle.captures.dup s = pattern._match?(needle, *s) needle.captures = needle.captures.merge(existing_captures) [pattern, s] if s end