tty-table 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +24 -0
 - data/README.md +458 -142
 - data/lib/tty-table.rb +6 -6
 - data/lib/tty/table.rb +34 -34
 - data/lib/tty/table/alignment_set.rb +73 -0
 - data/lib/tty/table/border.rb +54 -36
 - data/lib/tty/table/border/null.rb +4 -4
 - data/lib/tty/table/{columns.rb → column_constraint.rb} +30 -32
 - data/lib/tty/table/column_set.rb +18 -17
 - data/lib/tty/table/field.rb +50 -25
 - data/lib/tty/table/header.rb +6 -2
 - data/lib/tty/table/indentation.rb +7 -12
 - data/lib/tty/table/operation/alignment.rb +59 -0
 - data/lib/tty/table/operation/escape.rb +1 -1
 - data/lib/tty/table/operation/filter.rb +1 -1
 - data/lib/tty/table/operation/padding.rb +12 -61
 - data/lib/tty/table/operation/truncation.rb +2 -2
 - data/lib/tty/table/operation/wrapped.rb +2 -5
 - data/lib/tty/table/operations.rb +35 -17
 - data/lib/tty/table/orientation/vertical.rb +4 -4
 - data/lib/tty/table/renderer.rb +1 -7
 - data/lib/tty/table/renderer/basic.rb +69 -63
 - data/lib/tty/table/version.rb +1 -1
 - data/spec/spec_helper.rb +3 -4
 - data/spec/unit/access_spec.rb +8 -8
 - data/spec/unit/{operation/alignment_set → alignment_set}/each_spec.rb +1 -1
 - data/spec/unit/{operation/alignment_set → alignment_set}/new_spec.rb +4 -4
 - data/spec/unit/{operation/alignment_set → alignment_set}/to_ary_spec.rb +1 -1
 - data/spec/unit/alignment_spec.rb +71 -0
 - data/spec/unit/border/ascii/rendering_spec.rb +12 -12
 - data/spec/unit/border/new_spec.rb +2 -2
 - data/spec/unit/border/null/rendering_spec.rb +2 -2
 - data/spec/unit/border/unicode/rendering_spec.rb +10 -10
 - data/spec/unit/{columns → column_constraint}/enforce_spec.rb +15 -12
 - data/spec/unit/{columns → column_constraint}/widths_spec.rb +6 -6
 - data/spec/unit/column_set/extract_widths_spec.rb +39 -6
 - data/spec/unit/data_spec.rb +4 -6
 - data/spec/unit/each_spec.rb +8 -23
 - data/spec/unit/each_with_index_spec.rb +27 -33
 - data/spec/unit/field/length_spec.rb +23 -9
 - data/spec/unit/field/width_spec.rb +1 -1
 - data/spec/unit/filter_spec.rb +7 -8
 - data/spec/unit/header/new_spec.rb +6 -15
 - data/spec/unit/indentation/indent_spec.rb +21 -0
 - data/spec/unit/new_spec.rb +73 -0
 - data/spec/unit/operation/{alignment_set → alignment}/call_spec.rb +1 -1
 - data/spec/unit/operation/escape/call_spec.rb +2 -3
 - data/spec/unit/operation/filter/call_spec.rb +2 -3
 - data/spec/unit/operation/truncation/call_spec.rb +6 -8
 - data/spec/unit/operation/wrapped/call_spec.rb +15 -8
 - data/spec/unit/operations/new_spec.rb +1 -1
 - data/spec/unit/orientation_spec.rb +6 -6
 - data/spec/unit/padding_spec.rb +29 -32
 - data/spec/unit/properties_spec.rb +4 -4
 - data/spec/unit/render_repeat_spec.rb +42 -0
 - data/spec/unit/render_spec.rb +1 -1
 - data/spec/unit/render_with_spec.rb +3 -3
 - data/spec/unit/renderer/ascii/coloring_spec.rb +70 -0
 - data/spec/unit/renderer/ascii/multiline_spec.rb +101 -0
 - data/spec/unit/renderer/ascii/padding_spec.rb +37 -10
 - data/spec/unit/renderer/ascii/render_spec.rb +4 -4
 - data/spec/unit/renderer/ascii/resizing_spec.rb +22 -22
 - data/spec/unit/renderer/ascii/separator_spec.rb +1 -1
 - data/spec/unit/renderer/basic/alignment_spec.rb +20 -20
 - data/spec/unit/renderer/basic/coloring_spec.rb +43 -28
 - data/spec/unit/renderer/basic/filter_spec.rb +3 -3
 - data/spec/unit/renderer/basic/multiline_spec.rb +74 -0
 - data/spec/unit/renderer/basic/options_spec.rb +9 -9
 - data/spec/unit/renderer/basic/padding_spec.rb +26 -2
 - data/spec/unit/renderer/basic/render_spec.rb +4 -4
 - data/spec/unit/renderer/basic/resizing_spec.rb +18 -18
 - data/spec/unit/renderer/basic/separator_spec.rb +1 -1
 - data/spec/unit/renderer/basic/truncation_spec.rb +6 -6
 - data/spec/unit/renderer/basic/wrapping_spec.rb +3 -3
 - data/spec/unit/renderer/border_spec.rb +4 -4
 - data/spec/unit/renderer/unicode/coloring_spec.rb +70 -0
 - data/spec/unit/renderer/unicode/indentation_spec.rb +1 -1
 - data/spec/unit/renderer/unicode/padding_spec.rb +26 -26
 - data/spec/unit/renderer/unicode/render_spec.rb +4 -4
 - data/spec/unit/renderer/unicode/separator_spec.rb +1 -1
 - data/spec/unit/to_s_spec.rb +4 -11
 - data/spec/unit/utf_spec.rb +33 -0
 - data/tty-table.gemspec +2 -1
 - metadata +52 -32
 - data/lib/tty/table/operation/alignment_set.rb +0 -103
 - data/lib/tty/table/padder.rb +0 -180
 - data/lib/tty/table/renderer/color.rb +0 -12
 - data/spec/unit/indentation/insert_indent_spec.rb +0 -27
 - data/spec/unit/initialize_spec.rb +0 -88
 - data/spec/unit/padder/parse_spec.rb +0 -45
 - data/spec/unit/padder/to_s_spec.rb +0 -14
 - data/spec/unit/renderer/basic/multiline_content_spec.rb +0 -135
 - data/spec/unit/renderer/style_spec.rb +0 -72
 
    
        data/lib/tty/table/version.rb
    CHANGED
    
    
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        data/spec/unit/access_spec.rb
    CHANGED
    
    | 
         @@ -17,11 +17,11 @@ RSpec.describe TTY::Table, 'access' do 
     | 
