module Trailblazer::Activity::DSL::Linear::Insert

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

Public Instance Methods

Append(sequence, new_rows, insert_id) click to toggle source

Append {new_row} after {insert_id}.

# 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) click to toggle source
# 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
Prepend(sequence, new_rows, insert_id) click to toggle source

Insert {new_rows} before {insert_id}.

# 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) click to toggle source
# 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
find(sequence, insert_id) click to toggle source
# 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) click to toggle source

@private

# 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