sanger/sequencescape

View on GitHub
app/models/sample_manifest/tube_rack_behaviour.rb

Summary

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

module SampleManifest::TubeRackBehaviour
  # Specifies behaviour for generation of Tube Rack Manifests
  # Ends up being included in SampleManifest model because is instantiated in CoreBehaviour
  class Core < SampleManifest::SharedTubeBehaviour::Base
    include SampleManifest::CoreBehaviour::NoSpecializedValidation
    include SampleManifest::CoreBehaviour::StockAssets

    attr_reader :tubes

    def initialize(manifest)
      @manifest = manifest
      @tubes = []
    end

    def generate
      desired_number_of_tubes = count * @manifest.tube_rack_purpose.size
      @tubes = generate_tubes(purpose, desired_number_of_tubes)
    end

    def acceptable_purposes
      Tube::Purpose.where(target_type: SampleTube)
    end

    def acceptable_rack_purposes
      TubeRack::Purpose.where(target_type: TubeRack)
    end

    def default_purpose
      Tube::Purpose.standard_sample_tube
    end

    def default_tube_rack_purpose
      TubeRack::Purpose.standard_tube_rack
    end

    # when uploading the manifest, this specifies which resources are queried and stored in the Cache
    # accessed through sample_manifest.sample_manifest_assets.includes(<resources below>)
    def included_resources
      [{ sample: :sample_metadata, asset: %i[labware aliquots barcodes] }]
    end
  end
end