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