module TablePrint::RowRecursion
def add_child(child)
def add_child(child) @children << child child.parent = self end
def add_children(children)
def add_children(children) @children.concat children children.each { |c| c.parent = self } self end
def add_formatter(name, formatter)
def add_formatter(name, formatter) return unless column_for(name) column_for(name).add_formatter(formatter) end
def child_count
def child_count @children.length end
def column_count
def column_count return parent.column_count if parent @columns.size end
def column_for(name)
def column_for(name) return parent.column_for(name) if parent column = @columns[name.to_s] ||= Column.new(:name => name) # assign the data sets to the column before we return it # do this as late as possible, since new rows could be added at any time column.data ||= raw_column_data(column.name) column end
def columns
def columns return parent.columns if parent raw_column_names.collect{|k, v| column_for(k)} end
def header
def header padded_names = columns.collect do |column| f = FixedWidthFormatter.new(column.width) f.format(column.name) end header_string = padded_names.join(" #{TablePrint::Config.separator} ") header_string.upcase! if TablePrint::Config.capitalize_headers header_string end
def horizontal_separator
def horizontal_separator columns.collect do |column| '-' * column.width end.join("-#{TablePrint::Config.separator}-") end
def initialize
def initialize @children = [] @columns = {} end
def insert_children(i, children)
def insert_children(i, children) @children.insert(i, children).flatten! children.each {|c| c.parent = self } self end
def set_column(column)
def set_column(column) return parent.set_column(column) if parent @columns[column.name.to_s] = column end
def width
def width return parent.width if parent columns.collect(&:width).inject(&:+) + (columns.length - 1) * 3 # add (n-1)*3 for the 3-character separator end