Class: Scruffy::Formatters::Currency

Inherits:
Base
  • Object
show all
Defined in:
lib/scruffy/formatters.rb

Overview

Currency formatter.

Provides formatting for currencies.

Instance Method Summary collapse

Methods inherited from Base

#route_format

Constructor Details

#initialize(options = {}) ⇒ Currency

Returns a new Currency class.

Options:

precision

precision of value

unit

Defaults to ‘$’

separator

Defaults to ‘.’

delimiter

Defaults to ‘,’

negative_color

Color of value marker for negative values. Defaults to ‘red’

special_negatives

If set to true, parenthesizes negative numbers. ie: -$150.50 becomes ($150.50). Defaults to false.



135
136
137
138
139
140
141
142
# File 'lib/scruffy/formatters.rb', line 135

def initialize(options = {})
  @precision        = options[:precision] || 2
  @unit             = options[:unit] || '$'
  @separator        = options[:separator] || '.'
  @delimiter        = options[:delimiter] || ','
  @negative_color   = options[:negative_color] || 'red'
  @special_negatives = options[:special_negatives] || false
end

Instance Method Details

#format(target, idx, options) ⇒ Object

Formats value marker.



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/scruffy/formatters.rb', line 145

def format(target, idx, options)
  @separator = "" unless @precision > 0
  begin
    parts = number_with_precision(target, @precision).split('.')
    if @special_negatives && (target.to_f < 0)
      number = "(" + @unit + parts[0].to_i.abs.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{@delimiter}") + @separator + parts[1].to_s + ")"
    else
      number = @unit + parts[0].to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{@delimiter}") + @separator + parts[1].to_s
    end
    if (target.to_f < 0) && @negative_color
      options[:marker_color_override] = @negative_color
    end
    number
  rescue
    target
  end
end