Class: Jobshop::Inspection::DeviationCriterion
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Jobshop::Inspection::DeviationCriterion
- Defined in:
- app/models/jobshop/inspection/deviation_criterion.rb
Instance Method Summary collapse
- #criterion ⇒ Object
- #lower ⇒ Object
- #lower=(value) ⇒ Object
- #lower_less_than_upper ⇒ Object
- #mean ⇒ Object
- #nominal ⇒ Object
- #oversize?(value) ⇒ Boolean
- #pass?(value) ⇒ Boolean
-
#random ⇒ Object
Generate a random value that has a 90% chance of being in spec.
- #symmetric? ⇒ Boolean
- #undersize?(value) ⇒ Boolean
- #upper ⇒ Object
- #upper=(value) ⇒ Object
Instance Method Details
#criterion ⇒ Object
17 18 19 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 17 def criterion super || build_criterion end |
#lower ⇒ Object
37 38 39 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 37 def lower self[:lower] && Unitwise(self[:lower].truncate(4), self[:unit]) end |
#lower=(value) ⇒ Object
41 42 43 44 45 46 47 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 41 def lower=(value) self[:lower] = if value.respond_to?(:unit) value.convert_to(self[:unit]).value else value end end |
#lower_less_than_upper ⇒ Object
61 62 63 64 65 66 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 61 def lower_less_than_upper return unless lower && upper if lower > upper errors[:base] << "minimum must be less than maximum" end end |
#mean ⇒ Object
29 30 31 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 29 def mean ((nominal + lower) + (nominal + upper)) / 2 end |
#nominal ⇒ Object
33 34 35 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 33 def nominal self[:nominal] && Unitwise(self[:nominal].truncate(4), self[:unit]) end |
#oversize?(value) ⇒ Boolean
93 94 95 96 97 98 99 100 101 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 93 def oversize?(value) value = if value.respond_to?(:unit) value.convert_to(self[:unit]) else Unitwise(value, self[:unit]) end value > upper || false end |
#pass?(value) ⇒ Boolean
80 81 82 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 80 def pass?(value) !undersize?(value) && !oversize?(value) 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.
86 87 88 89 90 91 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 86 def random rand_lower = nominal.to_f + lower.to_f * 1.1 rand_upper = nominal.to_f + upper.to_f * 1.1 value = rand(rand_lower..rand_upper) Unitwise(value.truncate(4), self[:unit]) end |
#symmetric? ⇒ Boolean
def specification
@specfication ||= if symmetric?
"#{nominal}±#{abs(upper)}"
else
"#{nominal}\n#{lower}/#{upper}"
end
end
76 77 78 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 76 def symmetric? @symmetrical ||= lower == upper * -1 end |
#undersize?(value) ⇒ Boolean
103 104 105 106 107 108 109 110 111 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 103 def undersize?(value) value = if value.respond_to?(:unit) value.convert_to(self[:unit]) else Unitwise(value, self[:unit]) end value < nominal - lower || false end |
#upper ⇒ Object
49 50 51 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 49 def upper self[:upper] && Unitwise(self[:upper].truncate(4), self[:unit]) end |
#upper=(value) ⇒ Object
53 54 55 56 57 58 59 |
# File 'app/models/jobshop/inspection/deviation_criterion.rb', line 53 def upper=(value) self[:upper] = if value.respond_to?(:unit) value.convert_to(self[:unit]).value else value end end |