123456789_123456789_123456789_123456789_123456789_

Module: ActionView::Helpers::NumberHelper

Relationships & Source Files
Namespace Children
Exceptions:
Extension / Inclusion / Inheritance Descendants
Included In:
Defined in: actionview/lib/action_view/helpers/number_helper.rb

Overview

Action View Number Helpers

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.

Instance Method Summary

Instance Method Details

#delegate_number_helper_method(method, number, options) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 116

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) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 135

def escape_units(units)
  units.transform_values do |v|
    ERB::Util.html_escape(v)
  end
end

#escape_unsafe_options(options) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 125

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

#number_to_currency(number, options = {})

Delegates to ActiveSupport::NumberHelper#number_to_currency.

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

number_to_currency("12x34")              # => "$12x34"
number_to_currency("12x34", raise: true) # => InvalidNumberError
[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 51

def number_to_currency(number, options = {})
  delegate_number_helper_method(:number_to_currency, number, options)
end

#number_to_human(number, options = {})

Delegates to ActiveSupport::NumberHelper#number_to_human.

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

number_to_human("12x34")              # => "12x34"
number_to_human("12x34", raise: true) # => InvalidNumberError
[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 111

def number_to_human(number, options = {})
  delegate_number_helper_method(:number_to_human, number, options)
end

#number_to_human_size(number, options = {})

Delegates to ActiveSupport::NumberHelper#number_to_human_size.

Additionally, supports a :raise option that will cause NumberHelper::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
[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 99

def number_to_human_size(number, options = {})
  delegate_number_helper_method(:number_to_human_size, number, options)
end

#number_to_percentage(number, options = {})

Delegates to ActiveSupport::NumberHelper#number_to_percentage.

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

number_to_percentage("99x")              # => "99x%"
number_to_percentage("99x", raise: true) # => InvalidNumberError
[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 63

def number_to_percentage(number, options = {})
  delegate_number_helper_method(:number_to_percentage, number, options)
end

#number_to_phone(number, options = {})

Delegates to ActiveSupport::NumberHelper#number_to_phone.

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

number_to_phone("12x34")              # => "12x34"
number_to_phone("12x34", raise: true) # => InvalidNumberError
[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 35

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 = {})

Delegates to ActiveSupport::NumberHelper#number_to_delimited.

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

number_with_delimiter("12x34")              # => "12x34"
number_with_delimiter("12x34", raise: true) # => InvalidNumberError
[ GitHub ]

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

def number_with_delimiter(number, options = {})
  delegate_number_helper_method(:number_to_delimited, number, options)
end

#number_with_precision(number, options = {})

Delegates to ActiveSupport::NumberHelper#number_to_rounded.

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

number_with_precision("12x34")              # => "12x34"
number_with_precision("12x34", raise: true) # => InvalidNumberError
[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 87

def number_with_precision(number, options = {})
  delegate_number_helper_method(:number_to_rounded, number, options)
end

#parse_float(number, raise_error) (private)

Raises:

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 158

def parse_float(number, raise_error)
  result = Float(number, exception: false)
  raise InvalidNumberError, number if result.nil? && raise_error
  result
end

#valid_float?(number) ⇒ Boolean (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 154

def valid_float?(number)
  !parse_float(number, false).nil?
end

#wrap_with_output_safety_handling(number, raise_on_invalid, &block) (private)

Raises:

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/number_helper.rb', line 141

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