diff options
Diffstat (limited to 'actionpack/lib/action_view/helpers/number_helper.rb')
-rw-r--r-- | actionpack/lib/action_view/helpers/number_helper.rb | 111 |
1 files changed, 69 insertions, 42 deletions
diff --git a/actionpack/lib/action_view/helpers/number_helper.rb b/actionpack/lib/action_view/helpers/number_helper.rb index 90ff164a5d..e2db853f93 100644 --- a/actionpack/lib/action_view/helpers/number_helper.rb +++ b/actionpack/lib/action_view/helpers/number_helper.rb @@ -4,19 +4,25 @@ module ActionView # Methods are provided for phone numbers, currency, percentage, # precision, positional notation, and file size. module NumberHelper - # Formats a +number+ into a US phone number. You can customize the format + # Formats a +number+ into a US phone number (e.g., (555) 123-9876). You can customize the format # in the +options+ hash. + # + # ==== Options # * <tt>:area_code</tt> - Adds parentheses around the area code. - # * <tt>:delimiter</tt> - Specifies the delimiter to use, defaults to "-". + # * <tt>:delimiter</tt> - Specifies the delimiter to use (defaults to "-"). # * <tt>:extension</tt> - Specifies an extension to add to the end of the - # generated number + # generated number. # * <tt>:country_code</tt> - Sets the country code for the phone number. # - # 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 - # number_to_phone(1235551234, :country_code => 1) + # ==== 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 + # number_to_phone(1235551234, :country_code => 1) # => +1-123-555-1234 + # + # number_to_phone(1235551234, :country_code => 1, :extension => 1343, :delimeter => ".") + # => +1.123.555.1234 x 1343 def number_to_phone(number, options = {}) number = number.to_s.strip unless number.nil? options = options.stringify_keys @@ -40,18 +46,22 @@ module ActionView end end - # Formats a +number+ into a currency string. You can customize the format + # Formats a +number+ into a currency string (e.g., $13.65). You can customize the format # in the +options+ hash. - # * <tt>:precision</tt> - Sets the level of precision, defaults to 2 - # * <tt>:unit</tt> - Sets the denomination of the currency, defaults to "$" - # * <tt>:separator</tt> - Sets the separator between the units, defaults to "." - # * <tt>:delimiter</tt> - Sets the thousands delimiter, defaults to "," # - # number_to_currency(1234567890.50) => $1,234,567,890.50 - # number_to_currency(1234567890.506) => $1,234,567,890.51 - # number_to_currency(1234567890.506, :precision => 3) => $1,234,567,890.506 + # ==== Options + # * <tt>:precision</tt> - Sets the level of precision (defaults to 2). + # * <tt>:unit</tt> - Sets the denomination of the currency (defaults to "$"). + # * <tt>:separator</tt> - Sets the separator between the units (defaults to "."). + # * <tt>:delimiter</tt> - Sets the thousands delimiter (defaults to ","). + # + # ==== 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.506, :precision => 3) # => $1,234,567,890.506 + # # number_to_currency(1234567890.50, :unit => "£", :separator => ",", :delimiter => "") - # => £1234567890,50 + # # => £1234567890,50 def number_to_currency(number, options = {}) options = options.stringify_keys precision = options["precision"] || 2 @@ -67,14 +77,19 @@ module ActionView end end - # Formats a +number+ as a percentage string. You can customize the + # Formats a +number+ as a percentage string (e.g., 65%). You can customize the # format in the +options+ hash. - # * <tt>:precision</tt> - Sets the level of precision, defaults to 3 - # * <tt>:separator</tt> - Sets the separator between the units, defaults to "." # - # number_to_percentage(100) => 100.000% - # number_to_percentage(100, {:precision => 0}) => 100% - # number_to_percentage(302.0574, {:precision => 2}) => 302.06% + # ==== Options + # * <tt>:precision</tt> - Sets the level of precision (defaults to 3). + # * <tt>:separator</tt> - Sets the separator between the units (defaults to "."). + # + # ==== Examples + # number_to_percentage(100) # => 100.000% + # number_to_percentage(100, :precision => 0) # => 100% + # + # number_to_percentage(302.24398923423, :precision => 5) + # # => 302.24399% def number_to_percentage(number, options = {}) options = options.stringify_keys precision = options["precision"] || 3 @@ -93,14 +108,20 @@ module ActionView end end - # Formats a +number+ with grouped thousands using +delimiter+. You + # Formats a +number+ with grouped thousands using +delimiter+ (e.g., 12,324). You # can customize the format using optional <em>delimiter</em> and <em>separator</em> parameters. - # * <tt>delimiter</tt> - Sets the thousands delimiter, defaults to "," - # * <tt>separator</tt> - Sets the separator between the units, defaults to "." # - # number_with_delimiter(12345678) => 12,345,678 - # number_with_delimiter(12345678.05) => 12,345,678.05 - # number_with_delimiter(12345678, ".") => 12.345.678 + # ==== Options + # * <tt>delimiter</tt> - Sets the thousands delimiter (defaults to ","). + # * <tt>separator</tt> - Sets the separator between the units (defaults to "."). + # + # ==== Examples + # number_with_delimiter(12345678) # => 12,345,678 + # number_with_delimiter(12345678.05) # => 12,345,678.05 + # number_with_delimiter(12345678, ".") # => 12.345.678 + # + # number_with_delimiter(98765432.98, " ", ",") + # # => 98 765 432,98 def number_with_delimiter(number, delimiter=",", separator=".") begin parts = number.to_s.split('.') @@ -111,29 +132,35 @@ module ActionView end end - # Formats a +number+ with the specified level of +precision+. The default + # Formats a +number+ with the specified level of +precision+ (e.g., 112.32 has a precision of 2). The default # level of precision is 3. # - # number_with_precision(111.2345) => 111.235 - # number_with_precision(111.2345, 2) => 111.24 + # ==== Examples + # number_with_precision(111.2345) # => 111.235 + # number_with_precision(111.2345, 2) # => 111.24 + # number_with_precision(13, 5) # => 13.00000 + # number_with_precision(389.32314, 0) # => 389 def number_with_precision(number, precision=3) "%01.#{precision}f" % number rescue number end - # Formats the bytes in +size+ into a more understandable representation. - # Useful for reporting file sizes to users. This method returns nil if + # Formats the bytes in +size+ into a more understandable representation + # (e.g., giving it 1500 yields 1.5 KB). This method is useful for + # reporting file sizes to users. This method returns nil if # +size+ cannot be converted into a number. You can change the default - # precision of 1 in +precision+. + # precision of 1 using the precision parameter +precision+. # - # number_to_human_size(123) => 123 Bytes - # number_to_human_size(1234) => 1.2 KB - # number_to_human_size(12345) => 12.1 KB - # number_to_human_size(1234567) => 1.2 MB - # number_to_human_size(1234567890) => 1.1 GB - # number_to_human_size(1234567890123) => 1.1 TB - # number_to_human_size(1234567, 2) => 1.18 MB + # ==== Examples + # number_to_human_size(123) # => 123 Bytes + # number_to_human_size(1234) # => 1.2 KB + # number_to_human_size(12345) # => 12.1 KB + # number_to_human_size(1234567) # => 1.2 MB + # number_to_human_size(1234567890) # => 1.1 GB + # number_to_human_size(1234567890123) # => 1.1 TB + # number_to_human_size(1234567, 2) # => 1.18 MB + # number_to_human_size(483989, 0) # => 4 MB def number_to_human_size(size, precision=1) size = Kernel.Float(size) case |