blob: a54900828f4dad3936778a1608e90424f030f4db (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
module Terminal
class Table
class Row
##
# Row cells
attr_reader :cells
attr_reader :table
##
# Initialize with _width_ and _options_.
def initialize table, array = [], **_kwargs
@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
vleft, vcenter, vright = @table.style.vertical
(0...height).to_a.map do |line|
vleft + cells.map do |cell|
cell.render(line)
end.join(vcenter) + vright
end.join("\n")
end
def number_of_columns
@cells.collect(&:colspan).inject(0, &:+)
end
# used to find indices where we have table '+' crossings.
# in cases where the colspan > 1, then we will skip over some numbers
# if colspan is always 1, then the list should be incrementing by 1.
#
# skip 0 entry, because it's the left side.
# skip last entry, because it's the right side.
# we only care about "+/T" style crossings.
def crossings
idx = 0
@cells[0...-1].map { |c| idx += c.colspan }
end
end
end
end
|