~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

Viewing changes to vendor/rails/activesupport/lib/active_support/core_ext/integer/time.rb

  • Committer: Michael Forrest
  • Date: 2010-10-15 16:28:50 UTC
  • Revision ID: michael.forrest@canonical.com-20101015162850-tj2vchanv0kr0dun
refrozeĀ gems

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
module ActiveSupport #:nodoc:
 
2
  module CoreExtensions #:nodoc:
 
3
    module Integer #:nodoc:
 
4
      # Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.
 
5
      #
 
6
      # These methods use Time#advance for precise date calculations when using from_now, ago, etc. 
 
7
      # as well as adding or subtracting their results from a Time object. For example:
 
8
      #
 
9
      #   # equivalent to Time.now.advance(:months => 1)
 
10
      #   1.month.from_now
 
11
      #
 
12
      #   # equivalent to Time.now.advance(:years => 2)
 
13
      #   2.years.from_now
 
14
      #
 
15
      #   # equivalent to Time.now.advance(:months => 4, :years => 5)
 
16
      #   (4.months + 5.years).from_now
 
17
      # 
 
18
      # While these methods provide precise calculation when used as in the examples above, care
 
19
      # should be taken to note that this is not true if the result of `months', `years', etc is
 
20
      # converted before use:
 
21
      #
 
22
      #   # equivalent to 30.days.to_i.from_now
 
23
      #   1.month.to_i.from_now
 
24
      #
 
25
      #   # equivalent to 365.25.days.to_f.from_now
 
26
      #   1.year.to_f.from_now
 
27
      #
 
28
      # In such cases, Ruby's core
 
29
      # Date[http://stdlib.rubyonrails.org/libdoc/date/rdoc/index.html] and
 
30
      # Time[http://stdlib.rubyonrails.org/libdoc/time/rdoc/index.html] should be used for precision
 
31
      # date and time arithmetic
 
32
      module Time        
 
33
        def months
 
34
          ActiveSupport::Duration.new(self * 30.days, [[:months, self]])
 
35
        end
 
36
        alias :month :months
 
37
 
 
38
        def years
 
39
          ActiveSupport::Duration.new(self * 365.25.days, [[:years, self]])
 
40
        end
 
41
        alias :year :years
 
42
      end
 
43
    end
 
44
  end
 
45
end