Class: SequencescapeExcel::SpecialisedField::SangerPlateId

Inherits:
Object
  • Object
show all
Includes:
Base, ValueRequired
Defined in:
app/sequencescape_excel/sequencescape_excel/specialised_field/sanger_plate_id.rb

Overview

A required field if it is a plate manifest. Checked to ensure that it is the same as the sanger human barcode for sample, or is a valid foreign barcode. Updated if there is a valid foreign barcode.

Instance Attribute Summary collapse

Attributes included from Base

#sample_manifest_asset, #value

Instance Method Summary collapse

Methods included from Base

#link

Instance Attribute Details

#foreign_barcode_formatObject (readonly)

Returns the value of attribute foreign_barcode_format.


14
15
16
# File 'app/sequencescape_excel/sequencescape_excel/specialised_field/sanger_plate_id.rb', line 14

def foreign_barcode_format
  @foreign_barcode_format
end

Instance Method Details

#update(_attributes = {}) ⇒ Object

rubocop:todo Metrics/PerceivedComplexity, Metrics/AbcSize


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/sequencescape_excel/sequencescape_excel/specialised_field/sanger_plate_id.rb', line 19

def update(_attributes = {}) # rubocop:todo Metrics/CyclomaticComplexity
  return unless valid? && foreign_barcode_format.present?

  # checking if the plate this well belongs to already has this foreign barcode set in its list of barcodes.
  # or if it contains a foreign barcode with the same format, then update that existing one
  foreign_barcode = asset.plate.barcodes.find { |item| item[:format] == foreign_barcode_format.to_s }
  if foreign_barcode.present?
    if foreign_barcode.barcode != value
      foreign_barcode.update(barcode: value)
      sample_manifest.update_barcodes if sample_manifest.present?
    end
  else
    asset.plate.barcodes << Barcode.new(format: foreign_barcode_format, barcode: value)
    sample_manifest.update_barcodes if sample_manifest.present?
  end
end