Class: Repeatable::Expression::Set Abstract

Inherits:
Base
  • Object
show all
Defined in:
lib/repeatable/expression/set.rb

Overview

This class is abstract.

It cannot be directly instantiated. Subclasses must implement the ‘abstract` methods below.

Direct Known Subclasses

Intersection, Union

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

===, #deconstruct_keys, #difference, #include?, #intersection, #to_h, #union

Constructor Details

#initialize(elements) ⇒ void

Parameters:



12
13
14
# File 'lib/repeatable/expression/set.rb', line 12

def initialize(elements)
  @elements = T.let(elements.flatten.uniq, T::Array[Expression::Base])
end

Instance Attribute Details

#elementsArray<Expression::Base> (readonly)

Returns:



9
10
11
# File 'lib/repeatable/expression/set.rb', line 9

def elements
  @elements
end

Instance Method Details

#<<(element) ⇒ Repeatable::Expression::Set

Parameters:

  • element (T.untyped)

Returns:



17
18
19
20
# File 'lib/repeatable/expression/set.rb', line 17

def <<(element)
  elements << element unless elements.include?(element)
  self
end

#==(other) ⇒ Boolean

Parameters:

  • other (Object)

Returns:

  • (Boolean)


23
24
25
26
27
# File 'lib/repeatable/expression/set.rb', line 23

def ==(other)
  other.is_a?(self.class) &&
    elements.size == other.elements.size &&
    other.elements.all? { |e| elements.include?(e) }
end