Module: Collectible::Collection::EnsuresItemEligibility

Extended by:
ActiveSupport::Concern
Included in:
Collectible::CollectionBase
Defined in:
lib/collectible/collection/ensures_item_eligibility.rb

Constant Summary collapse

ENSURE_TYPE_EQUALITY =
:ENSURE_TYPE_EQUALITY

Instance Method Summary collapse

Instance Method Details

#allows_item?(item) ⇒ Boolean (private)

Parameters:

  • item (*)

Returns:

  • (Boolean)


33
34
35
36
37
38
39
40
41
# File 'lib/collectible/collection/ensures_item_eligibility.rb', line 33

def allows_item?(item)
  if ensure_item_validity_with.respond_to?(:call)
    instance_exec(item, &ensure_item_validity_with)
  elsif ensure_item_validity_with.present?
    item.class <= ensure_item_validity_with
  else
    true
  end
end

#ensure_allowed_in_collection!(*new_items) ⇒ Object (private)

Raises an error if any items fail the class’ item validity block/class



21
22
23
24
25
26
27
28
29
# File 'lib/collectible/collection/ensures_item_eligibility.rb', line 21

def ensure_allowed_in_collection!(*new_items)
  ensure_type_equality!(*new_items) and return if ensures_type_equality?

  invalid_items = new_items.flatten.reject { |item| allows_item?(item) }
  return if invalid_items.empty?

  raise Collectible::ItemNotAllowedError,
        "not allowed: #{invalid_items.first(3).map(&:inspect).join(", ")}#{"..." if invalid_items.length > 3}"
end

#ensure_type_equality!(*new_items) ⇒ Object (private)



48
49
50
51
52
53
54
55
56
57
# File 'lib/collectible/collection/ensures_item_eligibility.rb', line 48

def ensure_type_equality!(*new_items)
  new_items = new_items.flatten
  first_item = items.blank? ? new_items.first : items.first

  new_items.each do |item|
    next if item.class == first_item.class

    raise Collectible::ItemTypeMismatchError, "item mismatch: #{first_item.inspect}, #{item.inspect}"
  end
end

#ensures_type_equality?Boolean (private)

Returns:

  • (Boolean)


44
45
46
# File 'lib/collectible/collection/ensures_item_eligibility.rb', line 44

def ensures_type_equality?
  ensure_item_validity_with == ENSURE_TYPE_EQUALITY
end