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
74 75 76 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 74 def bound? !unbound? end |
#criterion ⇒ Object
19 20 21 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 19 def criterion super || build_criterion end |
#maximum ⇒ Object
41 42 43 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 41 def maximum self[:maximum] && Unitwise(self[:maximum].truncate(4), self[:unit]) end |
#maximum=(value) ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 45 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
28 29 30 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 28 def minimum self[:minimum] && Unitwise(self[:minimum].truncate(4), self[:unit]) end |
#minimum=(value) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 32 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
82 83 84 85 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 82 def oversize?(value) value = Unitwise(value, self[:unit]) unless value.respond_to?(:unit) maximum && value > maximum || false end |
#pass?(value) ⇒ Boolean
78 79 80 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 78 def pass?(value) !undersize?(value) && !oversize?(value) end |
#qualifier ⇒ Object
def specification
@specification ||= [
qualifier, [ minimum, maximum ].compact.join("/")
].compact.join("\n")
end
60 61 62 63 64 65 66 67 68 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 60 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:
95 96 97 98 99 100 101 102 103 104 105 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 95 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
70 71 72 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 70 def unbound? !minimum ^ !maximum end |
#undersize?(value) ⇒ Boolean
87 88 89 90 |
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 87 def undersize?(value) value = Unitwise(value, self[:unit]) unless value.respond_to?(:unit) minimum && value < minimum || false end |