sanger/sequencescape

View on GitHub
app/models/qcable_creator.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true
class QcableCreator < ApplicationRecord
  include Uuid::Uuidable

  belongs_to :user
  belongs_to :lot
  has_many :qcables

  validates :user, presence: true
  validates :lot, presence: true

  attr_accessor :count, :barcodes, :supplied_barcode

  after_create :make_qcables!

  def make_qcables!
    return qcables_by_supplied_barcode! if supplied_barcode.present?
    qcables_by_count! if count.present?
    qcables_by_barcode! if barcodes.present?
  end

  def qcables_by_count!
    lot.qcables.build([{ qcable_creator: self }] * count).tap { |_| lot.save! }
  end

  def qcables_by_barcode!
    barcodes.split(',').collect { |barcode| lot.qcables.create!(qcable_creator: self, barcode: barcode) }
  end

  # Creates using the supplied plate barcode we received from baracoda
  def qcables_by_supplied_barcode!
    lot.qcables.create!(qcable_creator: self, supplied_barcode: supplied_barcode)
  end
end