sanger/sequencescape

View on GitHub
app/models/plate_purpose/additional_input.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true
#
# Class to support a different state machine for inputs added
# in the middle of a workflow
class PlatePurpose::AdditionalInput < PlatePurpose
  READY_STATE = 'passed'
  def state_of(plate)
    return READY_STATE if valid_intermediate_input?(plate)
    super(plate)
  end

  def valid_intermediate_input?(plate)
    [plate.ancestors.count.zero?, library_creation?(plate)].all?
  end

  def library_creation?(plate)
    return false if plate.wells.with_contents.empty?
    plate.wells.with_contents.all? do |well|
      return false if well.requests.empty?
      well
        .requests
        .filter { |a| !a.is_a?(CreateAssetRequest) }
        .all? { |request| request.is_a?(Request::LibraryCreation) || request.is_a?(LibraryCreationRequest) }
    end
  end
end