123456789_123456789_123456789_123456789_123456789_

Class: ActiveSupport::Duration

Relationships & Source Files
Inherits: Object
Defined in: activesupport/lib/active_support/duration.rb

Overview

Provides accurate date and time measurements using Date#advance and Time#advance, respectively. It mainly supports the methods on ::Numeric.

1.month.ago       # equivalent to Time.now.advance(months: -1)

Instance Attribute Summary

Instance Method Summary

Instance Attribute Details

#parts (rw)

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 10

attr_accessor :value, :parts

#value (rw)

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 10

attr_accessor :value, :parts

Instance Method Details

#+(other)

Adds another Duration or a ::Numeric to this Duration. ::Numeric values are treated as seconds.

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 18

def +(other)
  if Duration === other
    Duration.new(value + other.value, @parts + other.parts)
  else
    Duration.new(value + other, @parts + [[:seconds, other]])
  end
end

#-(other)

Subtracts another Duration or a ::Numeric from this Duration. ::Numeric values are treated as seconds.

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 28

def -(other)
  self + (-other)
end

#<=>

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 129

delegate :<=>, to: :value

#==(other)

Returns true if other is also a Duration instance with the same #value, or if other == value.

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 47

def ==(other)
  if Duration === other
    other.value == value
  else
    other == value
  end
end

#ago(time = ::Time.current) Also known as: #until

Calculates a new ::Time or ::Date that is as far in the past as this Duration represents.

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 108

def ago(time = ::Time.current)
  sum(-1, time)
end

#eql?(other) ⇒ Boolean

Returns true if other is also a Duration instance, which has the same parts as this one.

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 85

def eql?(other)
  Duration === other && other.value.eql?(value)
end

#from_now(time = ::Time.current)

Alias for #since.

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 104

alias :from_now :since

#hash

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 89

def hash
  @value.hash
end

#kind_of?(klass)

Alias for #is_a?.

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 39

alias :kind_of? :is_a?

#respond_to_missing?(method, include_private = false) ⇒ Boolean

:nodoc

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 125

def respond_to_missing?(method, include_private=false) #:nodoc
  @value.respond_to?(method, include_private)
end

#since(time = ::Time.current) Also known as: #from_now

Calculates a new ::Time or ::Date that is as far in the future as this Duration represents.

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 101

def since(time = ::Time.current)
  sum(1, time)
end

#to_i

Returns the number of seconds that this Duration represents.

1.minute.to_i   # => 60
1.hour.to_i     # => 3600
1.day.to_i      # => 86400

Note that this conversion makes some assumptions about the duration of some periods, e.g. months are always 30 days and years are 365.25 days:

# equivalent to 30.days.to_i
1.month.to_i    # => 2592000

# equivalent to 365.25.days.to_i
1.year.to_i     # => 31557600

In such cases, Ruby's core Date and Time should be used for precision date and time arithmetic.

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 79

def to_i
  @value.to_i
end

#to_s

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 55

def to_s
  @value.to_s
end

#until(time = ::Time.current)

Alias for #ago.

[ GitHub ]

  
# File 'activesupport/lib/active_support/duration.rb', line 111

alias :until :ago