Class: Trailblazer::Activity::TaskWrap::Pipeline

Inherits:
Object
  • Object
show all
Defined in:
lib/trailblazer/activity/task_wrap/pipeline.rb

Overview

This “circuit” is optimized for

a) merging speed at run-time, since features like tracing will be applied here.
b) execution speed. Every task in the real circuit is wrapped with one of us.

Defined Under Namespace

Classes: Merge

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sequence) ⇒ Pipeline

Returns a new instance of Pipeline.



7
8
9
# File 'lib/trailblazer/activity/task_wrap/pipeline.rb', line 7

def initialize(sequence)
  @sequence = sequence # [[id, task], ..]
end

Instance Attribute Details

#sequenceObject (readonly)

Returns the value of attribute sequence.



17
18
19
# File 'lib/trailblazer/activity/task_wrap/pipeline.rb', line 17

def sequence
  @sequence
end

Class Method Details

.append(pipe, _, insertion) ⇒ Object

TODO: test me.



35
36
37
# File 'lib/trailblazer/activity/task_wrap/pipeline.rb', line 35

def self.append(pipe, _, insertion) # TODO: test me.
  Pipeline.new(pipe.sequence + [insertion])
end

.insert_after(pipe, after_id, insertion) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/trailblazer/activity/task_wrap/pipeline.rb', line 27

def self.insert_after(pipe, after_id, insertion)
  index = pipe.sequence.find_index { |(id, _)| id == after_id }

  seq = pipe.sequence.dup

  Pipeline.new(seq.insert(index+1, insertion))
end

.insert_before(pipe, before_id, insertion) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/trailblazer/activity/task_wrap/pipeline.rb', line 19

def self.insert_before(pipe, before_id, insertion)
  index = pipe.sequence.find_index { |(id, _)| id == before_id }

  seq = pipe.sequence.dup

  Pipeline.new(seq.insert(index, insertion))
end

Instance Method Details

#call(wrap_ctx, original_args) ⇒ Object



11
12
13
14
15
# File 'lib/trailblazer/activity/task_wrap/pipeline.rb', line 11

def call(wrap_ctx, original_args)
  @sequence.each { |(_id, task)| wrap_ctx, original_args = task.(wrap_ctx, original_args) }

  return wrap_ctx, original_args
end