Follow the Brass

lib/production_readiness_gate.rb

59 lines · ruby

Project files
# frozen_string_literal: true

require_relative "admission"

class ProductionReadinessGate
  # A fact that was never established fails its check: unknown is not a pass.
  # Six readiness facts; wrong_caliber is a boundary tripwire, not one of the six.
  READINESS_CHECKS = {
    wrong_caliber: :caliber_matches?,
    dirty: :clean?,
    primer_pocket_obstructed: :primer_pocket_clear?,
    primer_pocket_unprepared: :primer_pocket_prepared?,
    unsized: :sized?,
    over_maximum_length: :length_acceptable?,
    defects_present: :defect_free?
  }.freeze

  def initialize(caliber_specification:)
    @specification = caliber_specification
  end

  def assess(cartridge_case)
    Admission.new(reasons: failed_checks(cartridge_case))
  end

  private

  def failed_checks(cartridge_case)
    READINESS_CHECKS.reject { |_reason, check| send(check, cartridge_case) }.keys
  end

  def caliber_matches?(cartridge_case)
    @specification.covers?(cartridge_case.caliber)
  end

  def clean?(cartridge_case)
    cartridge_case.clean == true
  end

  def primer_pocket_clear?(cartridge_case)
    cartridge_case.primer_pocket_clear == true
  end

  def primer_pocket_prepared?(cartridge_case)
    cartridge_case.primer_pocket_prepared == true
  end

  def sized?(cartridge_case)
    cartridge_case.sized == true
  end

  def length_acceptable?(cartridge_case)
    @specification.acceptable_length?(cartridge_case.length)
  end

  def defect_free?(cartridge_case)
    cartridge_case.defects == []
  end
end

Read along in the manual: The Reloading Lab · Download the project (zip)