Class: Numeric

Inherits:
Object show all
Defined in:
lib/active_support/core_ext/object/blank.rb,
lib/active_support/json/encoding.rb,
lib/active_support/core_ext/numeric/time.rb,
lib/active_support/core_ext/numeric/bytes.rb,
lib/active_support/core_ext/object/duplicable.rb,
lib/active_support/core_ext/string/output_safety.rb

Overview

:nodoc:

Constant Summary collapse

KILOBYTE =
1024
MEGABYTE =
KILOBYTE * 1024
GIGABYTE =
MEGABYTE * 1024
TERABYTE =
GIGABYTE * 1024
PETABYTE =
TERABYTE * 1024
EXABYTE =
PETABYTE * 1024

Instance Method Summary collapse

Instance Method Details

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

Reads best without arguments: 10.minutes.ago


65
66
67
# File 'lib/active_support/core_ext/numeric/time.rb', line 65

def ago(time = ::Time.current)
  time - self
end

#as_json(options = nil) ⇒ Object

:nodoc:


185
# File 'lib/active_support/json/encoding.rb', line 185

def as_json(options = nil) self end

#blank?Boolean

No number is blank:

1.blank? # => false
0.blank? # => false

Returns:

  • (Boolean)

118
119
120
# File 'lib/active_support/core_ext/object/blank.rb', line 118

def blank?
  false
end

#bytesObject Also known as: byte

Enables the use of byte calculations and declarations, like 45.bytes + 2.6.megabytes


10
11
12
# File 'lib/active_support/core_ext/numeric/bytes.rb', line 10

def bytes
  self
end

#daysObject Also known as: day


49
50
51
# File 'lib/active_support/core_ext/numeric/time.rb', line 49

def days
  ActiveSupport::Duration.new(self * 24.hours, [[:days, self]])
end

#duplicable?Boolean

Numbers are not duplicable:

3.duplicable? # => false
3.dup         # => TypeError: can't dup Fixnum

Returns:

  • (Boolean)

79
80
81
# File 'lib/active_support/core_ext/object/duplicable.rb', line 79

def duplicable?
  false
end

#encode_json(encoder) ⇒ Object

:nodoc:


186
# File 'lib/active_support/json/encoding.rb', line 186

def encode_json(encoder) to_s end

#exabytesObject Also known as: exabyte


40
41
42
# File 'lib/active_support/core_ext/numeric/bytes.rb', line 40

def exabytes
  self * EXABYTE
end

#fortnightsObject Also known as: fortnight


59
60
61
# File 'lib/active_support/core_ext/numeric/time.rb', line 59

def fortnights
  ActiveSupport::Duration.new(self * 2.weeks, [[:days, self * 14]])
end

#gigabytesObject Also known as: gigabyte


25
26
27
# File 'lib/active_support/core_ext/numeric/bytes.rb', line 25

def gigabytes
  self * GIGABYTE
end

#hoursObject Also known as: hour


44
45
46
# File 'lib/active_support/core_ext/numeric/time.rb', line 44

def hours
  ActiveSupport::Duration.new(self * 3600, [[:seconds, self * 3600]])
end

#html_safe?Boolean

Returns:

  • (Boolean)

83
84
85
# File 'lib/active_support/core_ext/string/output_safety.rb', line 83

def html_safe?
  true
end

#kilobytesObject Also known as: kilobyte


15
16
17
# File 'lib/active_support/core_ext/numeric/bytes.rb', line 15

def kilobytes
  self * KILOBYTE
end

#megabytesObject Also known as: megabyte


20
21
22
# File 'lib/active_support/core_ext/numeric/bytes.rb', line 20

def megabytes
  self * MEGABYTE
end

#minutesObject Also known as: minute


39
40
41
# File 'lib/active_support/core_ext/numeric/time.rb', line 39

def minutes
  ActiveSupport::Duration.new(self * 60, [[:seconds, self * 60]])
end

#petabytesObject Also known as: petabyte


35
36
37
# File 'lib/active_support/core_ext/numeric/bytes.rb', line 35

def petabytes
  self * PETABYTE
end

#secondsObject Also known as: second

Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.

These methods use Time#advance for precise date calculations when using from_now, ago, etc. as well as adding or subtracting their results from a Time object. For example:

# equivalent to Time.now.advance(:months => 1)
1.month.from_now

# equivalent to Time.now.advance(:years => 2)
2.years.from_now

# equivalent to Time.now.advance(:months => 4, :years => 5)
(4.months + 5.years).from_now

While these methods provide precise calculation when used as in the examples above, care should be taken to note that this is not true if the result of `months', `years', etc is converted before use:

# equivalent to 30.days.to_i.from_now
1.month.to_i.from_now

# equivalent to 365.25.days.to_f.from_now
1.year.to_f.from_now

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


34
35
36
# File 'lib/active_support/core_ext/numeric/time.rb', line 34

def seconds
  ActiveSupport::Duration.new(self, [[:seconds, self]])
end

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

Reads best with argument: 10.minutes.since(time)


73
74
75
# File 'lib/active_support/core_ext/numeric/time.rb', line 73

def since(time = ::Time.current)
  time + self
end

#terabytesObject Also known as: terabyte


30
31
32
# File 'lib/active_support/core_ext/numeric/bytes.rb', line 30

def terabytes
  self * TERABYTE
end

#weeksObject Also known as: week


54
55
56
# File 'lib/active_support/core_ext/numeric/time.rb', line 54

def weeks
  ActiveSupport::Duration.new(self * 7.days, [[:days, self * 7]])
end