def print_table(array, options={})
return if array.empty?
formats, indent, colwidth = [], options[:indent].to_i, options[:colwidth]
options[:truncate] = terminal_width if options[:truncate] == true
formats << "%-#{colwidth + 2}s" if colwidth
start = colwidth ? 1 : 0
colcount = array.max{|a,b| a.size <=> b.size }.size
maximas = []
start.upto(colcount - 1) do |index|
maxima = array.map {|row| row[index] ? row[index].to_s.size : 0 }.max
maximas << maxima
if index == colcount - 1
formats << "%-s"
else
formats << "%-#{maxima + 2}s"
end
end
formats[0] = formats[0].insert(0, " " * indent)
formats << "%s"
array.each do |row|
sentence = ""
row.each_with_index do |column, index|
maxima = maximas[index]
if column.is_a?(Numeric)
if index == row.size - 1
f = "%#{maxima}s"
else
f = "%#{maxima}s "
end
else
f = formats[index]
end
sentence << f % column.to_s
end
sentence = truncate(sentence, options[:truncate]) if options[:truncate]
stdout.puts sentence
end
end