class Thinreports::Core::Shape::TextBlock::Formatter::Number

Private Instance Methods

apply_format_to(value) click to toggle source
# File lib/thinreports/core/shape/text_block/formatter/number.rb, line 13
def apply_format_to(value)
  precision = format.format_number_precision
  delimiter = format.format_number_delimiter

  if_applicable value do |val|
    val = number_with_precision(val, precision) unless blank_value?(precision)
    val = number_with_delimiter(val, delimiter) unless blank_value?(delimiter)
    val
  end
end
convert_to_float(value) click to toggle source
# File lib/thinreports/core/shape/text_block/formatter/number.rb, line 57
def convert_to_float(value)
  Float(value)
rescue ArgumentError
  nil
end
convert_to_integer(value) click to toggle source
# File lib/thinreports/core/shape/text_block/formatter/number.rb, line 51
def convert_to_integer(value)
  Integer(value)
rescue ArgumentError
  nil
end
if_applicable(value, &block) click to toggle source
# File lib/thinreports/core/shape/text_block/formatter/number.rb, line 24
def if_applicable(value, &block)
  normalized_value = normalize(value)
  normalized_value.nil? ? value : block.call(normalized_value)
end
normalize(value) click to toggle source
# File lib/thinreports/core/shape/text_block/formatter/number.rb, line 29
def normalize(value)
  if value.is_a?(String)
    convert_to_integer(value) || convert_to_float(value)
  else
    value
  end
end
number_with_delimiter(value, delimiter = ',') click to toggle source
# File lib/thinreports/core/shape/text_block/formatter/number.rb, line 37
def number_with_delimiter(value, delimiter = ',')
  value_int, value_float = value.to_s.split('.')

  [
    value_int.gsub(/(\d)(?=(\d{3})+(?!\d))/) { "#{$1}#{delimiter}" },
    value_float
  ].compact.join('.')
end
number_with_precision(value, precision = 3) click to toggle source
# File lib/thinreports/core/shape/text_block/formatter/number.rb, line 46
def number_with_precision(value, precision = 3)
  value = BigDecimal(value.to_s).round(precision)
  sprintf("%.#{precision}f", value)
end