class Laser::Cutter::Configuration

Constants

DEFAULTS
FLOATS
NON_ZERO
REQUIRED
SIZE_REGEXP
UNIT_SPECIFIC_DEFAULTS

Public Class Methods

new(options = {}) click to toggle source
# File lib/laser-cutter/configuration.rb, line 43
def initialize(options = {})
  options.delete_if { |k, v| v.nil? }
  if options['units'] && !UNIT_SPECIFIC_DEFAULTS.keys.include?(options['units'])
    options.delete('units')
  end
  self.merge!(DEFAULTS)
  self.merge!(options)
  if self['size'] && self['size'] =~ SIZE_REGEXP
    dim, self['thickness'], self['notch'] = self['size'].split('/')
    self['width'], self['height'], self['depth'] = dim.split('x')
    delete('size')
  end
  FLOATS.each do |k|
    self[k] = self[k].to_f if (self[k] && self[k].is_a?(String))
  end
  self.merge!(UNIT_SPECIFIC_DEFAULTS[self['units']].merge(self))
  self['notch'] = (self['thickness'] * 3.0).round(5) if self['thickness'] && self['notch'].nil?
end

Public Instance Methods

change_units(new_units) click to toggle source
# File lib/laser-cutter/configuration.rb, line 72
def change_units(new_units)
  return if (self.units.eql?(new_units) || !UNIT_SPECIFIC_DEFAULTS.keys.include?(new_units))
  k = (self.units == 'in') ? UnitsConverter.in2mm(1.0) : UnitsConverter.mm2in(1.0)
  FLOATS.each do |field|
    next if self.send(field.to_sym).nil?
    self.send("#{field}=".to_sym, (self.send(field.to_sym) * k).round(5))
  end
  self.units = new_units
end
validate!() click to toggle source
# File lib/laser-cutter/configuration.rb, line 62
def validate!
  missing = []
  REQUIRED.each { |k| missing << k if self[k].nil? }
  raise MissingOption.new("#{missing.join(', ')} #{missing.size > 1 ? 'are' : 'is'} required, but missing.") unless missing.empty?

  zeros = []
  NON_ZERO.each { |k| zeros << k if self[k] == 0 }
  raise ZeroValueNotAllowed.new("#{zeros.join(', ')} #{zeros.size > 1 ? 'are' : 'is'} required, but is zero.") unless zeros.empty?
end