Module: Trailblazer::Activity::DSL::Linear::Insert

Defined in:
lib/trailblazer/activity/dsl/linear.rb

Overview

Sequence Functions to mutate the Sequence by inserting, replacing, or deleting tasks. These functions are called in insert_task

Class Method Summary collapse

Class Method Details

.Append(sequence, new_rows, insert_id) ⇒ Object

Append new_row after insert_id.



113
114
115
116
117
# File 'lib/trailblazer/activity/dsl/linear.rb', line 113

def Append(sequence, new_rows, insert_id)
  index, sequence = find(sequence, insert_id)

  sequence.insert(index+1, *new_rows)
end

.Delete(sequence, _, insert_id) ⇒ Object



133
134
135
136
137
138
# File 'lib/trailblazer/activity/dsl/linear.rb', line 133

def Delete(sequence, _, insert_id)
  index, sequence = find(sequence, insert_id)

  sequence.delete(sequence[index])
  sequence
end

.find(sequence, insert_id) ⇒ Object



145
146
147
148
149
# File 'lib/trailblazer/activity/dsl/linear.rb', line 145

def find(sequence, insert_id)
  index = find_index(sequence, insert_id) or raise Sequence::IndexError.new(sequence, insert_id)

  return index, sequence.clone # Ruby doesn't have an easy way to avoid mutating arrays :(
end

.find_index(sequence, insert_id) ⇒ Object



141
142
143
# File 'lib/trailblazer/activity/dsl/linear.rb', line 141

def find_index(sequence, insert_id)
  sequence.find_index { |seq_row| seq_row[3][:id] == insert_id } # TODO: optimize id location!
end

.Prepend(sequence, new_rows, insert_id) ⇒ Object

Insert new_rows before insert_id.



120
121
122
123
124
# File 'lib/trailblazer/activity/dsl/linear.rb', line 120

def Prepend(sequence, new_rows, insert_id)
  index, sequence = find(sequence, insert_id)

  sequence.insert(index, *new_rows)
end

.Replace(sequence, new_rows, insert_id) ⇒ Object



126
127
128
129
130
131
# File 'lib/trailblazer/activity/dsl/linear.rb', line 126

def Replace(sequence, new_rows, insert_id)
  index, sequence = find(sequence, insert_id)

  sequence[index], _ = *new_rows # TODO: replace and insert remaining, if any.
  sequence
end