Module: Igniter::Extensions::Contracts::JournalPack

Defined in:
lib/igniter/extensions/contracts/journal_pack.rb

Class Method Summary collapse

Class Method Details

.apply_journal_effect(invocation:) ⇒ Object



36
37
38
39
# File 'lib/igniter/extensions/contracts/journal_pack.rb', line 36

def apply_journal_effect(invocation:)
  journal[:effects] << invocation.to_h
  invocation.payload
end

.execute_journaled_inline(invocation:) ⇒ Object



41
42
43
44
45
46
47
48
49
50
# File 'lib/igniter/extensions/contracts/journal_pack.rb', line 41

def execute_journaled_inline(invocation:)
  journal[:executions] << invocation.to_h
  result = invocation.runtime.execute(
    invocation.compiled_graph,
    inputs: invocation.inputs,
    profile: invocation.profile
  )
  journal[:results] << result.to_h
  result
end

.install_into(kernel) ⇒ Object



18
19
20
21
22
# File 'lib/igniter/extensions/contracts/journal_pack.rb', line 18

def install_into(kernel)
  kernel.effects.register(:journal, method(:apply_journal_effect))
  kernel.executors.register(:journaled_inline, method(:execute_journaled_inline))
  kernel
end

.journalObject



24
25
26
27
28
29
30
# File 'lib/igniter/extensions/contracts/journal_pack.rb', line 24

def journal
  @journal ||= {
    effects: [],
    executions: [],
    results: []
  }
end

.manifestObject



8
9
10
11
12
13
14
15
16
# File 'lib/igniter/extensions/contracts/journal_pack.rb', line 8

def manifest
  Igniter::Contracts::PackManifest.new(
    name: :extensions_journal,
    registry_contracts: [
      Igniter::Contracts::PackManifest.effect(:journal),
      Igniter::Contracts::PackManifest.executor(:journaled_inline)
    ]
  )
end

.reset_journal!Object



32
33
34
# File 'lib/igniter/extensions/contracts/journal_pack.rb', line 32

def reset_journal!
  journal.each_value(&:clear)
end