sanger/sequencescape

View on GitHub
app/heron/factories/concerns/foreign_barcodes.rb

Summary

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

module Heron
  module Factories
    module Concerns
      #
      # A foreign barcode is a barcode that has been externally set, that is added as
      # another extra barcode for the labware referred.
      # This module adds validation and processing methods for this barcodes
      module ForeignBarcodes
        def self.included(klass)
          klass.instance_eval do
            attr_accessor :barcode

            validates_presence_of :barcode
            validate :check_barcode_format, :check_foreign_barcode_unique
          end
        end

        def barcode_format
          Barcode.matching_barcode_format(barcode)
        end

        def check_barcode_format
          return if barcode_format.present?

          errors.add(:base, "The barcode '#{barcode}' is not a recognised format.")
        end

        def check_foreign_barcode_unique
          return unless Barcode.exists_for_format?(barcode_format, barcode)

          errors.add(:base, "The barcode '#{barcode}' is already in use.")
        end
      end
    end
  end
end