class Formatter::Number
Number
formatter
Gem version
Constants
- DEFAULTS
- VERSION
Public Class Methods
new(options = { }.freeze)
click to toggle source
Initialize a formatter with the desired options.
@param [Hash] options the options to create a formatter with @option options [Integer] :decimals (2) Number
of decimal points @option options [Boolean] :fixed (false) Fixed decimal places @option options [String] :separator (‘.’) Decimal mark @option options [Integer] :grouping (3) Number
of digits per group @option options [String] :delimiter (‘,’) Delimiter between groups
# File lib/formatter/number.rb, line 22 def initialize(options = { }.freeze) @options = defaults.merge(options) end
Public Instance Methods
format(number)
click to toggle source
# File lib/formatter/number.rb, line 26 def format(number) case number when Float then format_float(number) when Integer then format_integer(number) else fail ArgumentError end end
Private Instance Methods
decimals()
click to toggle source
# File lib/formatter/number.rb, line 66 def decimals @options.fetch :decimals end
defaults()
click to toggle source
# File lib/formatter/number.rb, line 62 def defaults DEFAULTS end
delimit(number)
click to toggle source
# File lib/formatter/number.rb, line 51 def delimit(number) if grouping == 2 # When grouped by two the first group is by three and the rest of them # are grouped by two. This is according to the Indian Numbering System. number.to_s.gsub(/(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/, "\\1#{delimiter}") else group = '\d' * grouping number.to_s.gsub(/(\d)(?=(#{group})+(?!\d))/, "\\1#{delimiter}") end end
delimiter()
click to toggle source
# File lib/formatter/number.rb, line 82 def delimiter @options.fetch :delimiter end
fixed?()
click to toggle source
# File lib/formatter/number.rb, line 70 def fixed? @options.fetch :fixed end
format_float(number)
click to toggle source
# File lib/formatter/number.rb, line 35 def format_float(number) if fixed? number = "%0.0#{decimals}f" % number else number = number.round(decimals) end number = number.to_s.gsub('.', separator) delimit(number) end
format_integer(number)
click to toggle source
# File lib/formatter/number.rb, line 47 def format_integer(number) delimit(number) end
grouping()
click to toggle source
# File lib/formatter/number.rb, line 78 def grouping @options.fetch :grouping end
separator()
click to toggle source
# File lib/formatter/number.rb, line 74 def separator @options.fetch :separator end