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)