Module: Limber::TagLayoutTemplate::TagWalker

Included in:
WalkCombinatorialSequential, WalkQuadrants
Defined in:
app/models/limber/tag_layout_template/tag_walker.rb

Overview

Generic walker behaviour

Instance Method Summary collapse

Instance Method Details

#generate_tag_layout(plate) ⇒ Object

rubocop:todo Metrics/AbcSize



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'app/models/limber/tag_layout_template/tag_walker.rb', line 5

def generate_tag_layout(plate) # rubocop:todo Metrics/AbcSize
  tags = tag_ids
  groups = group_wells_of_plate(plate)
  pools = groups.filter_map { |w| w.try(:[], 1) }.uniq
  groups.each_with_object({}) do |(well, pool_id, _well_empty), tagged_wells|
    next if well.nil?

    column, row = WellHelpers.well_coordinate(well)
    index = primary_index(row, column, 2, plate.number_of_rows, plate.number_of_columns)
    throw :unacceptable_tag_layout if tags.size <= index
    tagged_wells[well] = [pools.index(pool_id) + 1, tags[index]] unless well.nil?
  end
end