class TTY::Pie::DataItem

Encapsulates a single data item

Constants

LABEL_FORMAT

Attributes

angle[W]
color[RW]
fill[RW]
name[RW]
percent[RW]
value[RW]

Public Class Methods

new(name, value, percent, color, fill) click to toggle source

Creat a DataItem

@api private

# File lib/tty/pie/data_item.rb, line 26
def initialize(name, value, percent, color, fill)
  @name = name
  @value = value
  @color = color
  @percent = percent
  @fill = fill
  @pastel = Pastel.new(enabled: !!color)
end

Public Instance Methods

angle() click to toggle source

The item start angle

@api private

# File lib/tty/pie/data_item.rb, line 38
def angle
  percent * FULL_CIRCLE_DEGREES / 100.to_f
end
number_to_currency(value, precision: 2, delimiter: ",") click to toggle source

Convert a number to a currency

@param [Numeric] value @param [Integer] precision @param [String] delimiter

@return [String]

@api private

# File lib/tty/pie/data_item.rb, line 71
def number_to_currency(value, precision: 2, delimiter: ",")
  whole, part = value.to_s.split(".")
  unless part.nil?
    part = format("%.#{precision}f", part.to_f / 10**part.size)[1..-1]
  end
  "#{whole.gsub(/(\d)(?=(\d{3})+(?!\d))/, "\\1#{delimiter}")}#{part}"
end
to_label(legend) click to toggle source

Convert a data item into a legend label

@param [Hash] legend

@return [String]

@api private

# File lib/tty/pie/data_item.rb, line 49
def to_label(legend)
  pattern   = legend && legend[:format] || LABEL_FORMAT
  precision = legend && legend[:precision] || 2
  delimiter = legend && legend[:delimiter] || ","

  label = color ? @pastel.decorate(fill, color) : fill
  currency = number_to_currency(value, precision: precision,
                                       delimiter: delimiter)

  format(pattern, label: label, name: name, value: value,
                  percent: percent, currency: currency)
end