Class: Termtable::Render
- Inherits:
-
Object
- Object
- Termtable::Render
- Defined in:
- lib/termtable/render.rb
Constant Summary collapse
- DEFAULT_PADDING =
1- DEFAULT_ALIGNMENT =
'left'.freeze
Instance Method Summary collapse
- #column_widths(rows) ⇒ Object
- #exec ⇒ Object
-
#initialize(rows, opts) ⇒ Render
constructor
A new instance of Render.
- #set_borders! ⇒ Object
- #set_headers_border! ⇒ Object
- #set_metadata! ⇒ Object
- #total_padding ⇒ Object
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 = 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 |
#exec ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/termtable/render.rb', line 45 def exec 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 @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_padding ⇒ Object
34 35 36 |
# File 'lib/termtable/render.rb', line 34 def total_padding @alignment == 'center' ? @padding * 2 : @padding end |