Module: ArToHtmlTable::ColumnFormatter

Included in:
ArToHtmlTable::ColumnFormats::ClassMethods
Defined in:
lib/ar_to_html_table/column_formatter.rb

Constant Summary collapse

MIN_PERCENT_BAR_VALUE =

Below which no bar is drawn

2.0
REDUCTION_FACTOR =

Scale the bar graps so they have room for the percentage number in most cases

0.80

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object

:nodoc:



14
15
16
17
18
19
20
21
# File 'lib/ar_to_html_table/column_formatter.rb', line 14

def self.included(base) #:nodoc:
  #base.class_eval do
  #  extend  ActiveSupport::Memoizable
  #  memoize :integer_with_delimiter
  #  memoize :float_with_precision
  #  memoize :currency_without_sign
  #end
end

Instance Method Details

#bar_and_percentage(val, options) ⇒ Object

Formats a number as a horizontal CSS-based bar followed by the number formatted as a percentage.

Examples

# Given a value of 11, the formatter will output
<tt><div class="hbar" style="width:#{width}%">&nbsp;</div>
<div>11%</div></tt>

val: the value to be formatted
options: formatter options


275
276
277
278
279
280
281
282
283
# File 'lib/ar_to_html_table/column_formatter.rb', line 275

def bar_and_percentage(val, options)
  if options[:cell_type] == :td
    width = val * bar_reduction_factor(val)
    bar = (val.to_f > MIN_PERCENT_BAR_VALUE) ? "<div class=\"hbar\" style=\"width:#{width}%\">&nbsp;</div>" : ''
    bar + "<div>" + percentage(val, :precision => 1) + "</div>"
  else
    percentage(val, :precision => 1)
  end
end

#currency_without_sign(val, options) ⇒ Object

Formats a number as an float with a delimiter and precision of 2.

Examples

# Given a value of 1245, the formatter will output
1,345.00

val: the value to be formatted
options: formatter options


260
261
262
# File 'lib/ar_to_html_table/column_formatter.rb', line 260

def currency_without_sign(val, options)
  number_with_precision(val.to_f, :precision => 2)
end

#float_with_precision(val, options) ⇒ Object

Formats a number as an float with a delimiter and precision of 1.

Examples

# Given a value of 1245, the formatter will output
1,345.0

val: the value to be formatted
options: formatter options


247
248
249
# File 'lib/ar_to_html_table/column_formatter.rb', line 247

def float_with_precision(val, options)
  number_with_precision(val.to_f, :precision => 1)
end

#group_not_set_on_blank(val, options) ⇒ Object

:nodoc:



46
47
48
# File 'lib/ar_to_html_table/column_formatter.rb', line 46

def group_not_set_on_blank(val, options) #:nodoc:
  # Need more context to do this
end

#hours_to_time(val, options) ⇒ Object

Interprets an integer as a number of hours and outputs the value in the format hh:00

Examples

# Given a value of 11, the formatter will output
=> 11:00

val: the value to be formatted
options: formatter options


104
105
106
# File 'lib/ar_to_html_table/column_formatter.rb', line 104

def hours_to_time(val, options)
  "#{"%02d" % val}:00"
end

#integer_with_delimiter(val, options = {}) ⇒ Object

Formats a number as an integer with a delimiter. If Cldr::Format module is included into I18n then the value is localized (recommended for multilanguage applications). If not, number_with_delimiter is used formatting.

Examples

# Given a value of 1245 and no Cldr::Format, the formatter will output
1,345

val: the value to be formatted
options: formatter options

– TODO this should be done just once at instantiation but we have a potential ordering issue since I18n initializer may not have run yet (needs to be checked)



230
231
232
233
234
235
236
# File 'lib/ar_to_html_table/column_formatter.rb', line 230

def integer_with_delimiter(val, options = {})
  if I18n::Backend::Simple.included_modules.include? Cldr::Format 
    I18n.localize(val.to_i, :format => :short)
  else 
    number_with_delimiter(val.to_i)
  end
end

#long_date(val, options) ⇒ Object

Display as a long date (localized)

Examples

# Given a value of 2010/10/1, the formatter will output
=> October 1, 2010

val: the value to be formatted
options: formatter options


144
145
146
# File 'lib/ar_to_html_table/column_formatter.rb', line 144

def long_date(val, options)
  val ? val.to_date.to_s(:long) : val
end

#long_day_name(val, options) ⇒ Object

Display as a long day name (localized)

Examples

# Given a value of 1, the formatter will output
=> 'Monday'

val: the value to be formatted
options: formatter options


