class Yoti::MultiValue

Constants

Value

Public Class Methods

new(items) click to toggle source
# File lib/yoti/data_type/multi_value.rb, line 3
def initialize(items)
  raise(TypeError, "Arrays must be passed to #{self.class.name}") unless items.is_a?(Array)

  @original_items = items
  @items = items.dup
  @filters = []
end

Public Instance Methods

allow_type(type) click to toggle source
# File lib/yoti/data_type/multi_value.rb, line 11
def allow_type(type)
  filter { |value| value.is_a?(type) }
  self
end
filter(&callback) click to toggle source
# File lib/yoti/data_type/multi_value.rb, line 16
def filter(&callback)
  @filters.push(callback)
  apply_filters
  self
end
items() click to toggle source
# File lib/yoti/data_type/multi_value.rb, line 22
def items
  apply_filters
  @items.clone.freeze
end

Private Instance Methods

apply_filters() click to toggle source
# File lib/yoti/data_type/multi_value.rb, line 29
def apply_filters
  @items = @original_items.dup

  if @filters.count.positive?
    @items.keep_if do |item|
      match = @filters.select { |callback| callback.call(item) }
      match.count.positive?
    end
  end

  @items.each do |item|
    next unless item.is_a?(MultiValue)

    @filters.each do |callback|
      item.filter { |value| callback.call(value) }
    end
  end
end