Class: Igniter::Extensions::Contracts::Reactive::Engine

Inherits:
Object
  • Object
show all
Defined in:
lib/igniter/extensions/contracts/reactive/engine.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(plan:) ⇒ Engine

Returns a new instance of Engine.



12
13
14
15
16
# File 'lib/igniter/extensions/contracts/reactive/engine.rb', line 12

def initialize(plan:)
  @plan = plan
  @errors = []
  @fired = Set.new
end

Instance Attribute Details

#errorsObject (readonly)

Returns the value of attribute errors.



10
11
12
# File 'lib/igniter/extensions/contracts/reactive/engine.rb', line 10

def errors
  @errors
end

#planObject (readonly)

Returns the value of attribute plan.



10
11
12
# File 'lib/igniter/extensions/contracts/reactive/engine.rb', line 10

def plan
  @plan
end

Instance Method Details

#call(events:, result:, execution_result:, execution_error: nil) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/igniter/extensions/contracts/reactive/engine.rb', line 18

def call(events:, result:, execution_result:, execution_error: nil)
  events.each do |event|
    plan.subscriptions.each do |subscription|
      next unless Matcher.match?(subscription, event)
      next if already_fired?(subscription, event)

      mark_fired(subscription, event)
      call_action(
        subscription.action,
        event: event,
        result: result,
        execution_result: execution_result,
        execution_error: execution_error,
        value: event.value,
        status: event.status,
        outputs: execution_result&.outputs&.to_h
      )
    rescue StandardError => e
      errors << {
        event: event,
        subscription: subscription,
        error: e
      }
    end
  end
end