Class: ActiveJob::Temporal::Middleware::Chain

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/activejob/temporal/middleware/chain.rb

Overview

Ordered middleware pipeline for ActiveJob execution inside Temporal activities.

Constant Summary collapse

TERMINAL_CALL_CHAIN =
->(_job, terminal) { terminal.call }.freeze

Instance Method Summary collapse

Constructor Details

#initialize(entries = []) ⇒ Chain

Returns a new instance of Chain.



12
13
14
15
16
17
# File 'lib/activejob/temporal/middleware/chain.rb', line 12

def initialize(entries = [])
  @entries = []
  @entry_indexes_by_key = {}
  @compiled_call_chain = TERMINAL_CALL_CHAIN
  entries.each { |entry| add(entry) }
end

Instance Method Details

#add(middleware, *args, **kwargs, &block) ⇒ Object



19
20
21
22
23
24
25
26
# File 'lib/activejob/temporal/middleware/chain.rb', line 19

def add(middleware, *args, **kwargs, &block)
  key = entry_key(middleware, args, kwargs, block)
  callable = build_callable(middleware, args, kwargs, block)
  upsert_entry(key, callable)
  @compiled_call_chain = compile_call_chain

  callable
end

#call(job, &terminal) ⇒ Object

Raises:

  • (ArgumentError)


28
29
30
31
32
# File 'lib/activejob/temporal/middleware/chain.rb', line 28

def call(job, &terminal)
  raise ArgumentError, "middleware chain requires a block" unless terminal

  @compiled_call_chain.call(job, terminal)
end

#each(&block) ⇒ Object



34
35
36
37
38
# File 'lib/activejob/temporal/middleware/chain.rb', line 34

def each(&block)
  return enum_for(:each) unless block

  @entries.each(&block)
end