sanger/sequencescape

View on GitHub
app/heron/factories/tube_rack_status.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

module Heron
  module Factories
    # Factory class to create Heron tube rack statuses
    class TubeRackStatus
      include ActiveModel::Model

      attr_accessor :barcode, :messages, :status

      validates_presence_of :barcode, :messages, :status

      validate :check_rack_barcode

      def save
        return false unless valid?

        ActiveRecord::Base.transaction do
          @tube_rack_status = ::TubeRackStatus.create!(barcode: barcode, status: status, messages: messages)
        end
        true
      end

      private

      def barcode_format
        Barcode.matching_barcode_format(barcode)
      end

      def check_rack_barcode
        if barcode_format.nil?
          error_message = "The tube rack barcode '#{barcode}' is not a recognised format."
          errors.add(:base, error_message)
          return false
        end
        true
      end
    end
  end
end