class ToDuration::Duration

Constants

UNITS

Attributes

seconds[R]

Public Class Methods

new(seconds) click to toggle source
# File lib/to_duration/duration.rb, line 15
def initialize(seconds)
  @seconds = Integer(seconds)
end

Public Instance Methods

add(unit, count) click to toggle source
# File lib/to_duration/duration.rb, line 43
def add(unit, count)
  @seconds += UNITS[unit] * count
end
days() click to toggle source
# File lib/to_duration/duration.rb, line 31
def days
  seconds / UNITS[:days]
end
hours() click to toggle source
# File lib/to_duration/duration.rb, line 35
def hours
  seconds / UNITS[:hours]
end
minutes() click to toggle source
# File lib/to_duration/duration.rb, line 39
def minutes
  seconds / UNITS[:minutes]
end
months() click to toggle source
# File lib/to_duration/duration.rb, line 23
def months
  seconds / UNITS[:months]
end
sub(unit, count) click to toggle source
# File lib/to_duration/duration.rb, line 47
def sub(unit, count)
  @seconds -= UNITS[unit] * count
end
to_s(options = {}) click to toggle source
# File lib/to_duration/duration.rb, line 51
def to_s(options = {})
  return ToDuration.t('less_than_one_second') if seconds < 1

  units = to_units(options).map do |k, v|
    "#{v} #{ToDuration.t(k.to_s.chop, count: v)}"
  end

  units.join(', ').tap do |s|
    s.gsub!(/,([^,]*)$/, " #{ToDuration.t('and')}\\1") if units.length > 1
  end
end
to_units(options = {}) click to toggle source
# File lib/to_duration/duration.rb, line 63
def to_units(options = {})
  options = { weeks: false }.merge!(options)
  duration = Duration.new(seconds)

  {}.tap do |units|
    UNITS.keys.each do |k|
      next if options.key?(k) && options[k] != true

      count = duration.public_send(k)
      next if count.zero?

      units[k] = count
      duration.sub(k, count)
    end
  end
end
weeks() click to toggle source
# File lib/to_duration/duration.rb, line 27
def weeks
  seconds / UNITS[:weeks]
end
years() click to toggle source
# File lib/to_duration/duration.rb, line 19
def years
  seconds / UNITS[:years]
end