class Tabl::Table

Attributes

columns[R]
keys[R]

Public Class Methods

new(args = {}) { |self| ... } click to toggle source
# File lib/tabl/table.rb, line 6
def initialize(args = {})
  @base_columns = {}
  add_base_columns(args[:base_columns] || {})
  @formats = {}
  @columns = {}
  self.columns=(args[:columns] || [])
  yield self if block_given?
end

Public Instance Methods

add_base_columns(columns) click to toggle source
# File lib/tabl/table.rb, line 15
def add_base_columns(columns)
  columns.each do |column|
    @base_columns[column.name] = column
  end
end
base_columns() click to toggle source
# File lib/tabl/table.rb, line 25
def base_columns
  @base_columns.values
end
column(key) click to toggle source
# File lib/tabl/table.rb, line 49
def column(key)
  @columns[key] || @base_columns[key]
end
columns=(keys) click to toggle source
# File lib/tabl/table.rb, line 29
def columns=(keys)
  @keys = keys
  @columns_cache = nil
  @keys.each do |key|
    @columns[key] ||= Column.new(key) unless @base_columns.include?(key)
  end
end
labels() click to toggle source
# File lib/tabl/table.rb, line 37
def labels
  @keys.map { |key| column(key).label }
end
method_missing(name, *args) { |column| ... } click to toggle source
Calls superclass method
# File lib/tabl/table.rb, line 53
def method_missing(name, *args)
  # Check columns first, creating an override if one doesn't exist already.
  column = @columns[name] || (@base_columns.include?(name) && @columns[name] = @base_columns[name].clone)
  if column
    yield column if block_given?
    return column
  end

  # Check formats next
  format = @formats[name]
  return format if format

  # Create a new format object
  format_base = Formats.send(name) || super
  @formats[name] = Format.new(name, self, format_base)
end
to_csv(records) click to toggle source
# File lib/tabl/table.rb, line 70
def to_csv(records)
  FasterCSV.generate do |csv|
    csv << labels
    records.each do |record|
      csv << values(record)
    end
  end
end
value(key, record) click to toggle source
# File lib/tabl/table.rb, line 45
def value(key, record)
  column(key).value(record)
end
values(record) click to toggle source
# File lib/tabl/table.rb, line 41
def values(record)
  @keys.map { |key| value(key, record) }
end