Module: Ecoportal::API::GraphQL::Base::ContractorEntity::MemberChanges

Included in:
Ecoportal::API::GraphQL::Base::ContractorEntity
Defined in:
lib/ecoportal/api/graphql/base/contractor_entity/member_changes.rb

Overview

Convenience mutators over the read-model associatedPeopleIds / leadContractorIds arrays. They push/delete plain ids so that Input::ContractorEntity::Update.from_model can later emit the IdDiff (additions/removals) against original_doc.

Instance Method Summary collapse

Instance Method Details

#associate(*values, lead: false) ⇒ Object

Associates one or more people. When lead: true, also marks them as leads.

Parameters:

  • values (Array<String, Hash, Person, Enumerable>)

    ids (or things resolvable to ids).

  • lead (Boolean) (defaults to: false)

    whether the associated people are also lead contractors.



13
14
15
16
17
18
19
20
21
22
# File 'lib/ecoportal/api/graphql/base/contractor_entity/member_changes.rb', line 13

def associate(*values, lead: false)
  ids = to_person_ids(*values)

  associatedPeopleIds.tap do |associated|
    associated.push!(*ids)
    next unless lead

    lead!(*ids)
  end
end

#disassociate(*values) ⇒ Object Also known as: dissassociate

Disassociates one or more people (also removing them as leads).

Parameters:

  • values (Array<String, Hash, Person, Enumerable>)

    ids (or resolvable to ids).



26
27
28
29
30
31
32
33
# File 'lib/ecoportal/api/graphql/base/contractor_entity/member_changes.rb', line 26

def disassociate(*values)
  ids = to_person_ids(*values)

  associatedPeopleIds.tap do |associated|
    unlead!(*ids)
    associated.delete!(*ids)
  end
end

#lead!(*values) ⇒ Object

Marks one or more people as lead contractors (associating them if not already).



38
39
40
41
42
43
44
45
# File 'lib/ecoportal/api/graphql/base/contractor_entity/member_changes.rb', line 38

def lead!(*values)
  ids = to_person_ids(*values)

  leadContractorIds.tap do |leads|
    associate(*ids)
    leads.push!(*ids)
  end
end

#unlead!(*values) ⇒ Object

Removes one or more people from the lead contractors list.



48
49
50
51
52
53
54
# File 'lib/ecoportal/api/graphql/base/contractor_entity/member_changes.rb', line 48

def unlead!(*values)
  ids = to_person_ids(*values)

  leadContractorIds.tap do |leads|
    leads.delete!(*ids)
  end
end