Class: Selector::Or

Inherits:
Condition show all
Defined in:
lib/selector/or.rb

Overview

The composition of several conditions. Requires any of them to be satisfied

Instance Attribute Summary

Attributes inherited from Condition

#attributes

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Condition

#!, #&, #-, #==, #attribute, #initialize

Constructor Details

This class inherits a constructor from Selector::Condition

Class Method Details

.new(*attributes) ⇒ Object



12
13
14
15
16
17
18
19
20
21
# File 'lib/selector/or.rb', line 12

def self.new(*attributes)
  attrs = attributes.uniq - [NOTHING]

  return NOTHING     if attrs.empty?
  return attrs.first if attrs.count.equal?(1)
  return ANYTHING    if attrs.include? ANYTHING
  return ANYTHING    if (attrs & attrs.map(&:!)).any?

  super(*attrs)
end

Instance Method Details

#[](value) ⇒ Object

Checks if value satisfies any of composed conditions

@example
  left  = Selector.new only: /foo/
  right = Selector.new only: /bar/
  composition = Selector::Or.new(left, right)

  composition[:foo] # => true
  composition[:bar] # => true
  composition[:baz] # => false


38
39
40
# File 'lib/selector/or.rb', line 38

def [](value)
  attributes.detect { |part| part[value] } ? true : false
end

#|(other) ⇒ Object

Adds the other condition to the composition (avoids nesting)



48
49
50
# File 'lib/selector/or.rb', line 48

def |(other)
  Or.new(*attributes, other)
end