Class: MARC::Spec::Queries::Condition
- Inherits:
-
Object
- Object
- MARC::Spec::Queries::Condition
- Includes:
- Part
- Defined in:
- lib/marc/spec/queries/condition.rb
Instance Attribute Summary collapse
-
#left ⇒ Object
readonly
———————————————————— Attributes.
-
#operator ⇒ Object
readonly
———————————————————— Attributes.
-
#right ⇒ Object
readonly
———————————————————— Attributes.
Class Method Summary collapse
Instance Method Summary collapse
- #and(other_condition) ⇒ Object
-
#initialize(operator = '?', left: nil, right:) ⇒ Condition
constructor
rubocop:disable Style/KeywordParametersOrder.
-
#met?(condition_context) ⇒ Boolean
———————————————————— Instance methods.
- #or(other_condition) ⇒ Object
-
#to_s ⇒ Object
———————————————————— Object overrides.
Methods included from Part
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
#left ⇒ Object (readonly)
Attributes
14 15 16 |
# File 'lib/marc/spec/queries/condition.rb', line 14 def left @left end |
#operator ⇒ Object (readonly)
Attributes
14 15 16 |
# File 'lib/marc/spec/queries/condition.rb', line 14 def operator @operator end |
#right ⇒ Object (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
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_s ⇒ Object
Object overrides
76 77 78 |
# File 'lib/marc/spec/queries/condition.rb', line 76 def to_s operator.to_expression(left, right) end |