sanger/sequencescape

View on GitHub
app/models/request/traction/grid_ion.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
94%
# frozen_string_literal: true
require_dependency 'request'

class Request
  module Traction
    class GridIon < CustomerRequest
      self.sequencing = true

      after_create :register_work_orders

      has_metadata as: Request do
        custom_attribute(:library_type, required: true, validator: true, selection: true)
        custom_attribute(:data_type, required: true, validator: true, selection: true)
      end

      validates :state, presence: true

      destroy_aasm

      def passed?
        state == 'passed'
      end

      # We've destroyed the stat_machine, but its validation remains.
      # Here we override it to allow custom states.
      def aasm_validate_states
        true
      end

      def register_work_orders
        # We go via order as we need to get a particular instance of submission
        return if order&.submission.nil?

        order.submission.register_callback(:once) { WorkOrder::Factory.new(order.submission).create_work_orders! }
      end
    end
  end
end