class Scruffy::Formatters::Currency

Currency formatter.

Provides formatting for currencies.

Public Class Methods

new(options = {}) click to toggle source

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.

# File lib/scruffy/formatters.rb, line 153
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

Public Instance Methods

format(target, idx, options) click to toggle source

Formats value marker.

# File lib/scruffy/formatters.rb, line 163
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(%r(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{@delimiter}") + @separator + parts[1].to_s + ")"
    else
      number = @unit + parts[0].to_s.gsub(%r(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{@delimiter}") + @separator + parts[1].to_s
      number.gsub!(@unit + '-', '-' + @unit)
    end
    if (target.to_f < 0) && @negative_color
      options[:marker_color_override] = @negative_color
    else
      options[:marker_color_override] = nil
    end
    number
  rescue
    target
  end
end