Class: Jobshop::Inspection::LimitCriterion

Inherits:
ApplicationRecord show all
Defined in:
app/models/jobshop/inspection/limit_criterion.rb

Instance Method Summary collapse

Instance Method Details

#bound?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 74

def bound?
  !unbound?
end

#criterionObject



19
20
21
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 19

def criterion
  super || build_criterion
end

#maximumObject



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

#minimumObject



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

Returns:

  • (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

Returns:

  • (Boolean)


78
79
80
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 78

def pass?(value)
  !undersize?(value) && !oversize?(value)
end

#qualifierObject

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

#randomObject

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

Returns:

  • (Boolean)


70
71
72
# File 'app/models/jobshop/inspection/limit_criterion.rb', line 70

def unbound?
  !minimum ^ !maximum
end

#undersize?(value) ⇒ Boolean

Returns:

  • (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