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.metadata
)
end.freeze
end
|