Class: Igniter::Extensions::Contracts::Reactive::Plan

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(subscriptions:) ⇒ Plan

Returns a new instance of Plan.



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

def initialize(subscriptions:)
  @subscriptions = subscriptions.freeze
  freeze
end

Instance Attribute Details

#subscriptionsObject (readonly)

Returns the value of attribute subscriptions.



8
9
10
# File 'lib/igniter/extensions/contracts/reactive/plan.rb', line 8

def subscriptions
  @subscriptions
end

Instance Method Details

#effect(path, &block) ⇒ Object



26
27
28
# File 'lib/igniter/extensions/contracts/reactive/plan.rb', line 26

def effect(path, &block)
  react_to(:output_produced, path: path, &block)
end

#on_exit(&block) ⇒ Object



39
40
41
# File 'lib/igniter/extensions/contracts/reactive/plan.rb', line 39

def on_exit(&block)
  react_to(:execution_exited, once_per_dispatch: true, &block)
end

#on_failure(&block) ⇒ Object



35
36
37
# File 'lib/igniter/extensions/contracts/reactive/plan.rb', line 35

def on_failure(&block)
  react_to(:execution_failed, once_per_dispatch: true, &block)
end

#on_success(path = nil, &block) ⇒ Object



30
31
32
33
# File 'lib/igniter/extensions/contracts/reactive/plan.rb', line 30

def on_success(path = nil, &block)
  event_type = path.nil? ? :execution_succeeded : :output_produced
  react_to(event_type, path: path, once_per_dispatch: true, &block)
end

#react_to(event_type, path: nil, once_per_dispatch: false, &block) ⇒ Object



15
16
17
18
19
20
21
22
23
24
# File 'lib/igniter/extensions/contracts/reactive/plan.rb', line 15

def react_to(event_type, path: nil, once_per_dispatch: false, &block)
  with_subscription(
    Subscription.new(
      event_type: event_type,
      path: path,
      action: block,
      once_per_dispatch: once_per_dispatch
    )
  )
end

#to_hObject



43
44
45
46
47
# File 'lib/igniter/extensions/contracts/reactive/plan.rb', line 43

def to_h
  {
    subscriptions: subscriptions.map(&:to_h)
  }
end