Class: MARC::Spec::Queries::Condition

Inherits:
Object
  • Object
show all
Includes:
Part
Defined in:
lib/marc/spec/queries/condition.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Part

#eql?, #hash, #inspect

Constructor Details

#initialize(operator = '?', left: nil, right:) ⇒ Condition

rubocop:disable Style/KeywordParametersOrder



20
21
22
23
24
25
26
27
28
# 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

Instance Attribute Details

#leftObject (readonly)


Attributes



14
15
16
# File 'lib/marc/spec/queries/condition.rb', line 14

def left
  @left
end

#operatorObject (readonly)


Attributes



14
15
16
# File 'lib/marc/spec/queries/condition.rb', line 14

def operator
  @operator
end

#rightObject (readonly)


Attributes



14
15
16
# File 'lib/marc/spec/queries/condition.rb', line 14

def right
  @right
end

Class Method Details

.all_of(*conditions) ⇒ Object



41
42
43
# File 'lib/marc/spec/queries/condition.rb', line 41

def all_of(*conditions)
  conditions.inject { |cc, c| cc.and(c) }
end

.any_of(*conditions) ⇒ Object



35
36
37
38
39
# File 'lib/marc/spec/queries/condition.rb', line 35

def any_of(*conditions)
  conditions.inject do |cc, c|
    cc.or(c)
  end
end

Instance Method Details

#and(other_condition) ⇒ Object



61
62
63
64
65
# 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) ⇒ Boolean


Instance methods

Returns:

  • (Boolean)


49
50
51
52
53
54
55
56
57
58
59
# 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) ⇒ Object



67
68
69
70
71
# 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_sObject


Object overrides



76
77
78
# File 'lib/marc/spec/queries/condition.rb', line 76

def to_s
  operator.to_expression(left, right)
end