class Hanami::View::Helpers::NumberFormattingHelper::Formatter

Formatter

@since 2.1.0 @api private

Constants

DELIMITING_REGEX

Regex to delimit the integer part of a number into groups of three digits.

@since 2.1.0 @api private

INTEGER_REGEXP

Regex to guess if the number is a integer.

@since 2.1.0 @api private

Public Class Methods

call(number, delimiter:, separator:, precision:) click to toggle source

@see NumberFormattingHelper#format_number

@since 2.1.0 @api private

# File lib/hanami/view/helpers/number_formatting_helper.rb, line 115
def self.call(number, delimiter:, separator:, precision:)
  number = coerce(number)
  str = to_str(number, precision)
  array = parts(str, delimiter)

  array.join(separator)
end
coerce(number) click to toggle source

Coerces the given number or string into a number.

@since 2.1.0 @api private

# File lib/hanami/view/helpers/number_formatting_helper.rb, line 127
def self.coerce(number)
  case number
  when NilClass
    raise ArgumentError, "failed to convert #{number.inspect} to number"
  when ->(n) { n.to_s.match(INTEGER_REGEXP) }
    Integer(number)
  else
    begin
      Float(number)
    rescue TypeError
      raise ArgumentError, "failed to convert #{number.inspect} to float"
    rescue ArgumentError => e
      raise e.class, "failed to convert #{number.inspect} to float"
    end
  end
end
delimit_integer(integer_part, delimiter) click to toggle source

Delimits the given integer part of a number.

@param integer_part [String] integer part of the number @param delimiter [String] hundreds delimiter

@return [String] delimited integer string

@since 2.1.0 @api private

# File lib/hanami/view/helpers/number_formatting_helper.rb, line 175
def self.delimit_integer(integer_part, delimiter)
  integer_part.gsub(DELIMITING_REGEX) { |digit| "#{digit}#{delimiter}" }
end
parts(string, delimiter) click to toggle source

Returns the integer and fractional parts of the given number string.

@since 2.1.0 @api private

# File lib/hanami/view/helpers/number_formatting_helper.rb, line 161
def self.parts(string, delimiter)
  integer_part, fractional_part = string.split(DEFAULT_SEPARATOR)
  [delimit_integer(integer_part, delimiter), fractional_part].compact
end
to_str(number, precision) click to toggle source

Formats the given number as a string.

@since 2.1.0 @api private

# File lib/hanami/view/helpers/number_formatting_helper.rb, line 148
def self.to_str(number, precision)
  case number
  when Integer
    number.to_s
  else
    ::Kernel.format("%.#{precision}f", number)
  end
end