class Numeric

Constants

DEFAULTS
UNITS

Public Instance Methods

to_duration(options = {}) click to toggle source
# File lib/time_duration_humanizer.rb, line 26
def to_duration(options = {})
  options = DEFAULTS.dup.merge!(options)
  units = to_duration_units(options).map { |v| t_duration_unit(v) }
  last = if units.length > 1 && options[:and_at_end] == true
           " #{I18n.t('time_duration_humanizer.and')} #{units.pop}"
         else
           ''
         end
  units.join(', ') + last
end

Private Instance Methods

t_duration_unit(unit) click to toggle source
# File lib/time_duration_humanizer.rb, line 56
def t_duration_unit(unit)
  "#{unit[:value]} " + I18n.t(
    "time_duration_humanizer.#{unit[:name]}", count: unit[:value]
  )
end
to_duration_units(options) click to toggle source
# File lib/time_duration_humanizer.rb, line 39
def to_duration_units(options)
  units = []
  seconds = to_i

  UNITS.each do |k, v|
    next if options[k] != true

    secs = k == :year ? (options[:days_in_year] * UNITS[:day]).to_i : v
    value = seconds >= secs ? seconds / secs : 0
    if value > 0
      units << { name: k, value: value }
      seconds -= value * secs
    end
  end
  units
end