Module: Legion::Extensions::Conditioner::Runners::ConflictResolver

Includes:
Helpers::Lex, Helpers::Task
Defined in:
lib/legion/extensions/conditioner/runners/conflict_resolver.rb

Instance Method Summary collapse

Instance Method Details

#resolve(conditions:, competing_conditions: nil, **payload) ⇒ Object



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
38
# File 'lib/legion/extensions/conditioner/runners/conflict_resolver.rb', line 10

def resolve(conditions:, competing_conditions: nil, **payload)
  primary = Legion::Extensions::Conditioner::Condition.new(conditions: conditions,
                                                           values:     payload)

  resolution = if competing_conditions.nil?
                 primary.valid? ? 'primary' : 'none'
               elsif primary.valid?
                 'primary'
               else
                 secondary = Legion::Extensions::Conditioner::Condition.new(
                   conditions: competing_conditions,
                   values:     payload
                 )

                 if secondary.valid?
                   'secondary'
                 else
                   'none'
                 end
               end

  status = resolution == 'none' ? 'conditioner.failed' : 'task.queued'
  task_update(payload[:task_id], status, **payload) unless payload[:task_id].nil?

  { success: true, valid: resolution != 'none', resolution: resolution }
rescue StandardError => e
  log.log_exception(e, component_type: :runner)
  task_update(payload[:task_id], 'conditioner.exception', **payload) unless payload[:task_id].nil?
end