Module: Quby::Compiler::Entities::Questions::Concerns::SplitToUnits

Extended by:
ActiveSupport::Concern
Included in:
IntegerQuestion
Defined in:
lib/quby/compiler/entities/questions/concerns/split_to_units.rb

Constant Summary collapse

DEFAULT_SPLIT_TO_UNIT_CONVERSIONS =
{
  minutes: {
    hours: 60,
    days: 1440,
    weeks: 10080
  },
  seconds: {
    minutes: 60,
    hours: 3600,
    days: 86400
  },
  m: {
    km: 1000
  },
  cm: {
    m: 100
  },
  mm: {
    cm: 10,
    m: 1000
  },
  g: {
    kg: 1000
  }
}.freeze

Instance Method Summary collapse

Instance Method Details

#after_buildObject



37
38
39
40
41
42
# File 'lib/quby/compiler/entities/questions/concerns/split_to_units.rb', line 37

def after_build
  super
  return unless as == :split_to_units
  @unit = units&.last
  (@conversions ||= {}).reverse_merge!(default_split_to_units_conversions)
end

#default_split_to_units_conversionsObject



44
45
46
# File 'lib/quby/compiler/entities/questions/concerns/split_to_units.rb', line 44

def default_split_to_units_conversions
  (DEFAULT_SPLIT_TO_UNIT_CONVERSIONS[unit] || {}).slice(*units)
end

#validate_split_to_unitsObject



48
49
50
51
52
53
54
55
56
# File 'lib/quby/compiler/entities/questions/concerns/split_to_units.rb', line 48

def validate_split_to_units
  return unless units.present? && conversions.present?

  (units - [unit]).each do |unit_to_convert|
    if conversions[unit_to_convert].nil?
      errors.add(:conversions, "should contain a conversion for unit #{unit_to_convert}")
    end
  end
end