Class: Jobshop::Inspection::LimitCriterion
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Jobshop::Inspection::LimitCriterion
- Defined in:
- app/models/jobshop/inspection/limit_criterion.rb
Instance Method Summary collapse
- #bound? ⇒ Boolean
- #criterion ⇒ Object
- #maximum ⇒ Object
- #maximum=(value) ⇒ Object
- #minimum ⇒ Object
- #minimum=(value) ⇒ Object
- #oversize?(value) ⇒ Boolean
- #pass?(value) ⇒ Boolean
-
#qualifier ⇒ Object
def specification @specification ||= [ qualifier, [ minimum, maximum ].compact.join(ā/ā) ].compact.join(ānā) end.
-
#random ⇒ Object
Generate a random value that has a 90% chance of being in spec.
- #unbound? ⇒ Boolean
- #undersize?(value) ⇒ Boolean
Instance Method Details
#bound? ⇒ Boolean
72 73 74 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 72 def bound? !unbound? end |
#criterion ⇒ Object
17 18 19 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 17 def criterion super || build_criterion end |
#maximum ⇒ Object
39 40 41 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 39 def maximum self[:maximum] && Unitwise(self[:maximum].truncate(4), self[:unit]) end |
#maximum=(value) ⇒ Object
43 44 45 46 47 48 49 50 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 43 def maximum=(value) if value && value.respond_to?(:unit) self[:maximum] = value.value self[:unit] = value.unit else self[:maximum] = value end end |
#minimum ⇒ Object
26 27 28 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 26 def minimum self[:minimum] && Unitwise(self[:minimum].truncate(4), self[:unit]) end |
#minimum=(value) ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 30 def minimum=(value) if value && value.respond_to?(:unit) self[:minimum] = value.value self[:unit] = value.unit else self[:minimum] = value end end |
#oversize?(value) ⇒ Boolean
80 81 82 83 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 80 def oversize?(value) value = Unitwise(value, self[:unit]) unless value.respond_to?(:unit) maximum && value > maximum || false end |
#pass?(value) ⇒ Boolean
76 77 78 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 76 def pass?(value) !undersize?(value) && !oversize?(value) end |
#qualifier ⇒ Object
def specification
@specification ||= [
qualifier, [ minimum, maximum ].compact.join("/")
].compact.join("\n")
end
58 59 60 61 62 63 64 65 66 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 58 def qualifier @qualifier ||= if minimum && !maximum "Minimum" elsif maximum && !minimum "Maximum" else nil end end |
#random ⇒ Object
Generate a random value that has a 90% chance of being in spec. TODO: This needs to go in the tests somewhere, not really in the model. :nocov:
93 94 95 96 97 98 99 100 101 102 103 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 93 def random value = if bound? rand(self[:minimum].to_f..self[:maximum].to_f) * 1.1 elsif maximum rand(self[:maximum].to_f) * 1.1 elsif minimum rand((self[:minimum].to_f * 0.8)..(self[:minimum].to_f * 2.0)) end Unitwise(value, self[:unit]) end |
#unbound? ⇒ Boolean
68 69 70 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 68 def unbound? !minimum ^ !maximum end |
#undersize?(value) ⇒ Boolean
85 86 87 88 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 85 def undersize?(value) value = Unitwise(value, self[:unit]) unless value.respond_to?(:unit) minimum && value < minimum || false end |