Module: Yummi::Formatters

Defined in:
lib/yummi/formatters.rb

Overview

A module with useful formatters

Constant Summary collapse

BYTE_MODES =

Defines the modes to format a byte value

{
    :iec => {
        :range => %w{B KiB MiB GiB TiB PiB EiB ZiB YiB},
        :step => 1024
    },
    :si => {
        :range => %w{B KB MB GB TB PB EB ZB YB},
        :step => 1000
    }
}

Class Method Summary collapse

Class Method Details

.boolean(params = {}) ⇒ Object

A formatter for boolean values that uses ‘Yes’ or ‘No’ by default

Hash Args

:if_true => String to use when value is true :if_false => String to use when value is false



52
53
54
55
56
57
58
59
60
61
# File 'lib/yummi/formatters.rb', line 52

def self.boolean(params = {})
  Yummi::to_format do |ctx|
    value = ctx.value
    if value.to_s.downcase == 'true'
      (params[:if_true] or 'Yes')
    else
      (params[:if_false] or 'No')
    end
  end
end

.byte(params = {}) ⇒ Object

Formats a byte value to ensure easily reading

Hash Args

precision

How many decimal digits should be displayed. (Defaults to 1)

mode

Which mode should be used to display unit symbols. (Defaults to :iec)

See #BYTE_MODES



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/yummi/formatters.rb', line 149

def self.byte(params = {})
  Yummi::to_format do |ctx|
    value = ctx.value
    value = value.to_i if value.is_a? String
    mode = (params[:mode] or :iec)
    range = BYTE_MODES[mode][:range]
    step = BYTE_MODES[mode][:step]
    params[:precision] ||= 1
    result = value
    range.each_index do |i|
      minimun = (step.** i)
      result = "%.#{params[:precision]}f #{range[i]}" %
        (value.to_f / minimun) if value >= minimun
    end
    result
  end
end

.numeric(params) ⇒ Object

A formatter for numeric values

Hash Args

:negative => format to use when value is negative :zero => format to use when value is zero :positive => format to use when value is positive :any => format to use for any value without a specific format :separator => a thousand separator for use instead of the formats above



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/yummi/formatters.rb', line 90

def self.numeric(params)
  Yummi::to_format do |ctx|
    value = ctx.value
    negative = (params[:negative] or params[:any])
    positive = (params[:positive] or params[:any])
    zero = (params[:zero] or params[:any])
    if negative and value < 0
      negative % value.abs
    elsif positive and value > 0
      positive % value
    elsif zero and value == 0
      zero % value
    else
      if params[:separator]
        value.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{params[:separator]}")
      else
        value
      end
    end
  end
end

.percentage(precision = 3) ⇒ Object

A formatter for percent values.

Parameters:

The precision to use (defaults to 3)


118
119
120
121
122
123
# File 'lib/yummi/formatters.rb', line 118

def self.percentage(precision = 3)
  Yummi::to_format do |ctx|
    value = ctx.value
    "%.#{precision}f%%" % (value * 100)
  end
end

.round(precision) ⇒ Object

A formatter to round float values



64
65
66
67
68
69
# File 'lib/yummi/formatters.rb', line 64

def self.round(precision)
  Yummi::to_format do |ctx|
    value = ctx.value
    "%.#{precision}f" % value
  end
end

.with(format) ⇒ Object

A formatter that uses the given format



72
73
74
75
76
77
# File 'lib/yummi/formatters.rb', line 72

def self.with(format)
  Yummi::to_format do |ctx|
    value = ctx.value
    format % value
  end
end