class Ppl::Format::Custom

Attributes

format[RW]
preset_formats[RW]

Public Class Methods

format(symbol, &block) click to toggle source
# File lib/ppl/format/custom.rb, line 6
def self.format(symbol, &block)
  @format_blocks ||= {}
  @format_blocks[symbol] = block
end
new(format = nil) click to toggle source
# File lib/ppl/format/custom.rb, line 19
def initialize(format = nil)
  @format = format
end
process(key, object) click to toggle source
# File lib/ppl/format/custom.rb, line 11
def self.process(key, object)
  if @format_blocks[key]
    @format_blocks[key][object]
  else
    key
  end
end

Public Instance Methods

process(object) click to toggle source
# File lib/ppl/format/custom.rb, line 23
def process(object)
  @object = object
  string_pieces = @format.scan(/[^%]+|%-?\d*./)
  string_pieces.map(&method(:process_piece)).join
end
use_preset(format_name) click to toggle source
# File lib/ppl/format/custom.rb, line 29
def use_preset(format_name)
  @format = @preset_formats[format_name]
end

Private Instance Methods

generate_output(symbol) click to toggle source
# File lib/ppl/format/custom.rb, line 45
def generate_output(symbol)
  self.class.process(symbol, @object)
end
pad_output(output, padding) click to toggle source
# File lib/ppl/format/custom.rb, line 49
def pad_output(output, padding)
  if padding > 0
    output.to_s.rjust(padding, " ")
  elsif padding < 0
    output.to_s.ljust(padding.abs, " ")
  else
    output
  end
end
process_piece(string) click to toggle source
# File lib/ppl/format/custom.rb, line 35
def process_piece(string)
  matches = string.scan(/^%(-?\d+)?([a-z])$/i)
  if !matches.empty?
    output = generate_output(matches[0][1].to_sym)
    pad_output(output, matches[0][0].to_i)
  else
    string
  end
end