module ActionView::Helpers::NumberHelper

Provides methods for converting numbers into formatted strings. Methods are provided for phone numbers, currency, percentage, precision, positional notation, file size, and pretty printing.

Most methods expect a number argument, and will return it unchanged if can't be converted into a valid number.

Public Instance Methods

number_to_currency(number, options = {}) click to toggle source

Delegates to ActiveSupport::NumberHelper#number_to_currency.

Additionally, supports a :raise option that will cause InvalidNumberError to be raised if number is not a valid number:

number_to_currency("12x34")              # => "$12x34"
number_to_currency("12x34", raise: true) # => InvalidNumberError
# File lib/action_view/helpers/number_helper.rb, line 50
def number_to_currency(number, options = {})
  delegate_number_helper_method(:number_to_currency, number, options)
end
number_to_human(number, options = {}) click to toggle source

Delegates to ActiveSupport::NumberHelper#number_to_human.

Additionally, supports a :raise option that will cause InvalidNumberError to be raised if number is not a valid number:

number_to_human("12x34")              # => "12x34"
number_to_human("12x34", raise: true) # => InvalidNumberError
# File lib/action_view/helpers/number_helper.rb, line 110
def number_to_human(number, options = {})
  delegate_number_helper_method(:number_to_human, number, options)
end
number_to_human_size(number, options = {}) click to toggle source

Delegates to ActiveSupport::NumberHelper#number_to_human_size.

Additionally, supports a :raise option that will cause InvalidNumberError to be raised if number is not a valid number:

number_to_human_size("12x34")              # => "12x34"
number_to_human_size("12x34", raise: true) # => InvalidNumberError
# File lib/action_view/helpers/number_helper.rb, line 98
def number_to_human_size(number, options = {})
  delegate_number_helper_method(:number_to_human_size, number, options)
end
number_to_percentage(number, options = {}) click to toggle source

Delegates to ActiveSupport::NumberHelper#number_to_percentage.

Additionally, supports a :raise option that will cause InvalidNumberError to be raised if number is not a valid number:

number_to_percentage("99x")              # => "99x%"
number_to_percentage("99x", raise: true) # => InvalidNumberError
# File lib/action_view/helpers/number_helper.rb, line 62
def number_to_percentage(number, options = {})
  delegate_number_helper_method(:number_to_percentage, number, options)
end
number_to_phone(number, options = {}) click to toggle source

Delegates to ActiveSupport::NumberHelper#number_to_phone.

Additionally, supports a :raise option that will cause InvalidNumberError to be raised if number is not a valid number:

number_to_phone("12x34")              # => "12x34"
number_to_phone("12x34", raise: true) # => InvalidNumberError
# File lib/action_view/helpers/number_helper.rb, line 34
def number_to_phone(number, options = {})
  return unless number
  options = options.symbolize_keys

  parse_float(number, true) if options.delete(:raise)
  ERB::Util.html_escape(ActiveSupport::NumberHelper.number_to_phone(number, options))
end
number_with_delimiter(number, options = {}) click to toggle source

Delegates to ActiveSupport::NumberHelper#number_to_delimited.

Additionally, supports a :raise option that will cause InvalidNumberError to be raised if number is not a valid number:

number_with_delimiter("12x34")              # => "12x34"
number_with_delimiter("12x34", raise: true) # => InvalidNumberError
# File lib/action_view/helpers/number_helper.rb, line 74
def number_with_delimiter(number, options = {})
  delegate_number_helper_method(:number_to_delimited, number, options)
end
number_with_precision(number, options = {}) click to toggle source

Delegates to ActiveSupport::NumberHelper#number_to_rounded.

Additionally, supports a :raise option that will cause InvalidNumberError to be raised if number is not a valid number:

number_with_precision("12x34")              # => "12x34"
number_with_precision("12x34", raise: true) # => InvalidNumberError
# File lib/action_view/helpers/number_helper.rb, line 86
def number_with_precision(number, options = {})
  delegate_number_helper_method(:number_to_rounded, number, options)
end

Private Instance Methods

delegate_number_helper_method(method, number, options) click to toggle source
# File lib/action_view/helpers/number_helper.rb, line 115
def delegate_number_helper_method(method, number, options)
  return unless number
  options = escape_unsafe_options(options.symbolize_keys)

  wrap_with_output_safety_handling(number, options.delete(:raise)) {
    ActiveSupport::NumberHelper.public_send(method, number, options)
  }
end
escape_units(units) click to toggle source
# File lib/action_view/helpers/number_helper.rb, line 134
def escape_units(units)
  units.transform_values do |v|
    ERB::Util.html_escape(v)
  end
end
escape_unsafe_options(options) click to toggle source
# File lib/action_view/helpers/number_helper.rb, line 124
def escape_unsafe_options(options)
  options[:format]          = ERB::Util.html_escape(options[:format]) if options[:format]
  options[:negative_format] = ERB::Util.html_escape(options[:negative_format]) if options[:negative_format]
  options[:separator]       = ERB::Util.html_escape(options[:separator]) if options[:separator]
  options[:delimiter]       = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter]
  options[:unit]            = ERB::Util.html_escape(options[:unit]) if options[:unit] && !options[:unit].html_safe?
  options[:units]           = escape_units(options[:units]) if options[:units] && Hash === options[:units]
  options
end
parse_float(number, raise_error) click to toggle source
# File lib/action_view/helpers/number_helper.rb, line 157
def parse_float(number, raise_error)
  result = Float(number, exception: false)
  raise InvalidNumberError, number if result.nil? && raise_error
  result
end
valid_float?(number) click to toggle source
# File lib/action_view/helpers/number_helper.rb, line 153
def valid_float?(number)
  !parse_float(number, false).nil?
end
wrap_with_output_safety_handling(number, raise_on_invalid) { || ... } click to toggle source
# File lib/action_view/helpers/number_helper.rb, line 140
def wrap_with_output_safety_handling(number, raise_on_invalid, &block)
  valid_float = valid_float?(number)
  raise InvalidNumberError, number if raise_on_invalid && !valid_float

  formatted_number = yield

  if valid_float || number.html_safe?
    formatted_number.html_safe
  else
    formatted_number
  end
end