class AmountFormatter

Constants

FORMAT_DEFAULT_ARGS

Public Class Methods

format(number, args = {}) click to toggle source

Returns the number as a formatted string.

# File lib/amount_formatter.rb, line 9
def self.format(number, args = {})
  separator = args[:separator] || default_separator
  delimiter = args[:delimiter] || default_delimiter

  args = FORMAT_DEFAULT_ARGS.merge(args)
  number = number.to_f unless number.is_a?(Float)
  return sprintf("%.#{args[:precision].to_i}f", number).gsub(".", separator) if number < 1 && number > -1
  number = sprintf("%.#{args[:precision].to_i}f", number).split(".")

  str = ""
  number[0].reverse.scan(/(.{1,3})/) do |match|
    if match[0] == "-"
      #This happens if the number is a negative number and we reach the minus-sign.
      str << match[0]
    else
      str << delimiter if str.length > 0
      str << match[0]
    end
  end

  str = str.reverse
  str << "#{separator}#{number[1]}" if args[:precision] > 0

  return str
end
locale_engine=(engine) click to toggle source
# File lib/amount_formatter.rb, line 4
def self.locale_engine=(engine)
  @locale_engine = engine
end

Private Class Methods

default_delimiter() click to toggle source
# File lib/amount_formatter.rb, line 46
def self.default_delimiter
  if @locale_engine == :i18n && I18n.exists?("number.format.delimiter")
    translation = I18n.t("number.format.delimiter").to_s.strip
    return translation unless translation.empty?
  end

  return ","
end
default_separator() click to toggle source
# File lib/amount_formatter.rb, line 37
def self.default_separator
  if @locale_engine == :i18n && I18n.exists?("number.format.separator")
    translation = I18n.t("number.format.separator").to_s.strip
    return translation unless translation.empty?
  end

  return "."
end