Class: Scruffy::Formatters::Number

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

Overview

Default number formatter. Limits precision, beautifies numbers.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#route_format

Constructor Details

#initialize(options = {}) ⇒ Number

Returns a new Number formatter.

Options:

precision

precision to use for value. Can be set to an integer, :none or :auto. :auto will use whatever precision is necessary to portray all the numerical information, up to :precision_limit.

Example: [100.1, 100.44, 200.323] will result in [100.100, 100.440, 200.323]

separator

decimal separator. Defaults to ‘.’

delimiter

delimiter character. Defaults to ‘,’

precision_limit

upper limit for auto precision. (Ignored if roundup is specified)

roundup

round up the number to the given interval



86
87
88
89
90
91
92
# File 'lib/scruffy/formatters.rb', line 86

def initialize(options = {})
  @precision        = options[:precision] || :none
  @roundup          = options[:roundup] || :none
  @separator        = options[:separator] || '.'
  @delimiter        = options[:delimiter] || ','
  @precision_limit  = options[:precision_limit] || 4
end

Instance Attribute Details

#delimiterObject

Returns the value of attribute delimiter.



71
72
73
# File 'lib/scruffy/formatters.rb', line 71

def delimiter
  @delimiter
end

#precisionObject

Returns the value of attribute precision.



71
72
73
# File 'lib/scruffy/formatters.rb', line 71

def precision
  @precision
end

#precision_limitObject

Returns the value of attribute precision_limit.



71
72
73
# File 'lib/scruffy/formatters.rb', line 71

def precision_limit
  @precision_limit
end

#separatorObject

Returns the value of attribute separator.



71
72
73
# File 'lib/scruffy/formatters.rb', line 71

def separator
  @separator
end

Instance Method Details

#format(target, idx, options) ⇒ Object

Formats the value.



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/scruffy/formatters.rb', line 95

def format(target, idx, options)
  my_precision = @precision
  
  if @precision == :auto
    my_precision = options[:all_values].inject(0) do |highest, current|
      cur = current.to_f.to_s.split(".").last.size
      cur > highest ? cur : highest
    end
  
    my_precision = @precision_limit if my_precision > @precision_limit
  elsif @precision == :none
    my_precision = 0
  end
  
  my_separator = @separator
  my_separator = "" unless my_precision > 0
  begin
    number = ""
    
    if @roundup == :none 
      parts = number_with_precision(target, my_precision).split('.')
      number = parts[0].to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{@delimiter}") + my_separator + parts[1].to_s
    else 
      number = roundup(target.to_f, @roundup).to_i.to_s
    end
    
    number
  rescue StandardError => e
    target
  end
end

#rounddown(target, nearest = 100) ⇒ Object



131
132
133
# File 'lib/scruffy/formatters.rb', line 131

def rounddown(target, nearest=100)
  target % nearest == 0 ? target : target - (target % nearest)
end

#roundup(target, nearest = 100) ⇒ Object



128
129
130
# File 'lib/scruffy/formatters.rb', line 128

def roundup(target, nearest=100)
  target % nearest == 0 ? target : target + nearest - (target % nearest)
end