Module: ActionView::Helpers::NumberHelper

Defined in:
lib/action_view/helpers/number_helper.rb

Overview

Provides methods for converting a number into a formatted string that currently represents one of the following forms: phone number, percentage, money, or precision level.

Instance Method Summary collapse

Instance Method Details

#number_to_currency(number, options = {}) ⇒ Object

Formats a number into a currency string. The options hash can be used to customize the format of the output. The number can contain a level of precision using the precision key; default is 2 The currency type can be set using the unit key; default is “$” The unit separator can be set using the separator key; default is “.” The delimiter can be set using the delimiter key; default is “,” Examples:

number_to_currency(1234567890.50)     => $1,234,567,890.50
number_to_currency(1234567890.506)    => $1,234,567,890.51
number_to_currency(1234567890.50, {:unit => "£", :separator => ",", :delimiter => ""}) => £1234567890,50

37
38
39
40
41
42
43
44
45
46
47
# File 'lib/action_view/helpers/number_helper.rb', line 37

def number_to_currency(number, options = {})
  options = options.stringify_keys
  precision, unit, separator, delimiter = options.delete("precision") { 2 }, options.delete("unit") { "$" }, options.delete("separator") { "." }, options.delete("delimiter") { "," }
  separator = "" unless precision > 0
  begin
    parts = number_with_precision(number, precision).split('.')
    unit + number_with_delimiter(parts[0], delimiter) + separator + parts[1].to_s
  rescue
    number
  end
end

#number_to_human_size(size) ⇒ Object Also known as: human_size

Returns a formatted-for-humans file size.

Examples:

human_size(123)          => 123 Bytes
human_size(1234)         => 1.2 KB
human_size(12345)        => 12.1 KB
human_size(1234567)      => 1.2 MB
human_size(1234567890)   => 1.1 GB

87
88
89
90
91
92
93
94
95
96
97
# File 'lib/action_view/helpers/number_helper.rb', line 87

def number_to_human_size(size)
  begin
    return "%d Bytes" % size                if size < 1.kilobytes
    return "%.1f KB" % (size/1.0.kilobytes) if size < 1.megabytes
    return "%.1f MB" % (size/1.0.megabytes) if size < 1.gigabytes
    return "%.1f GB" % (size/1.0.gigabytes) if size < 1.terabytes
    return "%.1f TB" % (size/1.0.terabytes) 
  rescue
    # just return nothing
  end
end

#number_to_percentage(number, options = {}) ⇒ Object

Formats a number as into a percentage string. The options hash can be used to customize the format of the output. The number can contain a level of precision using the precision key; default is 3 The unit separator can be set using the separator key; default is “.” Examples:

number_to_percentage(100)    => 100.000%
number_to_percentage(100, {:precision => 0}) => 100%
number_to_percentage(302.0574, {:precision => 2})  => 302.06%

56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/action_view/helpers/number_helper.rb', line 56

def number_to_percentage(number, options = {})
  options = options.stringify_keys
  precision, separator = options.delete("precision") { 3 }, options.delete("separator") { "." }
  begin
    number = number_with_precision(number, precision)
    parts = number.split('.')
    if parts.at(1).nil?
      parts[0] + "%"
    else
      parts[0] + separator + parts[1].to_s + "%"
    end
  rescue
    number
  end
end

#number_to_phone(number, options = {}) ⇒ Object

Formats a number into a US phone number string. The options can be a hash used to customize the format of the output. The area code can be surrounded by parentheses by setting :area_code to true; default is false The delimiter can be set using :delimiter; default is “-” Examples:

number_to_phone(1235551234)   => 123-555-1234
number_to_phone(1235551234, {:area_code => true})   => (123) 555-1234
number_to_phone(1235551234, {:delimiter => " "})    => 123 555 1234
number_to_phone(1235551234, {:area_code => true, :extension => 555})  => (123) 555-1234 x 555

15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/action_view/helpers/number_helper.rb', line 15

def number_to_phone(number, options = {})
  options   = options.stringify_keys
  area_code = options.delete("area_code") { false }
  delimiter = options.delete("delimiter") { "-" }
  extension = options.delete("extension") { "" }
  begin
    str = area_code == true ? number.to_s.gsub(/([0-9]{3})([0-9]{3})([0-9]{4})/,"(\\1) \\2#{delimiter}\\3") : number.to_s.gsub(/([0-9]{3})([0-9]{3})([0-9]{4})/,"\\1#{delimiter}\\2#{delimiter}\\3")
    extension.to_s.strip.empty? ? str : "#{str} x #{extension.to_s.strip}"
  rescue
    number
  end
end

#number_with_delimiter(number, delimiter = ",") ⇒ Object

Formats a number with a delimiter. Example:

number_with_delimiter(12345678) => 12,345,678

75
76
77
# File 'lib/action_view/helpers/number_helper.rb', line 75

def number_with_delimiter(number, delimiter=",")
  number.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{delimiter}")
end

#number_with_precision(number, precision = 3) ⇒ Object

Formats a number with a level of precision. Example:

number_with_precision(111.2345) => 111.235

104
105
106
# File 'lib/action_view/helpers/number_helper.rb', line 104

def number_with_precision(number, precision=3)
  sprintf("%01.#{precision}f", number)
end