sanger/sequencescape

View on GitHub
app/models/cherrypick/volume_by_micro_litre.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
93%
# frozen_string_literal: true
module Cherrypick::VolumeByMicroLitre
  # rubocop:todo Metrics/AbcSize
  def volume_to_cherrypick_by_micro_litre(volume_required, robot_minimum_picking_volume = 0.0)
    robot_minimum_picking_volume ||= 0.0
    check_inputs_to_volume_to_cherrypick_by_micro_litre!(volume_required)

    volume_required = [volume_required, robot_minimum_picking_volume].max

    volume_required.to_f.tap do |volume_to_pick|
      well_attribute.current_volume = volume_required.to_f
      well_attribute.requested_volume = volume_required.to_f
      well_attribute.buffer_volume = 0
      well_attribute.picked_volume = volume_to_pick
      well_attribute.robot_minimum_picking_volume = robot_minimum_picking_volume
    end
  end

  # rubocop:enable Metrics/AbcSize

  def check_inputs_to_volume_to_cherrypick_by_micro_litre!(volume_required)
    if volume_required.blank? || volume_required.to_f <= 0.0
      raise Cherrypick::VolumeError,
            "Volume required (#{volume_required.inspect}) is invalid for cherrypicking by micro litre"
    end
  end
  private :check_inputs_to_volume_to_cherrypick_by_micro_litre!
end