Class: Termtable::Render

Inherits:
Object
  • Object
show all
Defined in:
lib/termtable/render.rb

Constant Summary collapse

DEFAULT_PADDING =
1
DEFAULT_ALIGNMENT =
'left'.freeze

Instance Method Summary collapse

Constructor Details

#initialize(rows, opts) ⇒ Render

Returns a new instance of Render.



6
7
8
9
10
11
12
# File 'lib/termtable/render.rb', line 6

def initialize(rows, opts)
  @rows           = rows
  @padding        = opts.delete(:padding) || DEFAULT_PADDING
  @alignment      = opts.delete(:alignment) || DEFAULT_ALIGNMENT
  @border_options = opts.delete(:border)
  @column_lengths = column_widths(rows)
end

Instance Method Details

#column_widths(rows) ⇒ Object



38
39
40
41
42
43
# File 'lib/termtable/render.rb', line 38

def column_widths(rows)
  column_values = rows.map { |r| r.cells.map(&:value) }.transpose
  column_values.map do |col|
    col.max_by(&:length).size + total_padding
  end
end

#execObject



45
46
47
48
49
50
51
# File 'lib/termtable/render.rb', line 45

def exec
  set_metadata!
  set_borders!
  set_headers_border!

  @rows.map(&:render).join("\n")
end

#set_borders!Object



25
26
27
28
# File 'lib/termtable/render.rb', line 25

def set_borders!
  @rows.unshift(Termtable::Border.new(columns: @column_lengths))
  @rows.push(Termtable::Border.new(columns: @column_lengths))
end

#set_headers_border!Object



30
31
32
# File 'lib/termtable/render.rb', line 30

def set_headers_border!
  @rows.insert(2, Termtable::Border.new(columns: @column_lengths)) if @rows[1].is_a?(Termtable::Header)
end

#set_metadata!Object



14
15
16
17
18
19
20
21
22
23
# File 'lib/termtable/render.rb', line 14

def set_metadata!
  @rows.each do |row|
    row.cells.each_with_index do |cell, idx|
      cell.max_column_size = @column_lengths[idx]
      cell.padding         = @padding
      cell.alignment       = @alignment
      cell.total_padding   = total_padding
    end
  end
end

#total_paddingObject



34
35
36
# File 'lib/termtable/render.rb', line 34

def total_padding
  @alignment == 'center' ? @padding * 2 : @padding
end