sanger/limber

View on GitHub
app/views/exports/bioscan_mbrave.tsv.erb

Summary

Maintainability
Test Coverage
<%= 
    aliquot = @tube.aliquots.first    
    first_tag_1_group_name = aliquot.tag.tag_group.name
    version = mbrave_tag_version(first_tag_1_group_name)

    header = ['Forward Labels', 'Reverse Labels', 'Label', 'Group', 'UMI plate ID', 'Sample Plate ID']
    rows = []
    @tube.aliquots.each do |aliquot| 
      tag_1_group_name = aliquot.tag.tag_group.name
      tag_2_group_name = aliquot.tag2.tag_group.name

      if (version != mbrave_tag_version(tag_1_group_name)) || (version != mbrave_tag_version(tag_2_group_name))
        raise "This tube contains tags from different tag group versions"
      end
      tag2_plate_num = mbrave_tag2_plate_num(tag_2_group_name)

      rows << [
        mbrave_tag_name(tag_1_group_name, (aliquot.tag_index - 1)),
        mbrave_tag_name(tag_2_group_name, (aliquot.tag2_index - 1) % 4),
        aliquot.sample.sample_metadata.supplier_name, 
        aliquot.sample.sample_metadata.cohort, 
        tag2_plate_num,
        aliquot.sample.sample_metadata.sample_description,
        # Add tag_index and tag2_index for sorting
        aliquot.tag_index,
        aliquot.tag2_index 
      ]
    end

    rows.sort_by! { |x| [x[4], x[7], x[6]] }  # Sort by tag2_plate_num, tag2_index, and tag_index
    rows.each { |x| x.slice!(-2, 2) } # Remove tag_index and tag2_index from rows
    rows.unshift(header)  # Add header row to the beginning

    rows.map{|row| row.to_csv(col_sep: ("\t"))}.join
%>