Class: Hyrax::MultipleMembershipChecker

Inherits:
Object
  • Object
show all
Defined in:
app/services/hyrax/multiple_membership_checker.rb

Overview

Service class for checking an item’s collection memberships, to make sure that the item is not added to multiple single-membership collections

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(item:) ⇒ MultipleMembershipChecker

Returns a new instance of MultipleMembershipChecker.

Parameters:

  • item (#member_of_collection_ids)

    an object that belongs to collections



10
11
12
# File 'app/services/hyrax/multiple_membership_checker.rb', line 10

def initialize(item:)
  @item = item
end

Instance Attribute Details

#itemObject (readonly)

Returns the value of attribute item.



7
8
9
# File 'app/services/hyrax/multiple_membership_checker.rb', line 7

def item
  @item
end

Instance Method Details

#check(collection_ids:, include_current_members: false) ⇒ nil, String

Scan a list of collection_ids for multiple single-membership collections.

Collections that have a collection type declaring ‘allow_multiple_membership` as `false` require that its members do not also belong to other collections of the same type.

Parameters:

  • collection_ids (Array<String>)

    a list of collection identifiers

  • include_current_members (Boolean) (defaults to: false)

    if true, include item’s existing collections in check; else if false, check passed in collections only

    • use ‘false` when collection_ids includes proposed new collections and existing collections (@see Hyrax::Actors::CollectionsMembershipActor #valid_membership?)

    • use ‘true` when collection_ids includes proposed new collections only (@see Hyrax::Collections::CollectionMemberService #add_member)

Returns:

  • (nil, String)

    nil if no conflicts; an error message string if so



31
32
33
34
35
36
37
38
39
40
41
# File 'app/services/hyrax/multiple_membership_checker.rb', line 31

def check(collection_ids:, include_current_members: false)
  return unless single_membership_collection_types_exist?

  proposed_single_membership_collections = filter_to_single_membership_collections(collection_ids)
  return if proposed_single_membership_collections.blank?

  collections_to_check = collections_to_check(proposed_single_membership_collections,
                                              include_current_members)
  problematic_collections = check_collections(collections_to_check)
  build_error_message(problematic_collections)
end