183
184
185
# File 'lib/ar_to_html_table/column_formatter.rb', line 183

def long_day_name(val, options)
  val ? I18n.t('date.day_names')[val.to_i] : val
end

#long_month_name(val, options) ⇒ Object

Display as a long month name (localized)

Examples

# Given a value of 9, the formatter will output
=> 'September'

val: the value to be formatted
options: formatter options


157
158
159
# File 'lib/ar_to_html_table/column_formatter.rb', line 157

def long_month_name(val, options)
  val ? I18n.t('date.month_names')[val.to_i] : val
end

#not_set_on_blank(val, options) ⇒ Object

If the value is #blank? then display a localized version of “Not Set”.

Examples

# Given a value <em>nil</em> the following will be output
# if the locale is set to "en" and the default translations
# are not changed:
(Not Set)

val: the value to be formatted
options: formatter options


38
39
40
41
42
43
44
# File 'lib/ar_to_html_table/column_formatter.rb', line 38

def not_set_on_blank(val, options)
  if options[:cell_type] == :th
    val
  else
    val.blank? ? I18n.t(options[:not_set_key] || 'tables.not_set') : val
  end
end

#ordinalize(val, options) ⇒ Object

Ordinalize a number (ie 1st, 2nd, 3rd, .…). Localization is handled externally to this method

Examples

# Given a value of 14, the formatter will output
=> 14th

val: the value to be formatted
options: formatter options


118
119
120
# File 'lib/ar_to_html_table/column_formatter.rb', line 118

def ordinalize(val, options)
  val ? val.to_i.ordinalize : val
end

#percentage(val, options) ⇒ Object

Interprets an integer as a percentage with a single digit of precision. Shim for #number_to_percentage

Examples

# Given a value of 48, the formatter will output
=> 48.00%

val: the value to be formatted
options: formatter options


210
211
212
# File 'lib/ar_to_html_table/column_formatter.rb', line 210

def percentage(val, options)
  number_to_percentage(val ? val.to_f : 0, :precision => 1)
end

#seconds_to_time(val, options) ⇒ Object

Interprets an integer as a duration and outputs the duration in the format hh:mm:ss or mm:hh:ss if the time is less than an hour.

Examples

# Given a value of 3600, the formatter will output
=> 05:00

val: the value to be formatted
options: formatter options


80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/ar_to_html_table/column_formatter.rb', line 80

def seconds_to_time(val, options)
  val = val.to_i
  hours = val / 3600
  minutes = (val / 60) - (hours * 60)
  seconds = val % 60
  (minutes += 1; seconds = 0) if seconds == 60
  (hours += 1; minutes = 0) if minutes == 60
  if hours > 0
    "#{"%02d" % hours}:#{"%02d" % minutes}:#{"%02d" % seconds}"
  else
    "#{"%02d" % minutes}:#{"%02d" % seconds}"
  end
end

#short_date(val, options) ⇒ Object

Display as a short date (localized)

Examples

# Given a value of 2010/10/1, the formatter will output
=> 1 Oct

val: the value to be formatted
options: formatter options


131
132
133
# File 'lib/ar_to_html_table/column_formatter.rb', line 131

def short_date(val, options)
  val ? val.to_date.to_s(:short) : val
end

#short_day_name(val, options) ⇒ Object

Display as a short day name (localized)

Examples

# Given a value of 1, the formatter will output
=> 'Mon'

val: the value to be formatted
options: formatter options


196
197
198
# File 'lib/ar_to_html_table/column_formatter.rb', line 196

def short_day_name(val, options)
  val ? I18n.t('date.abbr_day_names')[val.to_i] : val
end

#short_month_name(val, options) ⇒ Object

Display as a short month name (localized)

Examples

# Given a value of 9, the formatter will output
=> 'Sep'

val: the value to be formatted
options: formatter options


170
171
172
# File 'lib/ar_to_html_table/column_formatter.rb', line 170

def short_month_name(val, options)
  val ? I18n.t('date.abbr_month_names')[val.to_i] : val
end

#unknown_on_blank(val, options) ⇒ Object

If the value is #blank? then display a localized version of “Unknown”.

Examples

# Given a value _nil_ the following will be output
# if the locale is set to "en" and the default translations
# are not changed:
(Unknown)

val: the value to be formatted
options: formatter options


62
63
64
65
66
67
68
# File 'lib/ar_to_html_table/column_formatter.rb', line 62

def unknown_on_blank(val, options)
  if options[:cell_type] == :th
    val
  else    
    val.blank? ? I18n.t(options[:unknown_key] || 'tables.unknown') : val
  end
end