class Rudelo::Matchers::SetLogic

Constants

SYNTAX_EXPR

Attributes

force[RW]

if true, will raise if a cell is not valid set logic syntax

short_circuit[W]

Public Instance Methods

ast(cell) click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 86
def ast(cell)
  asts[cell] ||= begin
    logic_transform.apply(logic_parser.parse(cell))
  rescue
    raise if force
    nil
  end
end
asts() click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 66
def asts
  @asts ||= {}
end
can_match?(cell) click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 45
def can_match?(cell)
  ! (cell =~ SYNTAX_EXPR).nil?
end
cell_substitution?() click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 62
def cell_substitution?
  true
end
logic_parser() click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 70
def logic_parser
  @logic_parser ||= Rudelo::Parsers::SetLogicParser.new
end
logic_transform() click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 74
def logic_transform
  @logic_transform ||= Rudelo::Parsers::SetLogicTransform.new
end
matches?(cell, value) click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 49
def matches?(cell, value)
  # puts "\n matches? `#{cell}` => `#{value}`"
  return false unless force || can_match?(cell)
  evaluator = ast(cell)
  return return_on_cant_match if evaluator.nil?
  in_set = nil
  in_set = value if value.is_a?(Set)
  in_set = Set.new if value == ''
  in_set ||= value_transform.apply(value_parser.parse(value))
  result = evaluator.eval(in_set)
  return result ? true : return_on_cant_match
end
return_on_cant_match() click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 41
def return_on_cant_match
  short_circuit ? :break : false
end
short_circuit() click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 37
def short_circuit
  defined?(@short_circuit) ? @short_circuit : true
end
value_parser() click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 78
def value_parser
  @value_parser ||= Rudelo::Parsers::SetValueParser.new
end
value_transform() click to toggle source
# File lib/rudelo/matchers/set_logic.rb, line 82
def value_transform
  @value_transform ||= Rudelo::Parsers::SetLogicTransform.new
end