class Hanami::View::Helpers::NumberFormattingHelper::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
Source
# 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
@see NumberFormattingHelper#format_number
@since 2.1.0 @api private
Source
# 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
Coerces the given number or string into a number.
@since 2.1.0 @api private
Source
# 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
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
Source
# 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
Returns the integer and fractional parts of the given number string.
@since 2.1.0 @api private
Source
# 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
Formats the given number as a string.
@since 2.1.0 @api private