53 lines
1.0 KiB
Ruby
53 lines
1.0 KiB
Ruby
module Terminal
|
|
class Table
|
|
class Row
|
|
|
|
##
|
|
# Row cells
|
|
|
|
attr_reader :cells
|
|
|
|
attr_reader :table
|
|
|
|
##
|
|
# Initialize with _width_ and _options_.
|
|
|
|
def initialize table, array = []
|
|
@cell_index = 0
|
|
@table = table
|
|
@cells = []
|
|
array.each { |item| self << item }
|
|
end
|
|
|
|
def add_cell item
|
|
options = item.is_a?(Hash) ? item : {:value => item}
|
|
cell = Cell.new(options.merge(:index => @cell_index, :table => @table))
|
|
@cell_index += cell.colspan
|
|
@cells << cell
|
|
end
|
|
alias << add_cell
|
|
|
|
def [] index
|
|
cells[index]
|
|
end
|
|
|
|
def height
|
|
cells.map { |c| c.lines.count }.max || 0
|
|
end
|
|
|
|
def render
|
|
y = @table.style.border_y
|
|
(0...height).to_a.map do |line|
|
|
y + cells.map do |cell|
|
|
cell.render(line)
|
|
end.join(y) + y
|
|
end.join("\n")
|
|
end
|
|
|
|
def number_of_columns
|
|
@cells.collect(&:colspan).inject(0, &:+)
|
|
end
|
|
end
|
|
end
|
|
end
|