class MARC::Spec::Queries::Condition
Attributes
left[R]
Attributes
operator[R]
Attributes
right[R]
Attributes
Public Class Methods
all_of(*conditions)
click to toggle source
# File lib/marc/spec/queries/condition.rb, line 41 def all_of(*conditions) conditions.inject { |cc, c| cc.and(c) } end
any_of(*conditions)
click to toggle source
# File lib/marc/spec/queries/condition.rb, line 35 def any_of(*conditions) conditions.inject do |cc, c| cc.or(c) end end
new(operator = '?', left: nil, right:)
click to toggle source
rubocop:disable Style/KeywordParametersOrder
# File lib/marc/spec/queries/condition.rb, line 20 def initialize(operator = '?', left: nil, right:) @operator = Operator.from_str(operator) # TODO: verify left semantics for unary operators # see: https://marcspec.github.io/MARCspec/marc-spec.html#general # https://marcspec.github.io/MARCspec/marc-spec.html#subspec-interpretation @left = left_operand(left) if binary? @right = right_operand(right) end
Public Instance Methods
and(other_condition)
click to toggle source
# File lib/marc/spec/queries/condition.rb, line 61 def and(other_condition) return self if other_condition == self || other_condition.nil? Condition.new('&&', left: self, right: other_condition) end
met?(condition_context)
click to toggle source
Instance methods
# File lib/marc/spec/queries/condition.rb, line 49 def met?(condition_context) # puts self right_val = condition_context.operand_value(right) # puts "\t#{right.inspect} -> #{right_val.inspect}" return unary_apply(right_val) unless binary? left_val = condition_context.operand_value(left, implicit: true) # puts "\t#{left.inspect} -> #{left_val.inspect}" binary_apply(left_val, right_val) end
or(other_condition)
click to toggle source
# File lib/marc/spec/queries/condition.rb, line 67 def or(other_condition) return self if other_condition == self || other_condition.nil? Condition.new('||', left: self, right: other_condition) end
to_s()
click to toggle source
Object overrides
# File lib/marc/spec/queries/condition.rb, line 76 def to_s operator.to_expression(left, right) end
Protected Instance Methods
equality_attrs()
click to toggle source
# File lib/marc/spec/queries/condition.rb, line 93 def equality_attrs %i[left operator right] end
to_s_inspect()
click to toggle source
Protected methods
# File lib/marc/spec/queries/condition.rb, line 85 def to_s_inspect StringIO.new.tap do |out| out << left.inspect if left out << operator out << right.inspect end.string end
Private Instance Methods
binary?()
click to toggle source
# File lib/marc/spec/queries/condition.rb, line 127 def binary? operator.binary? end
binary_apply(left_val, right_val)
click to toggle source
# File lib/marc/spec/queries/condition.rb, line 99 def binary_apply(left_val, right_val) operator.apply(left_val, right_val).tap do |_result| # puts "\t#{left_val} #{operator} #{right_val} => #{_result}" end end
left_operand(left)
click to toggle source
# File lib/marc/spec/queries/condition.rb, line 117 def left_operand(left) operand(left) if left end
operand(operand)
click to toggle source
TODO: superinterface?
# File lib/marc/spec/queries/condition.rb, line 122 def operand(operand) return operand if operand.is_a?(Condition) || operand.is_a?(Query) return Query.new(tag: operand) if operand.is_a?(Tag) end
right_operand(right)
click to toggle source
# File lib/marc/spec/queries/condition.rb, line 111 def right_operand(right) return right if right.is_a?(ComparisonString) operand(right) end
unary_apply(right_val)
click to toggle source
# File lib/marc/spec/queries/condition.rb, line 105 def unary_apply(right_val) operator.apply(right_val).tap do |_result| # puts "\t#{operator} #{right_val} => #{_result}" end end