Class: Numeric

Inherits:
Object show all
Defined in:
motion/core_ext/object/blank.rb,
motion/core_ext/numeric/time.rb,
motion/core_ext/numeric/bytes.rb,
motion/core_ext/object/duplicable.rb,
motion/core_ext/numeric/conversions.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.now) ⇒ Object Also known as: until

Reads best without arguments: 10.minutes.ago


61
62
63
# File 'motion/core_ext/numeric/time.rb', line 61

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

#blank?Boolean

No number is blank:

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

Returns:

  • (Boolean)

102
103
104
# File 'motion/core_ext/object/blank.rb', line 102

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 'motion/core_ext/numeric/bytes.rb', line 10

def bytes
  self
end

#daysObject Also known as: day


45
46
47
# File 'motion/core_ext/numeric/time.rb', line 45

def days
  MotionSupport::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)

74
75
76
# File 'motion/core_ext/object/duplicable.rb', line 74

def duplicable?
  false
end

#exabytesObject Also known as: exabyte


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

def exabytes
  self * EXABYTE
end

#fortnightsObject Also known as: fortnight


55
56
57
# File 'motion/core_ext/numeric/time.rb', line 55

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

#gigabytesObject Also known as: gigabyte


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

def gigabytes
  self * GIGABYTE
end

#hoursObject Also known as: hour


40
41
42
# File 'motion/core_ext/numeric/time.rb', line 40

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

#kilobytesObject Also known as: kilobyte


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

def kilobytes
  self * KILOBYTE
end

#megabytesObject Also known as: megabyte


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

def megabytes
  self * MEGABYTE
end

#minutesObject Also known as: minute


35
36
37
# File 'motion/core_ext/numeric/time.rb', line 35

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

#petabytesObject Also known as: petabyte


35
36
37
# File 'motion/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.


30
31
32
# File 'motion/core_ext/numeric/time.rb', line 30

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

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

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


69
70
71
# File 'motion/core_ext/numeric/time.rb', line 69

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

#terabytesObject Also known as: terabyte


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

def terabytes
  self * TERABYTE
end

#to_formatted_s(format = :default, options = {}) ⇒ Object

Provides options for converting numbers into formatted strings. Right now, options are only provided for phone numbers.

Options

For details on which formats use which options, see MotionSupport::NumberHelper

Examples

Phone Numbers:
5551234.to_s(:phone)                                     # => 555-1234
1235551234.to_s(:phone)                                  # => 123-555-1234
1235551234.to_s(:phone, area_code: true)                 # => (123) 555-1234
1235551234.to_s(:phone, delimiter: ' ')                  # => 123 555 1234
1235551234.to_s(:phone, area_code: true, extension: 555) # => (123) 555-1234 x 555
1235551234.to_s(:phone, country_code: 1)                 # => +1-123-555-1234
1235551234.to_s(:phone, country_code: 1, extension: 1343, delimiter: '.')
# => +1.123.555.1234 x 1343

20
21
22
23
24
25
26
27
# File 'motion/core_ext/numeric/conversions.rb', line 20

def to_formatted_s(format = :default, options = {})
  case format
  when :phone
    return MotionSupport::NumberHelper.number_to_phone(self, options)
  else
    self.to_default_s
  end
end

#to_jsonObject

Stub method to return a pseudo-JSON value from a number. It just returns a string by calling to_s. This should work most of the time.


46
47
48
# File 'motion/core_ext/numeric/conversions.rb', line 46

def to_json
  to_s
end

#weeksObject Also known as: week


50
51
52
# File 'motion/core_ext/numeric/time.rb', line 50

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