Class: Phronomy::Agent::ContextParts::Requirements::RequiredContextResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/phronomy/agent/context_parts/requirements/required_context_resolver.rb

Instance Method Summary collapse

Instance Method Details

#resolve(request:, units:) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/phronomy/agent/context_parts/requirements/required_context_resolver.rb', line 8

def resolve(request:, units:)
  candidates = request.candidates.to_h { |candidate| [candidate.candidate_id, candidate] }
  declared = request.required_coverage.to_h { |value| [value.to_s, true] }
  latest_tool_unit = latest_current_tool_unit(request, units, candidates)

  Array(units).map do |unit|
    requirement = unit.requirement
    if unit.unit_id == latest_tool_unit&.unit_id
      requirement = :protocol_required
    elsif requirement == :optional && unit.candidate_ids.any? do |candidate_id|
      candidate = candidates.fetch(candidate_id)
      declared[candidate.candidate_id] || declared[candidate.record_id.to_s]
    end
      requirement = :declared_required
    end

    next unit if requirement == unit.requirement

    ContextSelectionUnit.new(
      unit_id: unit.unit_id,
      candidate_ids: unit.candidate_ids,
      dependency_unit_ids: unit.dependency_unit_ids,
      kind: unit.kind,
      requirement: requirement,
      priority: unit.priority,
      sequence_range: unit.sequence_range,
      metadata: unit.
    )
  end.freeze
end