|
| 
       17 
17 
     | 
    
         
             
              context 'when array like access' do
         
     | 
| 
       18 
18 
     | 
    
         
             
                it { expect(table[0,0]).to eq('a1') }
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                it { expect(table[0]).to eq( 
     | 
| 
      
 20 
     | 
    
         
            +
                it { expect(table[0]).to eq(['a1','a2']) }
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                it { expect(table[5]).to eq(nil) }
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                it { expect(table[-1]).to eq( 
     | 
| 
      
 24 
     | 
    
         
            +
                it { expect(table[-1]).to eq(['b1','b2']) }
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                it { expect(table[5,5]).to eq(nil) }
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
         @@ -46,9 +46,9 @@ RSpec.describe TTY::Table, 'access' do 
     | 
|
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                it 'yields row at index' do
         
     | 
| 
       48 
48 
     | 
    
         
             
                  yields = []
         
     | 
| 
       49 
     | 
    
         
            -
                  expect { 
     | 
| 
       50 
     | 
    
         
            -
                     
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
      
 49 
     | 
    
         
            +
                  expect {
         
     | 
| 
      
 50 
     | 
    
         
            +
                    table.row(1).each { |el| yields << el }
         
     | 
| 
      
 51 
     | 
    
         
            +
                  }.to change { yields }.from( [] ).to( rows[1] )
         
     | 
| 
       52 
52 
     | 
    
         
             
                end
         
     | 
| 
       53 
53 
     | 
    
         
             
              end
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
         @@ -78,9 +78,9 @@ RSpec.describe TTY::Table, 'access' do 
     | 
|
| 
       78 
78 
     | 
    
         | 
| 
       79 
79 
     | 
    
         
             
                it 'yields column at index' do
         
     | 
| 
       80 
80 
     | 
    
         
             
                  yields = []
         
     | 
| 
       81 
     | 
    
         
            -
                  expect { 
     | 
| 
       82 
     | 
    
         
            -
                     
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
      
 81 
     | 
    
         
            +
                  expect {
         
     | 
| 
      
 82 
     | 
    
         
            +
                    table.column(1).each { |el| yields << el }
         
     | 
| 
      
 83 
     | 
    
         
            +
                  }.to change { yields }.from( [] ).to( ['a2', 'b2'])
         
     | 
| 
       84 
84 
     | 
    
         
             
                end
         
     | 
| 
       85 
85 
     | 
    
         
             
              end
         
     | 
| 
       86 
86 
     | 
    
         
             
            end
         
     | 
| 
         @@ -2,10 +2,10 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            RSpec.describe TTY::Table:: 
     | 
| 
      
 5 
     | 
    
         
            +
            RSpec.describe TTY::Table::AlignmentSet, '#new' do
         
     | 
| 
       6 
6 
     | 
    
         
             
              let(:object) { described_class }
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              subject { object.new(argument) }
         
     | 
| 
      
 8 
     | 
    
         
            +
              subject(:alignment_set) { object.new(argument) }
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              context 'with no argument' do
         
     | 
| 
       11 
11 
     | 
    
         
             
                let(:argument) { [] }
         
     | 
| 
         @@ -14,7 +14,7 @@ RSpec.describe TTY::Table::Operation::AlignmentSet, '#new' do 
     | 
|
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                it { is_expected.to be_instance_of(object) }
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
                it { expect( 
     | 
| 
      
 17 
     | 
    
         
            +
                it { expect(alignment_set.to_a).to eq([]) }
         
     | 
| 
       18 
18 
     | 
    
         
             
              end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
              context 'with argument' do
         
     | 
| 
         @@ -22,6 +22,6 @@ RSpec.describe TTY::Table::Operation::AlignmentSet, '#new' do 
     | 
|
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                it { is_expected.to be_instance_of(object) }
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                it { expect( 
     | 
| 
      
 25 
     | 
    
         
            +
                it { expect(alignment_set.to_a).to eq(argument) }
         
     | 
| 
       26 
26 
     | 
    
         
             
              end
         
     | 
| 
       27 
27 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,71 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # coding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            RSpec.describe TTY::Table, 'alignment' do
         
     | 
| 
      
 6 
     | 
    
         
            +
              it "aligns table columns when rendering" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                table = TTY::Table.new ['header1', 'header2'], [['a1','a2'],['b1','b2']]
         
     | 
| 
      
 8 
     | 
    
         
            +
                expect(table.render(alignments: [:right, :center])).to eql([
         
     | 
| 
      
 9 
     | 
    
         
            +
                  "header1 header2",
         
     | 
| 
      
 10 
     | 
    
         
            +
                  "     a1   a2   ",
         
     | 
| 
      
 11 
     | 
    
         
            +
                  "     b1   b2   "
         
     | 
| 
      
 12 
     | 
    
         
            +
                ].join("\n"))
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              it "uses default alignment when too few alignments provided" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                table = TTY::Table.new ['header1', 'header2'], [['a1','a2'],['b1','b2']]
         
     | 
| 
      
 17 
     | 
    
         
            +
                expect(table.render(alignments: [:right])).to eql([
         
     | 
| 
      
 18 
     | 
    
         
            +
                  "header1 header2",
         
     | 
| 
      
 19 
     | 
    
         
            +
                  "     a1 a2     ",
         
     | 
| 
      
 20 
     | 
    
         
            +
                  "     b1 b2     "
         
     | 
| 
      
 21 
     | 
    
         
            +
                ].join("\n"))
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              it "aligns table columns without header when rendering" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                table = TTY::Table.new [['aaaaa1','a2'],['b1','bbbbb2']]
         
     | 
| 
      
 26 
     | 
    
         
            +
                expect(table.render(alignments: [:right, :center])).to eql([
         
     | 
| 
      
 27 
     | 
    
         
            +
                  "aaaaa1   a2  ",
         
     | 
| 
      
 28 
     | 
    
         
            +
                  "    b1 bbbbb2"
         
     | 
| 
      
 29 
     | 
    
         
            +
                ].join("\n"))
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              it "aligns individual fields when rendering" do
         
     | 
| 
      
 33 
     | 
    
         
            +
                table = TTY::Table.new header: ['header1', 'header2']
         
     | 
| 
      
 34 
     | 
    
         
            +
                table << ['a1', {value: 'a2', alignment: :center}]
         
     | 
| 
      
 35 
     | 
    
         
            +
                table << [{value: 'b1', alignment: :right}, 'b2']
         
     | 
| 
      
 36 
     | 
    
         
            +
                expect(table.render).to eql([
         
     | 
| 
      
 37 
     | 
    
         
            +
                  "header1 header2",
         
     | 
| 
      
 38 
     | 
    
         
            +
                  "a1        a2   ",
         
     | 
| 
      
 39 
     | 
    
         
            +
                  "     b1 b2     "
         
     | 
| 
      
 40 
     | 
    
         
            +
                ].join("\n"))
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              it "prioritizes individual field options over table rendering options" do
         
     | 
| 
      
 44 
     | 
    
         
            +
                table = TTY::Table.new header: ['header1', 'header2']
         
     | 
| 
      
 45 
     | 
    
         
            +
                table << [{value: 'a1', alignment: :center},'a2']
         
     | 
| 
      
 46 
     | 
    
         
            +
                table << ['b1','b2']
         
     | 
| 
      
 47 
     | 
    
         
            +
                expect(table.render(alignments: [:right, :center])).to eql([
         
     | 
| 
      
 48 
     | 
    
         
            +
                  "header1 header2",
         
     | 
| 
      
 49 
     | 
    
         
            +
                  "  a1      a2   ",
         
     | 
| 
      
 50 
     | 
    
         
            +
                  "     b1   b2   "
         
     | 
| 
      
 51 
     | 
    
         
            +
                ].join("\n"))
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              it "allows to align all columns at once" do
         
     | 
| 
      
 55 
     | 
    
         
            +
                table = TTY::Table.new ['header1', 'header2'], [['a1','a2'],['b1','b2']]
         
     | 
| 
      
 56 
     | 
    
         
            +
                expect(table.render(alignment: [:center])).to eql([
         
     | 
| 
      
 57 
     | 
    
         
            +
                  "header1 header2",
         
     | 
| 
      
 58 
     | 
    
         
            +
                  "  a1      a2   ",
         
     | 
| 
      
 59 
     | 
    
         
            +
                  "  b1      b2   "
         
     | 
| 
      
 60 
     | 
    
         
            +
                ].join("\n"))
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              xit "aligns specific column" do
         
     | 
| 
      
 64 
     | 
    
         
            +
                table = TTY::Table.new ['header1', 'header2'], [['a1','a2'],['b1','b2']]
         
     | 
| 
      
 65 
     | 
    
         
            +
                expect(table.render(column_alignment: [1, :center])).to eql([
         
     | 
| 
      
 66 
     | 
    
         
            +
                  "header1 header2",
         
     | 
| 
      
 67 
     | 
    
         
            +
                  "a1        a2   ",
         
     | 
| 
      
 68 
     | 
    
         
            +
                  "b1        b2   "
         
     | 
| 
      
 69 
     | 
    
         
            +
                ].join("\n"))
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -4,26 +4,26 @@ require 'spec_helper' 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            RSpec.describe TTY::Table::Border::ASCII, '#rendering' do
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
              subject { described_class.new(column_widths) }
         
     | 
| 
      
 7 
     | 
    
         
            +
              subject(:border) { described_class.new(column_widths, [0,0,0,0]) }
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
              context 'with empty row' do
         
     | 
| 
       10 
10 
     | 
    
         
             
                let(:row) { TTY::Table::Row.new([]) }
         
     | 
| 
       11 
11 
     | 
    
         
             
                let(:column_widths) { [] }
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                it 'draws top line' do
         
     | 
| 
       14 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 14 
     | 
    
         
            +
                  expect(border.top_line).to eq("++")
         
     | 
| 
       15 
15 
     | 
    
         
             
                end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                it 'draws middle line' do
         
     | 
| 
       18 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 18 
     | 
    
         
            +
                  expect(border.separator).to eq("++")
         
     | 
| 
       19 
19 
     | 
    
         
             
                end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                it 'draw bottom line' do
         
     | 
| 
       22 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 22 
     | 
    
         
            +
                  expect(border.bottom_line).to eq("++")
         
     | 
| 
       23 
23 
     | 
    
         
             
                end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                it 'draws row line' do
         
     | 
| 
       26 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 26 
     | 
    
         
            +
                  expect(border.row_line(row)).to eq("||")
         
     | 
| 
       27 
27 
     | 
    
         
             
                end
         
     | 
| 
       28 
28 
     | 
    
         
             
              end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
         @@ -32,19 +32,19 @@ RSpec.describe TTY::Table::Border::ASCII, '#rendering' do 
     | 
|
| 
       32 
32 
     | 
    
         
             
                let(:row) { TTY::Table::Row.new(['a1', 'a2', 'a3']) }
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                it 'draws top line' do
         
     | 
| 
       35 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 35 
     | 
    
         
            +
                  expect(border.top_line).to eq("+--+--+--+")
         
     | 
| 
       36 
36 
     | 
    
         
             
                end
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                it 'draw middle line' do
         
     | 
| 
       39 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 39 
     | 
    
         
            +
                  expect(border.separator).to eq("+--+--+--+")
         
     | 
| 
       40 
40 
     | 
    
         
             
                end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                it 'draw bottom line' do
         
     | 
| 
       43 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 43 
     | 
    
         
            +
                  expect(border.bottom_line).to eq("+--+--+--+")
         
     | 
| 
       44 
44 
     | 
    
         
             
                end
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
                it 'draws row line' do
         
     | 
| 
       47 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 47 
     | 
    
         
            +
                  expect(border.row_line(row)).to eq("|a1|a2|a3|")
         
     | 
| 
       48 
48 
     | 
    
         
             
                end
         
     | 
| 
       49 
49 
     | 
    
         
             
              end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
         @@ -55,7 +55,7 @@ RSpec.describe TTY::Table::Border::ASCII, '#rendering' do 
     | 
|
| 
       55 
55 
     | 
    
         
             
                  let(:row) { TTY::Table::Row.new(["a1\nb1\nc1", 'a2', 'a3']) }
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         
             
                  it 'draws row line' do
         
     | 
| 
       58 
     | 
    
         
            -
                    expect( 
     | 
| 
      
 58 
     | 
    
         
            +
                    expect(border.row_line(row)).to eq unindent(<<-EOS)
         
     | 
| 
       59 
59 
     | 
    
         
             
                      |a1|a2|a3|
         
     | 
| 
       60 
60 
     | 
    
         
             
                      |b1|  |  |
         
     | 
| 
       61 
61 
     | 
    
         
             
                      |c1|  |  |
         
     | 
| 
         @@ -67,7 +67,7 @@ RSpec.describe TTY::Table::Border::ASCII, '#rendering' do 
     | 
|
| 
       67 
67 
     | 
    
         
             
                  let(:row) { TTY::Table::Row.new(["a1\n\n", "\na2\n", "\n\na3"]) }
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
       69 
69 
     | 
    
         
             
                  it 'draws row line' do
         
     | 
| 
       70 
     | 
    
         
            -
                    expect( 
     | 
| 
      
 70 
     | 
    
         
            +
                    expect(border.row_line(row)).to eq unindent(<<-EOS)
         
     | 
| 
       71 
71 
     | 
    
         
             
                      |a1|  |  |
         
     | 
| 
       72 
72 
     | 
    
         
             
                      |  |a2|  |
         
     | 
| 
       73 
73 
     | 
    
         
             
                      |  |  |a3|
         
     | 
| 
         @@ -79,7 +79,7 @@ RSpec.describe TTY::Table::Border::ASCII, '#rendering' do 
     | 
|
| 
       79 
79 
     | 
    
         
             
                  let(:row) { TTY::Table::Row.new(["\na1\n", "\na2\n", "\na3\n"]) }
         
     | 
| 
       80 
80 
     | 
    
         | 
| 
       81 
81 
     | 
    
         
             
                  it 'draws row line' do
         
     | 
| 
       82 
     | 
    
         
            -
                    expect( 
     | 
| 
      
 82 
     | 
    
         
            +
                    expect(border.row_line(row)).to eq unindent(<<-EOS)
         
     | 
| 
       83 
83 
     | 
    
         
             
                      |  |  |  |
         
     | 
| 
       84 
84 
     | 
    
         
             
                      |a1|a2|a3|
         
     | 
| 
       85 
85 
     | 
    
         
             
                      |  |  |  |
         
     | 
| 
         @@ -5,7 +5,7 @@ require 'spec_helper' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            RSpec.describe TTY::Table::Border, '#new' do
         
     | 
| 
       6 
6 
     | 
    
         
             
              let(:row) { [] }
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              subject(:instance) { klass.new row }
         
     | 
| 
      
 8 
     | 
    
         
            +
              subject(:instance) { klass.new row, [0,0,0,0] }
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              context 'when abstract' do
         
     | 
| 
       11 
11 
     | 
    
         
             
                let(:klass) { described_class }
         
     | 
| 
         @@ -16,7 +16,7 @@ RSpec.describe TTY::Table::Border, '#new' do 
     | 
|
| 
       16 
16 
     | 
    
         
             
              context 'when concrete' do
         
     | 
| 
       17 
17 
     | 
    
         
             
                let(:klass) {
         
     | 
| 
       18 
18 
     | 
    
         
             
                  Class.new do
         
     | 
| 
       19 
     | 
    
         
            -
                    def initialize(row); end
         
     | 
| 
      
 19 
     | 
    
         
            +
                    def initialize(row, padding); end
         
     | 
| 
       20 
20 
     | 
    
         
             
                  end
         
     | 
| 
       21 
21 
     | 
    
         
             
                }
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
         @@ -5,7 +5,7 @@ require 'spec_helper' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            RSpec.describe TTY::Table::Border::Null, '#rendering' do
         
     | 
| 
       6 
6 
     | 
    
         
             
              let(:border) { nil }
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              subject { described_class.new column_widths, border }
         
     | 
| 
      
 8 
     | 
    
         
            +
              subject { described_class.new column_widths, [0,0,0,0], border }
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              context 'with empty row' do
         
     | 
| 
       11 
11 
     | 
    
         
             
                let(:row) { TTY::Table::Row.new([]) }
         
     | 
| 
         @@ -56,7 +56,7 @@ RSpec.describe TTY::Table::Border::Null, '#rendering' do 
     | 
|
| 
       56 
56 
     | 
    
         
             
                  let(:row) { TTY::Table::Row.new(["a1\nb1\nc1", 'a2', 'a3']) }
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
                  it 'draws row line' do
         
     | 
| 
       59 
     | 
    
         
            -
                    expect(subject.row_line(row)).to eq <<-EOS 
     | 
| 
      
 59 
     | 
    
         
            +
                    expect(subject.row_line(row)).to eq unindent(<<-EOS)
         
     | 
| 
       60 
60 
     | 
    
         
             
                      a1 a2 a3
         
     | 
| 
       61 
61 
     | 
    
         
             
                      b1      
         
     | 
| 
       62 
62 
     | 
    
         
             
                      c1      
         
     | 
| 
         @@ -4,26 +4,26 @@ require 'spec_helper' 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            RSpec.describe TTY::Table::Border::Unicode, '#rendering' do
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
              subject { described_class.new(column_widths) }
         
     | 
| 
      
 7 
     | 
    
         
            +
              subject(:border) { described_class.new(column_widths, [0,0,0,0]) }
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
              context 'with empty row' do
         
     | 
| 
       10 
10 
     | 
    
         
             
                let(:row) { TTY::Table::Row.new([]) }
         
     | 
| 
       11 
11 
     | 
    
         
             
                let(:column_widths) { [] }
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                it 'draws top line' do
         
     | 
| 
       14 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 14 
     | 
    
         
            +
                  expect(border.top_line).to eq("┌┐")
         
     | 
| 
       15 
15 
     | 
    
         
             
                end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                it 'draws middle line' do
         
     | 
| 
       18 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 18 
     | 
    
         
            +
                  expect(border.separator).to eq("├┤")
         
     | 
| 
       19 
19 
     | 
    
         
             
                end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                it 'draw bottom line' do
         
     | 
| 
       22 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 22 
     | 
    
         
            +
                  expect(border.bottom_line).to eq("└┘")
         
     | 
| 
       23 
23 
     | 
    
         
             
                end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                it 'draws row line' do
         
     | 
| 
       26 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 26 
     | 
    
         
            +
                  expect(border.row_line(row)).to eq("││")
         
     | 
| 
       27 
27 
     | 
    
         
             
                end
         
     | 
| 
       28 
28 
     | 
    
         
             
              end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
         @@ -32,19 +32,19 @@ RSpec.describe TTY::Table::Border::Unicode, '#rendering' do 
     | 
|
| 
       32 
32 
     | 
    
         
             
                let(:column_widths) { [2,2,2] }
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                it 'draws top line' do
         
     | 
| 
       35 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 35 
     | 
    
         
            +
                  expect(border.top_line).to eq("┌──┬──┬──┐")
         
     | 
| 
       36 
36 
     | 
    
         
             
                end
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                it 'draw middle line' do
         
     | 
| 
       39 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 39 
     | 
    
         
            +
                  expect(border.separator).to eq("├──┼──┼──┤")
         
     | 
| 
       40 
40 
     | 
    
         
             
                end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                it 'draw bottom line' do
         
     | 
| 
       43 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 43 
     | 
    
         
            +
                  expect(border.bottom_line).to eq("└──┴──┴──┘")
         
     | 
| 
       44 
44 
     | 
    
         
             
                end
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
                it 'draws row line' do
         
     | 
| 
       47 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 47 
     | 
    
         
            +
                  expect(border.row_line(row)).to eq("│a1│a2│a3│")
         
     | 
| 
       48 
48 
     | 
    
         
             
                end
         
     | 
| 
       49 
49 
     | 
    
         
             
              end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
         @@ -53,7 +53,7 @@ RSpec.describe TTY::Table::Border::Unicode, '#rendering' do 
     | 
|
| 
       53 
53 
     | 
    
         
             
                let(:column_widths) { [2,2,2] }
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
       55 
55 
     | 
    
         
             
                it 'draws row line' do
         
     | 
| 
       56 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 56 
     | 
    
         
            +
                  expect(border.row_line(row)).to eq unindent(<<-EOS)
         
     | 
| 
       57 
57 
     | 
    
         
             
                    │a1│a2│a3│
         
     | 
| 
       58 
58 
     | 
    
         
             
                    │b1│  │  │
         
     | 
| 
       59 
59 
     | 
    
         
             
                    │c1│  │  │
         
     | 
| 
         @@ -2,20 +2,21 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            RSpec.describe TTY::Table:: 
     | 
| 
      
 5 
     | 
    
         
            +
            RSpec.describe TTY::Table::ColumnConstraint, '#enforce' do
         
     | 
| 
       6 
6 
     | 
    
         
             
              let(:header) { ['h1', 'h2', 'h3', 'h4'] }
         
     | 
| 
       7 
7 
     | 
    
         
             
              let(:rows)   { [['a1', 'a2', 'a3', 'a4'], ['b1', 'b2', 'b3', 'b4']] }
         
     | 
| 
       8 
8 
     | 
    
         
             
              let(:table)  { TTY::Table.new(header, rows) }
         
     | 
| 
       9 
     | 
    
         
            -
              let(:object) { described_class.new(renderer) }
         
     | 
| 
       10 
9 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
              subject {  
     | 
| 
      
 10 
     | 
    
         
            +
              subject(:columns) { described_class.new(table, renderer) }
         
     | 
| 
       12 
11 
     | 
    
         | 
| 
       13 
12 
     | 
    
         
             
              context 'with width contraint' do
         
     | 
| 
       14 
13 
     | 
    
         
             
                let(:renderer) { TTY::Table::Renderer::Basic.new(table, options) }
         
     | 
| 
       15 
14 
     | 
    
         
             
                let(:options) { { width: 5 }}
         
     | 
| 
       16 
15 
     | 
    
         | 
| 
       17 
16 
     | 
    
         
             
                it 'raises error when table width is too small' do
         
     | 
| 
       18 
     | 
    
         
            -
                  expect { 
     | 
| 
      
 17 
     | 
    
         
            +
                  expect {
         
     | 
| 
      
 18 
     | 
    
         
            +
                    columns.enforce
         
     | 
| 
      
 19 
     | 
    
         
            +
                  }.to raise_error(TTY::Table::ResizeError)
         
     | 
| 
       19 
20 
     | 
    
         
             
                end
         
     | 
| 
       20 
21 
     | 
    
         
             
              end
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
         @@ -24,8 +25,9 @@ RSpec.describe TTY::Table::Columns, '#enforce' do 
     | 
|
| 
       24 
25 
     | 
    
         
             
                let(:options) { { width: 11, resize: true }}
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
       26 
27 
     | 
    
         
             
                it 'raises error when table width is too small' do
         
     | 
| 
       27 
     | 
    
         
            -
                   
     | 
| 
       28 
     | 
    
         
            -
                   
     | 
| 
      
 28 
     | 
    
         
            +
                  allow(columns).to receive(:expand)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  columns.enforce
         
     | 
| 
      
 30 
     | 
    
         
            +
                  expect(columns).to have_received(:expand)
         
     | 
| 
       29 
31 
     | 
    
         
             
                end
         
     | 
| 
       30 
32 
     | 
    
         
             
              end
         
     | 
| 
       31 
33 
     | 
    
         | 
| 
         @@ -36,8 +38,9 @@ RSpec.describe TTY::Table::Columns, '#enforce' do 
     | 
|
| 
       36 
38 
     | 
    
         
             
                  let(:options) { { width: 8, resize: true } }
         
     | 
| 
       37 
39 
     | 
    
         | 
| 
       38 
40 
     | 
    
         
             
                  it 'calls shrink' do
         
     | 
| 
       39 
     | 
    
         
            -
                     
     | 
| 
       40 
     | 
    
         
            -
                     
     | 
| 
      
 41 
     | 
    
         
            +
                    allow(columns).to receive(:shrink)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    columns.enforce
         
     | 
| 
      
 43 
     | 
    
         
            +
                    expect(columns).to have_received(:shrink)
         
     | 
| 
       41 
44 
     | 
    
         
             
                  end
         
     | 
| 
       42 
45 
     | 
    
         
             
                end
         
     | 
| 
       43 
46 
     | 
    
         | 
| 
         @@ -47,10 +50,10 @@ RSpec.describe TTY::Table::Columns, '#enforce' do 
     | 
|
| 
       47 
50 
     | 
    
         
             
                  it 'changes table orientation to vertical' do
         
     | 
| 
       48 
51 
     | 
    
         
             
                    allow(Kernel).to receive(:warn)
         
     | 
| 
       49 
52 
     | 
    
         
             
                    expect(renderer.column_widths).to eql([2,2,2,2])
         
     | 
| 
       50 
     | 
    
         
            -
                    expect( 
     | 
| 
       51 
     | 
    
         
            -
                     
     | 
| 
       52 
     | 
    
         
            -
                    expect( 
     | 
| 
       53 
     | 
    
         
            -
                    expect( 
     | 
| 
      
 53 
     | 
    
         
            +
                    expect(table.orientation.name).to eql(:horizontal)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    column_widths = columns.enforce
         
     | 
| 
      
 55 
     | 
    
         
            +
                    expect(column_widths).to eq([2,2])
         
     | 
| 
      
 56 
     | 
    
         
            +
                    expect(table.orientation.name).to eql(:vertical)
         
     | 
| 
       54 
57 
     | 
    
         
             
                  end
         
     | 
| 
       55 
58 
     | 
    
         
             
                end
         
     | 
| 
       56 
59 
     | 
    
         
             
              end
         
     | 
| 
         @@ -2,22 +2,22 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            RSpec.describe TTY::Table:: 
     | 
| 
      
 5 
     | 
    
         
            +
            RSpec.describe TTY::Table::ColumnConstraint, 'column widths' do
         
     | 
| 
       6 
6 
     | 
    
         
             
              let(:header) { ['h1', 'h2', 'h3', 'h4'] }
         
     | 
| 
       7 
7 
     | 
    
         
             
              let(:rows)   { [['a1', 'a2', 'a3', 'a4'], ['b1', 'b2', 'b3', 'b4']] }
         
     | 
| 
       8 
8 
     | 
    
         
             
              let(:table)  { TTY::Table.new(header, rows) }
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
              subject { described_class.new(renderer) }
         
     | 
| 
      
 10 
     | 
    
         
            +
              subject(:columns) { described_class.new(table, renderer) }
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
              context 'with basic renderer' do
         
     | 
| 
       13 
13 
     | 
    
         
             
                let(:renderer) { TTY::Table::Renderer::Basic.new(table) }
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                it 'calculates columns natural width' do
         
     | 
| 
       16 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 16 
     | 
    
         
            +
                  expect(columns.natural_width).to eq(11)
         
     | 
| 
       17 
17 
     | 
    
         
             
                end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                it 'calculates miminimum columns width' do
         
     | 
| 
       20 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 20 
     | 
    
         
            +
                  expect(columns.minimum_width).to eq(7)
         
     | 
| 
       21 
21 
     | 
    
         
             
                end
         
     | 
| 
       22 
22 
     | 
    
         
             
              end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
         @@ -25,11 +25,11 @@ RSpec.describe TTY::Table::Columns, 'column widths' do 
     | 
|
| 
       25 
25 
     | 
    
         
             
                let(:renderer) { TTY::Table::Renderer::ASCII.new(table) }
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                it 'calculates columns natural width' do
         
     | 
| 
       28 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 28 
     | 
    
         
            +
                  expect(columns.natural_width).to eq(13)
         
     | 
| 
       29 
29 
     | 
    
         
             
                end
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
31 
     | 
    
         
             
                it 'calculates miminimum columns width' do
         
     | 
| 
       32 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 32 
     | 
    
         
            +
                  expect(columns.minimum_width).to eq(9)
         
     | 
| 
       33 
33 
     | 
    
         
             
                end
         
     | 
| 
       34 
34 
     | 
    
         
             
              end
         
     | 
| 
       35 
35 
     | 
    
         
             
            end
         
     |