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