Class: Latinum::Formatters::DecimalCurrencyFormatter
- Inherits:
-
Object
- Object
- Latinum::Formatters::DecimalCurrencyFormatter
- Defined in:
- lib/latinum/formatters.rb
Instance Method Summary collapse
- #format(amount, options = DEFAULT_OPTIONS) ⇒ Object
- #from_integral(amount) ⇒ Object
-
#initialize(options = {}) ⇒ DecimalCurrencyFormatter
constructor
A new instance of DecimalCurrencyFormatter.
- #round(amount) ⇒ Object
- #to_integral(amount) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ DecimalCurrencyFormatter
Returns a new instance of DecimalCurrencyFormatter.
47 48 49 50 51 52 53 54 55 |
# File 'lib/latinum/formatters.rb', line 47 def initialize( = {}) @symbol = [:symbol] || '$' @separator = [:separator] || '.' @delimeter = [:delimter] || ',' @places = [:precision] || 2 @zero = [:zero] || '0' @name = [:name] end |
Instance Method Details
#format(amount, options = DEFAULT_OPTIONS) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/latinum/formatters.rb', line 61 def format(amount, = DEFAULT_OPTIONS) # Round to the desired number of places. Truncation used to be the default. amount = amount.round(@places) fix, frac = amount.abs.to_s('F').split(/\./, 2) # The sign of the number sign = '-' if amount < 0 # Decimal places, e.g. the '.00' in '$10.00' frac = frac[0...@places].ljust(@places, @zero) # Grouping, e.g. the ',' in '$10,000.00' remainder = fix.size % 3 groups = fix[remainder..-1].scan(/.{3}/).to_a groups.unshift(fix[0...remainder]) if remainder > 0 symbol = .fetch(:symbol, @symbol) value = "#{sign}#{symbol}#{groups.join(@delimeter)}" name = .fetch(:name, @name) suffix = name ? " #{name}" : '' if @places > 0 "#{value}#{@separator}#{frac}#{suffix}" else "#{value}#{suffix}" end end |
#from_integral(amount) ⇒ Object
95 96 97 |
# File 'lib/latinum/formatters.rb', line 95 def from_integral(amount) (amount.to_d / 10**@places) end |
#round(amount) ⇒ Object
57 58 59 |
# File 'lib/latinum/formatters.rb', line 57 def round(amount) return amount.round(@places) end |
#to_integral(amount) ⇒ Object
91 92 93 |
# File 'lib/latinum/formatters.rb', line 91 def to_integral(amount) (amount * 10**@places).to_i end |