console_table 0.1.6 → 0.1.7
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/.travis.yml +0 -8
- data/README.md +54 -1
- data/lib/console_table.rb +29 -14
- data/test/test_console_table.rb +459 -198
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d29f00cea80b04a26dc82d97bfa2f6223a37966d
|
4
|
+
data.tar.gz: 66059cc9c33ec69fe028422c3fc707a53fb94f29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17cd329d715430896670cd02dcaf547af1cd93199192cee28d6b85e594b196e9d3152c7d0a24656a5a48dd331fae4ef5e52bb387bc42002e73379fd337afa490
|
7
|
+
data.tar.gz: 6592e9a36084707eec3b715c90ff8118943be9a8c6d9b7ce7112a8503d5d511747e3aff97664164d07ccfe1053e777acc2ac0fd792356d81c8dceaafa702578b
|
data/.travis.yml
CHANGED
@@ -1,11 +1,3 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
3
|
- 1.9.3
|
4
|
-
deploy:
|
5
|
-
provider: rubygems
|
6
|
-
api_key:
|
7
|
-
secure: M1I+7IFuje77sZjtQbmvamzihT+NEJpCzb6Eco8AKbJu/swim+2DvojdJHJw3qpjBt+S2u6zPWWc8KqP6ME7YZzydhJKN/rftUow4lyPbJ6ut9wNg4J9EaZgawG/BOm7LESqtj6J5KWrEd2qRn86mLMHO6ZgLsvsKBWR+oMnb+U=
|
8
|
-
gem: console_table
|
9
|
-
on:
|
10
|
-
tags: true
|
11
|
-
repo: rodhilton/console_table
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# ConsoleTable
|
2
2
|
|
3
|
-
[](https://travis-ci.org/rodhilton/console_table)
|
3
|
+
[](https://rubygems.org/gems/console_table) [](https://travis-ci.org/rodhilton/console_table)
|
4
4
|
|
5
5
|
ConsoleTable is a helper class that allows you to print data to a console in a clean, table-like fashion. It's intended for use
|
6
6
|
in commandline applications with information-dense output. It checks your terminal window size (or COLUMNS environment variable) to ensure
|
@@ -30,6 +30,32 @@ Or install it yourself as:
|
|
30
30
|
|
31
31
|
$ gem install console_table
|
32
32
|
|
33
|
+
## Quick Start
|
34
|
+
|
35
|
+
Here's a short-and-sweet example of using ConsoleTable
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
require 'console_table'
|
39
|
+
|
40
|
+
ConsoleTable.define(["Name", "DOB", "Title"]) do |table|
|
41
|
+
table << ["Rod", "06-15-80", "Software Engineer"]
|
42
|
+
table << ["Julia", "04-25-81", "Piano Teacher"]
|
43
|
+
end
|
44
|
+
```
|
45
|
+
|
46
|
+
This program will output, on a console 80 characters wide:
|
47
|
+
|
48
|
+
```
|
49
|
+
================================================================================
|
50
|
+
Name DOB Title
|
51
|
+
--------------------------------------------------------------------------------
|
52
|
+
Rod 06-15-80 Software Engineer
|
53
|
+
Julia 04-25-81 Piano Teacher
|
54
|
+
================================================================================
|
55
|
+
```
|
56
|
+
|
57
|
+
This usage takes advantage of the fact that ConsoleTable infers a lot of defaults. For more details about how to exercise the real power of ConsoleTable, refer to the next section.
|
58
|
+
|
33
59
|
## Usage
|
34
60
|
|
35
61
|
ConsoleTable needs a lot of information to get going, and it can be somewhat awkward to work with.
|
@@ -371,6 +397,33 @@ Which will yield this, if you're into that sort of thing:
|
|
371
397
|
*======================================================*
|
372
398
|
```
|
373
399
|
|
400
|
+
A lot of times, supplying less information means that ConsoleTable will just guess at various defaults. For example, if you do not provide a key for the table config, ConsoleTable will simply number your keys with names like 'col1', 'col2', etc. If you do not provide a title, it will `capitalize` whatever key you are using for the column, or use something like "Column 1" if you do not supply one. If you do not supply a size, ConsoleTable will just assume you want "*" as the size (remember, you can have many "*"s and the space is divided equally).
|
401
|
+
|
402
|
+
Additionally, you can give ONLY the titles for columns by simply suppling an array of strings as the console config. With this ability, it's possible to define and use ConsoleTable in a remarkably abbreviated manner, where most of the control of the formatting is unexercised.
|
403
|
+
|
404
|
+
```ruby
|
405
|
+
require 'console_table'
|
406
|
+
|
407
|
+
ConsoleTable.define(["Name", "DOB", "Title"]) do |table|
|
408
|
+
table << ["Rod", "06-15-80", "Software Engineer"]
|
409
|
+
table << ["Julia", "04-25-81", "Piano Teacher"]
|
410
|
+
end
|
411
|
+
|
412
|
+
```
|
413
|
+
|
414
|
+
Which yields:
|
415
|
+
```
|
416
|
+
================================================================================
|
417
|
+
Name DOB Title
|
418
|
+
--------------------------------------------------------------------------------
|
419
|
+
Rod 06-15-80 Software Engineer
|
420
|
+
Julia 04-25-81 Piano Teacher
|
421
|
+
================================================================================
|
422
|
+
```
|
423
|
+
|
424
|
+
Which is the original Quick Start example up above.
|
425
|
+
|
426
|
+
For more examples of different ways of using ConsoleTable, refer to the test file in this repository, which has many many different examples of usage.
|
374
427
|
|
375
428
|
## Contributing
|
376
429
|
|
data/lib/console_table.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module ConsoleTable
|
2
|
-
VERSION = "0.1.
|
2
|
+
VERSION = "0.1.7"
|
3
3
|
|
4
4
|
def self.define(layout, options={}, &block)
|
5
5
|
table = ConsoleTableClass.new(layout, options)
|
@@ -19,18 +19,31 @@ module ConsoleTable
|
|
19
19
|
|
20
20
|
def initialize(column_layout, options={})
|
21
21
|
@original_column_layout = []
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
22
|
+
|
23
|
+
if column_layout.is_a? Fixnum
|
24
|
+
column_layout = (1..column_layout).collect{|i| "Column #{i}"}
|
25
|
+
end
|
26
|
+
|
27
|
+
if column_layout.is_a? Array
|
28
|
+
column_layout.each_with_index do |layout, i|
|
29
|
+
if layout.is_a? String
|
30
|
+
@original_column_layout << {:key => "col#{i+1}".to_sym, :title=>layout, :size=>"*"}
|
31
|
+
elsif layout.is_a? Fixnum
|
32
|
+
@original_column_layout << {:key => "col#{i+1}".to_sym, :title=>"Column #{i+1}", :size=>layout}
|
33
|
+
elsif layout.is_a? Float
|
34
|
+
@original_column_layout << {:key => "col#{i+1}".to_sym, :title=>"Column #{i+1}", :size=>layout}
|
35
|
+
elsif layout[:key].nil? and layout[:title].nil?
|
36
|
+
@original_column_layout << layout.merge({:key => "col#{i+1}".to_sym, :title=>"Column #{i+1}"})
|
37
|
+
elsif layout[:title].nil?
|
38
|
+
@original_column_layout << layout.merge({:title => layout[:key].to_s.capitalize})
|
39
|
+
elsif layout[:key].nil?
|
40
|
+
@original_column_layout << layout.merge({:key => "col#{i+1}".to_sym})
|
41
|
+
else
|
42
|
+
@original_column_layout << layout
|
43
|
+
end
|
33
44
|
end
|
45
|
+
else
|
46
|
+
raise("Column layout invalid, must be a num of columns or an array of column definitions")
|
34
47
|
end
|
35
48
|
|
36
49
|
#Mostly used for mocking/testing
|
@@ -41,6 +54,7 @@ module ConsoleTable
|
|
41
54
|
@borders = options[:borders] || false #Lines between every cell, implies outline
|
42
55
|
@left_margin = options[:left_margin] || 0
|
43
56
|
@right_margin = options[:right_margin] || 0
|
57
|
+
@headings = options[:headings].nil? ? true : options[:headings]
|
44
58
|
|
45
59
|
#Set outline, just the upper and lower lines
|
46
60
|
if @borders
|
@@ -169,7 +183,7 @@ module ConsoleTable
|
|
169
183
|
return
|
170
184
|
end
|
171
185
|
|
172
|
-
print_headings unless @headings_printed
|
186
|
+
print_headings unless @headings_printed or not @headings
|
173
187
|
|
174
188
|
if options.is_a? Array #If an array or something is supplied, infer the order from the heading order
|
175
189
|
munged_options = {}
|
@@ -180,7 +194,8 @@ module ConsoleTable
|
|
180
194
|
options = munged_options
|
181
195
|
end
|
182
196
|
|
183
|
-
|
197
|
+
|
198
|
+
print_line if @borders unless not @headings and @count == 0
|
184
199
|
|
185
200
|
@out.print " "*@left_margin
|
186
201
|
if @borders
|
data/test/test_console_table.rb
CHANGED
@@ -11,17 +11,13 @@ class ConsoleTableTest < Minitest::Test
|
|
11
11
|
@mock_out = StringIO.new
|
12
12
|
end
|
13
13
|
|
14
|
-
def teardown
|
15
|
-
# Do nothing
|
16
|
-
end
|
17
|
-
|
18
14
|
def test_basic
|
19
15
|
table_config = [
|
20
|
-
{:key
|
21
|
-
{:key
|
16
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
17
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
22
18
|
]
|
23
19
|
|
24
|
-
ConsoleTable.define(table_config, :width=> 100, :output=>@mock_out) do |table|
|
20
|
+
ConsoleTable.define(table_config, :width => 100, :output=>@mock_out) do |table|
|
25
21
|
table << {
|
26
22
|
:col1 => "Row 1, Column 1",
|
27
23
|
:col2 => "Row 1, Column 2"
|
@@ -48,12 +44,12 @@ Row 2, Column 1 Row 2, Column 1
|
|
48
44
|
|
49
45
|
def test_unicode
|
50
46
|
table_config = [
|
51
|
-
{:key
|
52
|
-
{:key
|
53
|
-
{:key
|
47
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
48
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
49
|
+
{:key => :col3, :size => 20, :title => "Column 3"},
|
54
50
|
]
|
55
51
|
|
56
|
-
ConsoleTable.define(table_config, :width=> 62, :output
|
52
|
+
ConsoleTable.define(table_config, :width => 62, :output => @mock_out) do |table|
|
57
53
|
table << {
|
58
54
|
:col1 => "I ♥ Unicode",
|
59
55
|
:col2 => "I ☂ Unicode",
|
@@ -67,9 +63,9 @@ Row 2, Column 1 Row 2, Column 1
|
|
67
63
|
}
|
68
64
|
|
69
65
|
table << {
|
70
|
-
:col1 => {:text => "I ⁂ Unicode", :justify
|
71
|
-
:col2 => {:text => "I \u2190 Unicode", :justify
|
72
|
-
:col3 => {:text => "I ✓ Unicode", :justify
|
66
|
+
:col1 => {:text => "I ⁂ Unicode", :justify => :right},
|
67
|
+
:col2 => {:text => "I \u2190 Unicode", :justify => :center},
|
68
|
+
:col3 => {:text => "I ✓ Unicode", :justify => :left}
|
73
69
|
}
|
74
70
|
end
|
75
71
|
|
@@ -88,12 +84,12 @@ I ⚂ Unicode Even Mor I ¥ Unicode Even Mor I µ Unicode Even Mor
|
|
88
84
|
|
89
85
|
def test_spacing_convention_sets_justification
|
90
86
|
table_config = [
|
91
|
-
{:key
|
92
|
-
{:key
|
93
|
-
{:key
|
87
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
88
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
89
|
+
{:key => :col3, :size => 20, :title => "Column 3"},
|
94
90
|
]
|
95
91
|
|
96
|
-
ConsoleTable.define(table_config, :width=> 62, :output
|
92
|
+
ConsoleTable.define(table_config, :width => 62, :output => @mock_out) do |table|
|
97
93
|
table << [
|
98
94
|
"\tRight",
|
99
95
|
"\tCenter\t",
|
@@ -114,16 +110,16 @@ Column 1 Column 2 Column 3
|
|
114
110
|
|
115
111
|
def test_newlines_converted_to_spaces_in_middle_stripped_at_ends
|
116
112
|
table_config = [
|
117
|
-
{:key
|
118
|
-
{:key
|
119
|
-
{:key
|
113
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
114
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
115
|
+
{:key => :col3, :size => 20, :title => "Column 3"},
|
120
116
|
]
|
121
117
|
|
122
|
-
ConsoleTable.define(table_config, :width=> 62, :output
|
118
|
+
ConsoleTable.define(table_config, :width => 62, :output => @mock_out) do |table|
|
123
119
|
table << [
|
124
|
-
{:text=>"Bl\nah", :justify
|
125
|
-
{:text=>"\nStuff", :justify
|
126
|
-
{:text=>"Junk\n", :justify
|
120
|
+
{:text => "Bl\nah", :justify => :left},
|
121
|
+
{:text => "\nStuff", :justify => :left},
|
122
|
+
{:text => "Junk\n", :justify => :right}
|
127
123
|
]
|
128
124
|
end
|
129
125
|
|
@@ -140,11 +136,11 @@ Bl ah Stuff Junk
|
|
140
136
|
|
141
137
|
def test_linebreak_inside_colorcode_still_resets
|
142
138
|
table_config = [
|
143
|
-
{:key
|
144
|
-
{:key
|
139
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
140
|
+
{:key => :col2, :size => 5, :title => "Column 2"},
|
145
141
|
]
|
146
142
|
|
147
|
-
ConsoleTable.define(table_config, :width=> 62, :output
|
143
|
+
ConsoleTable.define(table_config, :width => 62, :output => @mock_out) do |table|
|
148
144
|
table << [
|
149
145
|
"Bl\nah".blue,
|
150
146
|
"1234\nStuff".red
|
@@ -159,18 +155,18 @@ Bl ah 1234
|
|
159
155
|
==========================
|
160
156
|
END
|
161
157
|
|
162
|
-
assert_includes @mock_out.string, "\e[0;34;49mBl ah\e[0m"
|
163
|
-
assert_includes @mock_out.string, "\e[0;31;49m1234 \e[0m"
|
158
|
+
assert_includes @mock_out.string, "\e[0;34;49mBl ah\e[0m" #ensure the color got reset
|
159
|
+
assert_includes @mock_out.string, "\e[0;31;49m1234 \e[0m" #ensure the color got reset
|
164
160
|
|
165
161
|
assert_output_equal expected, @mock_out.string
|
166
162
|
end
|
167
163
|
|
168
164
|
def test_spacing_after_colors_is_preserved
|
169
165
|
table_config = [
|
170
|
-
{:key
|
166
|
+
{:key => :col1, :size => 60, :title => "Column 1"},
|
171
167
|
]
|
172
168
|
|
173
|
-
ConsoleTable.define(table_config, :width=> 60, :output
|
169
|
+
ConsoleTable.define(table_config, :width => 60, :output => @mock_out) do |table|
|
174
170
|
table << [
|
175
171
|
"hello - \e[0;34;49mTest\e[0m - this is a test"
|
176
172
|
]
|
@@ -199,19 +195,19 @@ blah and stuff - Test
|
|
199
195
|
|
200
196
|
def test_can_ellipsize_at_column_level
|
201
197
|
table_config = [
|
202
|
-
{:key
|
203
|
-
{:key
|
198
|
+
{:key => :col1, :size => 20, :title => "Column 1", :ellipsize => true},
|
199
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
204
200
|
]
|
205
201
|
|
206
|
-
ConsoleTable.define(table_config, :width=> 62, :output
|
202
|
+
ConsoleTable.define(table_config, :width => 62, :output => @mock_out) do |table|
|
207
203
|
table << [
|
208
204
|
"This is way too long to fit here",
|
209
205
|
"This is way too long to fit here",
|
210
206
|
]
|
211
207
|
|
212
208
|
table << [
|
213
|
-
{text: "This is way too long to fit here", :ellipsize=>false},
|
214
|
-
{text: "This is way too long to fit here", :ellipsize=>true},
|
209
|
+
{text: "This is way too long to fit here", :ellipsize => false},
|
210
|
+
{text: "This is way too long to fit here", :ellipsize => true},
|
215
211
|
]
|
216
212
|
end
|
217
213
|
|
@@ -229,19 +225,19 @@ This is way too long This is way too l...
|
|
229
225
|
|
230
226
|
def test_justify_convention_followed_in_hash_text_but_overrideable
|
231
227
|
table_config = [
|
232
|
-
{:key
|
228
|
+
{:key => :col1, :size => 20, :title => "Column 1", :justify => :center},
|
233
229
|
]
|
234
230
|
|
235
|
-
ConsoleTable.define(table_config, :width=> 62, :output
|
231
|
+
ConsoleTable.define(table_config, :width => 62, :output => @mock_out) do |table|
|
236
232
|
table << ["Short"]
|
237
233
|
table << ["\tShort"]
|
238
234
|
table << ["Short\t"]
|
239
|
-
table << [{:text=>"Short", :justify
|
240
|
-
table << [{:text=>"Short", :justify
|
241
|
-
table << [{:text=>"\tShort"}]
|
242
|
-
table << [{:text=>"Short\t"}]
|
243
|
-
table << [{:text=>"\tShort", :justify
|
244
|
-
table << [{:text=>"Short\t", :justify
|
235
|
+
table << [{:text => "Short", :justify => :right}]
|
236
|
+
table << [{:text => "Short", :justify => :left}]
|
237
|
+
table << [{:text => "\tShort"}]
|
238
|
+
table << [{:text => "Short\t"}]
|
239
|
+
table << [{:text => "\tShort", :justify => :left}] #Override
|
240
|
+
table << [{:text => "Short\t", :justify => :right}] #Override
|
245
241
|
end
|
246
242
|
|
247
243
|
expected=<<-END
|
@@ -265,12 +261,12 @@ Short
|
|
265
261
|
|
266
262
|
def test_should_not_color_tabs_or_ignore_tab_justify_convention_if_inside_color
|
267
263
|
table_config = [
|
268
|
-
{:key
|
269
|
-
{:key
|
270
|
-
{:key
|
264
|
+
{:key => :col1, :size => 20, :title => "Column 1", :justify => :center},
|
265
|
+
{:key => :col2, :size => 20, :title => "Column 2", :justify => :right},
|
266
|
+
{:key => :col3, :size => 20, :title => "Column 3", :justify => :left},
|
271
267
|
]
|
272
268
|
|
273
|
-
ConsoleTable.define(table_config, :width=> 62, :output
|
269
|
+
ConsoleTable.define(table_config, :width => 62, :output => @mock_out) do |table|
|
274
270
|
table << [
|
275
271
|
"\tRight".blue,
|
276
272
|
"\tCenter\t".red,
|
@@ -286,25 +282,25 @@ Short
|
|
286
282
|
==============================================================
|
287
283
|
END
|
288
284
|
|
289
|
-
assert_includes @mock_out.string, " \e[0;34;49mRight\e[0m"
|
290
|
-
assert_includes @mock_out.string, " \e[0;35;49mLeft\e[0m "
|
291
|
-
assert_includes @mock_out.string, " \e[0;31;49mCenter\e[0m"
|
285
|
+
assert_includes @mock_out.string, " \e[0;34;49mRight\e[0m" #space is on outside of coor
|
286
|
+
assert_includes @mock_out.string, " \e[0;35;49mLeft\e[0m " #space is on outside of color
|
287
|
+
assert_includes @mock_out.string, " \e[0;31;49mCenter\e[0m" #this assert fails due to what I'm pretty sure is a bug in gsub(), but it's not the end of the world so I'm not doing a workaround
|
292
288
|
|
293
289
|
assert_output_equal expected, @mock_out.string
|
294
290
|
end
|
295
291
|
|
296
292
|
def test_spaces_preserved_in_middle_but_stripped_at_ends
|
297
293
|
table_config = [
|
298
|
-
{:key
|
299
|
-
{:key
|
300
|
-
{:key
|
294
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
295
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
296
|
+
{:key => :col3, :size => 20, :title => "Column 3"},
|
301
297
|
]
|
302
298
|
|
303
|
-
ConsoleTable.define(table_config, :width=> 62, :output
|
299
|
+
ConsoleTable.define(table_config, :width => 62, :output => @mock_out) do |table|
|
304
300
|
table << [
|
305
|
-
{:text=>"Bl ah", :justify
|
306
|
-
{:text=>" Stuff", :justify
|
307
|
-
{:text=>"Junk ", :justify
|
301
|
+
{:text => "Bl ah", :justify => :left},
|
302
|
+
{:text => " Stuff", :justify => :left},
|
303
|
+
{:text => "Junk ", :justify => :right}
|
308
304
|
]
|
309
305
|
end
|
310
306
|
|
@@ -321,16 +317,16 @@ Bl ah Stuff Junk
|
|
321
317
|
|
322
318
|
def test_ignores_tabbing_convention_if_setting_justification_explicitly
|
323
319
|
table_config = [
|
324
|
-
{:key
|
325
|
-
{:key
|
326
|
-
{:key
|
320
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
321
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
322
|
+
{:key => :col3, :size => 20, :title => "Column 3"},
|
327
323
|
]
|
328
324
|
|
329
|
-
ConsoleTable.define(table_config, :width=> 62, :output
|
325
|
+
ConsoleTable.define(table_config, :width => 62, :output => @mock_out) do |table|
|
330
326
|
table << [
|
331
|
-
{:text=>"\tBlah", :justify
|
332
|
-
{:text=>"\tStuff\t", :justify
|
333
|
-
{:text=>"\tJunk", :justify
|
327
|
+
{:text => "\tBlah", :justify => :left},
|
328
|
+
{:text => "\tStuff\t", :justify => :right},
|
329
|
+
{:text => "\tJunk", :justify => :center}
|
334
330
|
]
|
335
331
|
end
|
336
332
|
|
@@ -347,20 +343,20 @@ Blah Stuff Junk
|
|
347
343
|
|
348
344
|
def test_can_use_convenient_operator
|
349
345
|
table_config = [
|
350
|
-
{:key
|
351
|
-
{:key
|
346
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
347
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
352
348
|
]
|
353
349
|
|
354
|
-
ConsoleTable.define(table_config, :width=>100, :output
|
350
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
355
351
|
table << {
|
356
|
-
|
357
|
-
|
358
|
-
|
352
|
+
:col1 => "Row 1, Column 1",
|
353
|
+
:col2 => "Row 1, Column 2"
|
354
|
+
}
|
359
355
|
|
360
356
|
table << {
|
361
|
-
|
362
|
-
|
363
|
-
|
357
|
+
:col1 => "Row 2, Column 1",
|
358
|
+
:col2 => "Row 2, Column 1"
|
359
|
+
}
|
364
360
|
end
|
365
361
|
|
366
362
|
expected=<<-END
|
@@ -377,19 +373,19 @@ Row 2, Column 1 Row 2, Column 1
|
|
377
373
|
|
378
374
|
def test_can_supply_array_and_order_is_inferred
|
379
375
|
table_config = [
|
380
|
-
{:key
|
381
|
-
{:key
|
376
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
377
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
382
378
|
]
|
383
379
|
|
384
|
-
ConsoleTable.define(table_config, :width=> 100, :output
|
380
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
385
381
|
table << [
|
386
382
|
"Row 1, Column 1",
|
387
383
|
"Row 1, Column 2"
|
388
384
|
]
|
389
385
|
|
390
386
|
table << [
|
391
|
-
{:text=>"Row 2, Column 1", :justify
|
392
|
-
{:text=>"Row 2, Column 2", :justify
|
387
|
+
{:text => "Row 2, Column 1", :justify => :center},
|
388
|
+
{:text => "Row 2, Column 2", :justify => :right}
|
393
389
|
]
|
394
390
|
end
|
395
391
|
|
@@ -407,11 +403,11 @@ Row 1, Column 1 Row 1, Column 2
|
|
407
403
|
|
408
404
|
def test_percents
|
409
405
|
table_config = [
|
410
|
-
{:key
|
411
|
-
{:key
|
406
|
+
{:key => :col1, :size => 0.3, :title => "Column 1"},
|
407
|
+
{:key => :col2, :size => 0.7, :title => "Column 2"},
|
412
408
|
]
|
413
409
|
|
414
|
-
ConsoleTable.define(table_config, :width=> 100, :output
|
410
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
415
411
|
table << {
|
416
412
|
:col1 => "Row 1, Column 1",
|
417
413
|
:col2 => "Row 1, Column 2"
|
@@ -434,11 +430,11 @@ Row 2, Column 1 Row 2, Column 1
|
|
434
430
|
|
435
431
|
def test_star_fills_all_extra_space
|
436
432
|
table_config = [
|
437
|
-
{:key
|
438
|
-
{:key
|
433
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
434
|
+
{:key => :col2, :size => "*", :title => "Column 2"},
|
439
435
|
]
|
440
436
|
|
441
|
-
ConsoleTable.define(table_config, :width=> 100, :output
|
437
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
442
438
|
table << {
|
443
439
|
:col1 => "Row 1, Column 1",
|
444
440
|
:col2 => "Row 1, Column 2"
|
@@ -464,12 +460,12 @@ Row 2, Column 1 Row 2, Column 1
|
|
464
460
|
|
465
461
|
def test_multiple_stars_split_evenly
|
466
462
|
table_config = [
|
467
|
-
{:key
|
468
|
-
{:key
|
469
|
-
{:key
|
463
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
464
|
+
{:key => :col2, :size => "*", :title => "Column 2"},
|
465
|
+
{:key => :col3, :size => "*", :title => "Column 3"},
|
470
466
|
]
|
471
467
|
|
472
|
-
ConsoleTable.define(table_config, :width=> 100, :output
|
468
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
473
469
|
table << {
|
474
470
|
:col1 => "Row 1, Column 1",
|
475
471
|
:col2 => "Row 1, Column 2",
|
@@ -497,11 +493,11 @@ Row 2, Column 1 Row 2, Column 1 Row 2, Column 3
|
|
497
493
|
|
498
494
|
def test_no_size_assumed_to_be_star
|
499
495
|
table_config = [
|
500
|
-
{:key
|
501
|
-
{:key
|
496
|
+
{:key => :col1, :title => "Column 1"},
|
497
|
+
{:key => :col2, :title => "Column 2"},
|
502
498
|
]
|
503
499
|
|
504
|
-
ConsoleTable.define(table_config, :width=> 40, :output
|
500
|
+
ConsoleTable.define(table_config, :width => 40, :output => @mock_out) do |table|
|
505
501
|
table << {
|
506
502
|
:col1 => "Row 1, Column 1",
|
507
503
|
:col2 => "Row 1, Column 2",
|
@@ -522,11 +518,11 @@ Row 1, Column 1 Row 1, Column 2
|
|
522
518
|
|
523
519
|
def test_no_name_defaulted_to_capitalize_of_key_name
|
524
520
|
table_config = [
|
525
|
-
{:key
|
526
|
-
{:key
|
521
|
+
{:key => :col1},
|
522
|
+
{:key => :col2},
|
527
523
|
]
|
528
524
|
|
529
|
-
ConsoleTable.define(table_config, :width=> 40, :output
|
525
|
+
ConsoleTable.define(table_config, :width => 40, :output => @mock_out) do |table|
|
530
526
|
table << {
|
531
527
|
:col1 => "Row 1, Column 1",
|
532
528
|
:col2 => "Row 1, Column 2",
|
@@ -547,16 +543,16 @@ Row 1, Column 1 Row 1, Column 2
|
|
547
543
|
|
548
544
|
def test_can_combine_percentages_fixed_and_stars
|
549
545
|
table_config = [
|
550
|
-
{:key
|
551
|
-
{:key
|
552
|
-
{:key
|
553
|
-
{:key
|
554
|
-
{:key
|
555
|
-
{:key
|
556
|
-
{:key
|
546
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
547
|
+
{:key => :col2, :size => 0.3, :title => "Column 2"},
|
548
|
+
{:key => :col3, :size => 4, :title => "Column 3"},
|
549
|
+
{:key => :col4, :size => "*", :title => "Column 4"},
|
550
|
+
{:key => :col5, :size => 0.2, :title => "Column 5"},
|
551
|
+
{:key => :col6, :size => "*", :title => "Column 6"},
|
552
|
+
{:key => :col7, :size => 10, :title => "Column 7"}
|
557
553
|
]
|
558
554
|
|
559
|
-
ConsoleTable.define(table_config, :width=> 160, :output
|
555
|
+
ConsoleTable.define(table_config, :width => 160, :output => @mock_out) do |table|
|
560
556
|
table << {
|
561
557
|
:col1 => "Row 1, Column 1",
|
562
558
|
:col2 => "Row 1, Column 2",
|
@@ -592,17 +588,17 @@ Row 2, Column 1 Row 2, Column 2 Row Row 2, Column 4
|
|
592
588
|
|
593
589
|
def test_wont_create_layout_too_large_for_screen
|
594
590
|
table_config = [
|
595
|
-
{:key
|
596
|
-
{:key
|
591
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
592
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
597
593
|
]
|
598
594
|
|
599
|
-
assert_raises(RuntimeError) { ConsoleTable.define(table_config, :width=>30) }
|
595
|
+
assert_raises(RuntimeError) { ConsoleTable.define(table_config, :width => 30) }
|
600
596
|
end
|
601
597
|
|
602
598
|
def test_wont_create_layout_with_more_than_100_percent
|
603
599
|
table_config = [
|
604
|
-
{:key
|
605
|
-
{:key
|
600
|
+
{:key => :col1, :size => 0.8, :title => "Column 1"},
|
601
|
+
{:key => :col2, :size => 0.3, :title => "Column 2"},
|
606
602
|
]
|
607
603
|
|
608
604
|
assert_raises(RuntimeError) { ConsoleTable.define(table_config) }
|
@@ -610,8 +606,8 @@ Row 2, Column 1 Row 2, Column 2 Row Row 2, Column 4
|
|
610
606
|
|
611
607
|
def test_wont_create_layout_with_invalid_size
|
612
608
|
table_config = [
|
613
|
-
{:key
|
614
|
-
{:key
|
609
|
+
{:key => :col1, :size => 0.8, :title => "Column 1"},
|
610
|
+
{:key => :col2, :size => "hello!", :title => "Column 2"},
|
615
611
|
]
|
616
612
|
|
617
613
|
assert_raises(RuntimeError) { ConsoleTable.define(table_config) }
|
@@ -619,34 +615,30 @@ Row 2, Column 1 Row 2, Column 2 Row Row 2, Column 4
|
|
619
615
|
|
620
616
|
def test_wont_allow_repeats_of_key_names
|
621
617
|
table_config = [
|
622
|
-
{:key
|
623
|
-
{:key
|
618
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
619
|
+
{:key => :col1, :size => 20, :title => "Column 2"},
|
624
620
|
]
|
625
621
|
|
626
622
|
assert_raises(RuntimeError) { ConsoleTable.define(table_config) }
|
627
623
|
end
|
628
624
|
|
629
|
-
def
|
630
|
-
|
631
|
-
|
632
|
-
{:size=>20, :title=>"Column 2"},
|
633
|
-
]
|
634
|
-
|
635
|
-
assert_raises(RuntimeError) { ConsoleTable.define(table_config) }
|
625
|
+
def test_wont_create_layout_when_column_layout_isnt_num_or_array
|
626
|
+
assert_raises(RuntimeError) { ConsoleTable.define("4", :width => 30) }
|
627
|
+
assert_raises(RuntimeError) { ConsoleTable.define({}, :width => 30) }
|
636
628
|
end
|
637
629
|
|
638
630
|
def test_can_truncate_output
|
639
631
|
table_config = [
|
640
|
-
{:key
|
632
|
+
{:key => :col1, :size => 20, :title => "Column 1"}
|
641
633
|
]
|
642
634
|
|
643
|
-
ConsoleTable.define(table_config, :width=> 100, :output
|
635
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
644
636
|
table << ["This is short"]
|
645
637
|
|
646
|
-
table << {:col1=>"This is way too long and it needs to get cut off"}
|
638
|
+
table << {:col1 => "This is way too long and it needs to get cut off"}
|
647
639
|
|
648
640
|
table << [
|
649
|
-
{:text=>"This is way too long and it needs to get cut off", :ellipsize=>true}
|
641
|
+
{:text => "This is way too long and it needs to get cut off", :ellipsize => true}
|
650
642
|
]
|
651
643
|
|
652
644
|
end
|
@@ -666,28 +658,28 @@ This is way too l...
|
|
666
658
|
|
667
659
|
def test_can_justify_columns_and_override_in_rows
|
668
660
|
table_config = [
|
669
|
-
{:key
|
670
|
-
{:key
|
671
|
-
{:key
|
661
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
662
|
+
{:key => :col2, :size => 20, :title => "Column 2", :justify => :center},
|
663
|
+
{:key => :col3, :size => 20, :title => "Column 3", :justify => :right}
|
672
664
|
]
|
673
665
|
|
674
|
-
ConsoleTable.define(table_config, :width=> 100, :output
|
666
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
675
667
|
table << {
|
676
|
-
|
677
|
-
|
678
|
-
|
668
|
+
:col1 => "Short1",
|
669
|
+
:col2 => "Short2",
|
670
|
+
:col3 => "Short3"
|
679
671
|
}
|
680
672
|
|
681
673
|
table << {
|
682
|
-
|
683
|
-
|
684
|
-
|
674
|
+
:col1 => {text: "Short1"},
|
675
|
+
:col2 => {text: "Short2"},
|
676
|
+
:col3 => {text: "Short3"}
|
685
677
|
}
|
686
678
|
|
687
679
|
table << {
|
688
|
-
:col1 => {text: "Short1", :justify
|
689
|
-
:col2 => {text: "Short2", :justify
|
690
|
-
:col3 => {text: "Short3", :justify
|
680
|
+
:col1 => {text: "Short1", :justify => :center},
|
681
|
+
:col2 => {text: "Short2", :justify => :right},
|
682
|
+
:col3 => {text: "Short3", :justify => :left}
|
691
683
|
}
|
692
684
|
end
|
693
685
|
|
@@ -707,32 +699,32 @@ Short1 Short2 Short3
|
|
707
699
|
def test_huge_example
|
708
700
|
|
709
701
|
table_config = [
|
710
|
-
{:key
|
711
|
-
{:key
|
712
|
-
{:key
|
713
|
-
{:key
|
702
|
+
{:key => :title, :size => 15, :title => "Movie Title"},
|
703
|
+
{:key => :name, :size => 15, :title => "Name"},
|
704
|
+
{:key => :release_date, :size => 8, :title => "Release Date Too Long"},
|
705
|
+
{:key => :tagline, :size => "*", :title => "Motto", :justify => :right},
|
714
706
|
]
|
715
707
|
|
716
|
-
ConsoleTable.define(table_config, :left_margin=>5, :right_margin=>10, :width=>80, :title=>"Movie Killers", :output
|
708
|
+
ConsoleTable.define(table_config, :left_margin => 5, :right_margin => 10, :width => 80, :title => "Movie Killers", :output => @mock_out) do |table|
|
717
709
|
table << {
|
718
|
-
:title=>{:text=>"Friday the 13th"},
|
719
|
-
:name=>{:text=>"Jason's Mom", :justify
|
720
|
-
:release_date=>{text: "05-09-80"},
|
721
|
-
:tagline=>{:text=>"They were warned...They are doomed...And on Friday the 13th, nothing will save them.", :ellipsize=>true}
|
710
|
+
:title => {:text => "Friday the 13th"},
|
711
|
+
:name => {:text => "Jason's Mom", :justify => :left},
|
712
|
+
:release_date => {text: "05-09-80"},
|
713
|
+
:tagline => {:text => "They were warned...They are doomed...And on Friday the 13th, nothing will save them.", :ellipsize => true}
|
722
714
|
}
|
723
715
|
|
724
716
|
table << {
|
725
|
-
:title=>{:text=>"Halloween"},
|
726
|
-
:name=>{:text=>"Michael Meyers", :justify
|
727
|
-
:release_date=>{text: "10-25-80"},
|
728
|
-
:tagline=>{:text=>"Everyone is entitled to one good scare", :ellipsize=>true}
|
717
|
+
:title => {:text => "Halloween"},
|
718
|
+
:name => {:text => "Michael Meyers", :justify => :left},
|
719
|
+
:release_date => {text: "10-25-80"},
|
720
|
+
:tagline => {:text => "Everyone is entitled to one good scare", :ellipsize => true}
|
729
721
|
}
|
730
722
|
|
731
723
|
table << {
|
732
|
-
:title=>{:text=>"Nightmare on Elm St."},
|
733
|
-
:name=>{:text=>"Freddy Krueger", :justify
|
734
|
-
:release_date=>{text: "11-16-84"},
|
735
|
-
:tagline=>{:text=>"A scream that wakes you up, might be your own", :ellipsize=>true}
|
724
|
+
:title => {:text => "Nightmare on Elm St."},
|
725
|
+
:name => {:text => "Freddy Krueger", :justify => :left},
|
726
|
+
:release_date => {text: "11-16-84"},
|
727
|
+
:tagline => {:text => "A scream that wakes you up, might be your own", :ellipsize => true}
|
736
728
|
}
|
737
729
|
|
738
730
|
table << ["Hellraiser", "Pinhead", "9-18-87", "Demon to some. Angel to others."]
|
@@ -763,11 +755,11 @@ Short1 Short2 Short3
|
|
763
755
|
|
764
756
|
def test_printing_a_single_string_does_full_line
|
765
757
|
table_config = [
|
766
|
-
{:key
|
767
|
-
{:key
|
758
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
759
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
768
760
|
]
|
769
761
|
|
770
|
-
ConsoleTable.define(table_config, :width=> 100, :output
|
762
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
771
763
|
table << "This is just a string, it should ignore columns"
|
772
764
|
end
|
773
765
|
|
@@ -782,11 +774,11 @@ This is just a string, it should ignore c
|
|
782
774
|
|
783
775
|
def test_printing_a_single_after_data_makes_headings_show_up
|
784
776
|
table_config = [
|
785
|
-
{:key
|
786
|
-
{:key
|
777
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
778
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
787
779
|
]
|
788
780
|
|
789
|
-
ConsoleTable.define(table_config, :width=> 100, :output
|
781
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
790
782
|
table << ["One", "Two"]
|
791
783
|
table << "This is just a string, it should ignore columns"
|
792
784
|
table << ["One", "Two"]
|
@@ -807,15 +799,15 @@ One Two
|
|
807
799
|
|
808
800
|
def test_can_have_a_bordered_table
|
809
801
|
table_config = [
|
810
|
-
{:key
|
811
|
-
{:key
|
812
|
-
{:key
|
813
|
-
{:key
|
802
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
803
|
+
{:key => :col2, :size => 0.3, :title => "Column 2"},
|
804
|
+
{:key => :col3, :size => 10, :title => "Column 3", :justify => :center},
|
805
|
+
{:key => :col4, :size => "*", :title => "Column 4", :justify => :center}
|
814
806
|
]
|
815
807
|
|
816
|
-
ConsoleTable.define(table_config, :left_margin=>10, :right_margin=>7, :width=> 100, :title=>"Test Title", :borders=>true, :output
|
808
|
+
ConsoleTable.define(table_config, :left_margin => 10, :right_margin => 7, :width => 100, :title => "Test Title", :borders => true, :output => @mock_out) do |table|
|
817
809
|
(1..5).each do |row|
|
818
|
-
table << (1..4).collect{|i| "Row #{row}, Column #{i}".red}
|
810
|
+
table << (1..4).collect { |i| "Row #{row}, Column #{i}".red }
|
819
811
|
end
|
820
812
|
|
821
813
|
table << "Plain line needs borders"
|
@@ -853,16 +845,16 @@ One Two
|
|
853
845
|
|
854
846
|
def test_outline_joins_only_when_no_footer_or_header
|
855
847
|
table_config = [
|
856
|
-
{:key
|
857
|
-
{:key
|
858
|
-
{:key
|
859
|
-
{:key
|
848
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
849
|
+
{:key => :col2, :size => 0.3, :title => "Column 2"},
|
850
|
+
{:key => :col3, :size => 10, :title => "Column 3", :justify => :center},
|
851
|
+
{:key => :col4, :size => "*", :title => "Column 4", :justify => :center}
|
860
852
|
]
|
861
853
|
|
862
854
|
#borders are true, so outline false should be ignored
|
863
|
-
ConsoleTable.define(table_config, :left_margin=>10, :right_margin=>7, :width=> 100, :borders=>true, :outline=>false, :output
|
855
|
+
ConsoleTable.define(table_config, :left_margin => 10, :right_margin => 7, :width => 100, :borders => true, :outline => false, :output => @mock_out) do |table|
|
864
856
|
(1..5).each do |row|
|
865
|
-
table << (1..4).collect{|i| "Row #{row}, Column #{i}"}
|
857
|
+
table << (1..4).collect { |i| "Row #{row}, Column #{i}" }
|
866
858
|
end
|
867
859
|
|
868
860
|
table << "Plain line needs borders"
|
@@ -892,13 +884,13 @@ One Two
|
|
892
884
|
|
893
885
|
def test_can_have_no_outline_if_requested
|
894
886
|
table_config = [
|
895
|
-
{:key
|
896
|
-
{:key
|
887
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
888
|
+
{:key => :col2, :size => 0.3, :title => "Column 2"},
|
897
889
|
]
|
898
890
|
|
899
|
-
ConsoleTable.define(table_config, :width=>60, :outline=>false, :title=>"Still has a title", :output
|
891
|
+
ConsoleTable.define(table_config, :width => 60, :outline => false, :title => "Still has a title", :output => @mock_out) do |table|
|
900
892
|
(1..5).each do |row|
|
901
|
-
table << (1..2).collect{|i| "Row #{row}, Column #{i}"}
|
893
|
+
table << (1..2).collect { |i| "Row #{row}, Column #{i}" }
|
902
894
|
end
|
903
895
|
|
904
896
|
end
|
@@ -919,26 +911,26 @@ Row 5, Column 1 Row 5, Colu
|
|
919
911
|
|
920
912
|
def test_can_use_colors_without_affecting_layout
|
921
913
|
table_config = [
|
922
|
-
{:key
|
923
|
-
{:key
|
924
|
-
{:key
|
914
|
+
{:key => :col1, :size => 10, :title => "Column 1", :justify => :left},
|
915
|
+
{:key => :col2, :size => 10, :title => "Column 2", :justify => :center},
|
916
|
+
{:key => :col3, :size => 10, :title => "Column 3", :justify => :right},
|
925
917
|
]
|
926
918
|
|
927
|
-
ConsoleTable.define(table_config, :width=> 120, :output
|
919
|
+
ConsoleTable.define(table_config, :width => 120, :output => @mock_out) do |table|
|
928
920
|
table << ["Short".blue, "Short".bold, "Short".red.on_blue]
|
929
921
|
|
930
922
|
table << ["Much much longer".blue, "Much much longer".bold, "Much much longer".red.on_blue]
|
931
923
|
|
932
924
|
table << [
|
933
|
-
{:text=>"Much much longer".blue, :ellipsize=>true},
|
934
|
-
{:text=>"Much much longer".underline, :ellipsize=>true},
|
935
|
-
{:text=>"Much much longer".on_magenta, :ellipsize=>true}
|
925
|
+
{:text => "Much much longer".blue, :ellipsize => true},
|
926
|
+
{:text => "Much much longer".underline, :ellipsize => true},
|
927
|
+
{:text => "Much much longer".on_magenta, :ellipsize => true}
|
936
928
|
]
|
937
929
|
|
938
930
|
table << [
|
939
|
-
{:text=>"Much much longer".yellow, :ellipsize=>true},
|
940
|
-
{:text=>"Normal, should reset", :ellipsize=>true},
|
941
|
-
{:text=>"Much much longer".bold, :ellipsize=>true}
|
931
|
+
{:text => "Much much longer".yellow, :ellipsize => true},
|
932
|
+
{:text => "Normal, should reset", :ellipsize => true},
|
933
|
+
{:text => "Much much longer".bold, :ellipsize => true}
|
942
934
|
]
|
943
935
|
end
|
944
936
|
|
@@ -953,23 +945,23 @@ Much mu... Normal,... Much mu...
|
|
953
945
|
================================
|
954
946
|
END
|
955
947
|
|
956
|
-
assert_includes @mock_out.string, "\e[1;39;49mShort\e[0m"
|
957
|
-
assert_includes @mock_out.string, "\e[0;33;49mMuch mu...\e[0m"
|
948
|
+
assert_includes @mock_out.string, "\e[1;39;49mShort\e[0m" #Should have normal color codes
|
949
|
+
assert_includes @mock_out.string, "\e[0;33;49mMuch mu...\e[0m" #the cut-off one should keep the color code for ellipses, then reset
|
958
950
|
|
959
951
|
assert_output_equal expected, @mock_out.string
|
960
952
|
end
|
961
953
|
|
962
954
|
def test_will_generate_default_column_keys_and_titles_and_sizes_if_not_provided
|
963
955
|
table_config = [
|
964
|
-
{:size=>20, :title=>"Column 1"},
|
965
|
-
{:key
|
966
|
-
{:size=>20, :title=>"Column 3"},
|
967
|
-
{:key
|
968
|
-
{:size=>20},
|
956
|
+
{:size => 20, :title => "Column 1"},
|
957
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
958
|
+
{:size => 20, :title => "Column 3"},
|
959
|
+
{:key => :col4, :size => 20},
|
960
|
+
{:size => 20},
|
969
961
|
{}
|
970
962
|
]
|
971
963
|
|
972
|
-
ConsoleTable.define(table_config, :width=> 125, :output
|
964
|
+
ConsoleTable.define(table_config, :width => 125, :output => @mock_out) do |table|
|
973
965
|
table << ["A", "B", "C", "D", "E", "F"]
|
974
966
|
|
975
967
|
end
|
@@ -987,12 +979,12 @@ A B C D
|
|
987
979
|
|
988
980
|
def test_can_use_a_string_instead_of_hash_to_default_everything
|
989
981
|
table_config = [
|
990
|
-
{:size=>20, :title=>"Column 1"},
|
982
|
+
{:size => 20, :title => "Column 1"},
|
991
983
|
"Simple Column",
|
992
|
-
{:size=>20, :title=>"Column 3"},
|
984
|
+
{:size => 20, :title => "Column 3"},
|
993
985
|
]
|
994
986
|
|
995
|
-
ConsoleTable.define(table_config, :width=> 70, :output
|
987
|
+
ConsoleTable.define(table_config, :width => 70, :output => @mock_out) do |table|
|
996
988
|
table << ["A", "B", "C"]
|
997
989
|
end
|
998
990
|
|
@@ -1012,7 +1004,7 @@ A B C
|
|
1012
1004
|
"A Column", "B Column", "C Column"
|
1013
1005
|
]
|
1014
1006
|
|
1015
|
-
ConsoleTable.define(table_config, :width=> 30, :output
|
1007
|
+
ConsoleTable.define(table_config, :width => 30, :output => @mock_out) do |table|
|
1016
1008
|
table << ["A", "B", "C"]
|
1017
1009
|
end
|
1018
1010
|
|
@@ -1027,6 +1019,275 @@ A B C
|
|
1027
1019
|
assert_output_equal expected, @mock_out.string
|
1028
1020
|
end
|
1029
1021
|
|
1022
|
+
def test_can_disable_headings
|
1023
|
+
table_config = [
|
1024
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
1025
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
1026
|
+
]
|
1027
|
+
|
1028
|
+
ConsoleTable.define(table_config, :width => 100, :headings => false, :output => @mock_out) do |table|
|
1029
|
+
table << {
|
1030
|
+
:col1 => "Row 1, Column 1",
|
1031
|
+
:col2 => "Row 1, Column 2"
|
1032
|
+
}
|
1033
|
+
|
1034
|
+
table << {
|
1035
|
+
:col1 => "Row 2, Column 1",
|
1036
|
+
:col2 => "Row 2, Column 1"
|
1037
|
+
}
|
1038
|
+
end
|
1039
|
+
|
1040
|
+
expected=<<-END
|
1041
|
+
=========================================
|
1042
|
+
Row 1, Column 1 Row 1, Column 2
|
1043
|
+
Row 2, Column 1 Row 2, Column 1
|
1044
|
+
=========================================
|
1045
|
+
END
|
1046
|
+
|
1047
|
+
assert_output_equal expected, @mock_out.string
|
1048
|
+
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
def test_can_disable_headings_and_outline
|
1052
|
+
table_config = [
|
1053
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
1054
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
1055
|
+
]
|
1056
|
+
|
1057
|
+
ConsoleTable.define(table_config, :width => 100, :headings => false, :outline=>false, :output => @mock_out) do |table|
|
1058
|
+
table << {
|
1059
|
+
:col1 => "Row 1, Column 1",
|
1060
|
+
:col2 => "Row 1, Column 2"
|
1061
|
+
}
|
1062
|
+
|
1063
|
+
table << {
|
1064
|
+
:col1 => "Row 2, Column 1",
|
1065
|
+
:col2 => "Row 2, Column 1"
|
1066
|
+
}
|
1067
|
+
end
|
1068
|
+
|
1069
|
+
expected=<<-END
|
1070
|
+
Row 1, Column 1 Row 1, Column 2
|
1071
|
+
Row 2, Column 1 Row 2, Column 1
|
1072
|
+
END
|
1073
|
+
|
1074
|
+
assert_output_equal expected, @mock_out.string
|
1075
|
+
|
1076
|
+
end
|
1077
|
+
|
1078
|
+
def test_can_disable_headings_with_borders
|
1079
|
+
table_config = [
|
1080
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
1081
|
+
{:key => :col2, :size => 20, :title => "Column 2"},
|
1082
|
+
]
|
1083
|
+
|
1084
|
+
ConsoleTable.define(table_config, :width => 100, :headings => false, :borders => true, :output => @mock_out) do |table|
|
1085
|
+
table << {
|
1086
|
+
:col1 => "Row 1, Column 1",
|
1087
|
+
:col2 => "Row 1, Column 2"
|
1088
|
+
}
|
1089
|
+
|
1090
|
+
table << {
|
1091
|
+
:col1 => "Row 2, Column 1",
|
1092
|
+
:col2 => "Row 2, Column 1"
|
1093
|
+
}
|
1094
|
+
end
|
1095
|
+
|
1096
|
+
expected=<<-END
|
1097
|
+
*====================*====================*
|
1098
|
+
|Row 1, Column 1 |Row 1, Column 2 |
|
1099
|
+
+--------------------+--------------------+
|
1100
|
+
|Row 2, Column 1 |Row 2, Column 1 |
|
1101
|
+
*====================*====================*
|
1102
|
+
END
|
1103
|
+
|
1104
|
+
assert_output_equal expected, @mock_out.string
|
1105
|
+
end
|
1106
|
+
|
1107
|
+
def test_can_define_a_table_with_just_numbers_for_size
|
1108
|
+
table_config = [
|
1109
|
+
{:key => :col1, :size => 20, :title => "Column 1"},
|
1110
|
+
15,
|
1111
|
+
]
|
1112
|
+
|
1113
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
1114
|
+
table << {
|
1115
|
+
:col1 => "Row 1, Column 1",
|
1116
|
+
:col2 => "Row 1, Column 2"
|
1117
|
+
}
|
1118
|
+
|
1119
|
+
table << {
|
1120
|
+
:col1 => "Row 2, Column 1",
|
1121
|
+
:col2 => "Row 2, Column 1"
|
1122
|
+
}
|
1123
|
+
end
|
1124
|
+
|
1125
|
+
expected=<<-END
|
1126
|
+
====================================
|
1127
|
+
Column 1 Column 2
|
1128
|
+
------------------------------------
|
1129
|
+
Row 1, Column 1 Row 1, Column 2
|
1130
|
+
Row 2, Column 1 Row 2, Column 1
|
1131
|
+
====================================
|
1132
|
+
END
|
1133
|
+
|
1134
|
+
assert_output_equal expected, @mock_out.string
|
1135
|
+
|
1136
|
+
end
|
1137
|
+
|
1138
|
+
def test_can_define_a_mix_and_match_of_floats_and_hashes_and_strings
|
1139
|
+
table_config = [
|
1140
|
+
0.4,
|
1141
|
+
{:key => :a_column, :size => 20, :title => "A Column"},
|
1142
|
+
15,
|
1143
|
+
"Title"
|
1144
|
+
]
|
1145
|
+
|
1146
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
1147
|
+
table << [
|
1148
|
+
"Row 1, Column 1",
|
1149
|
+
"Row 1, Column 2",
|
1150
|
+
"Row 1, Column 3",
|
1151
|
+
"Row 1, Column 4"
|
1152
|
+
]
|
1153
|
+
|
1154
|
+
table << [
|
1155
|
+
"Row 2, Column 1",
|
1156
|
+
"Row 2, Column 2",
|
1157
|
+
"Row 2, Column 3",
|
1158
|
+
"Row 2, Column 4"
|
1159
|
+
]
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
expected=<<-END
|
1163
|
+
===================================================================================================
|
1164
|
+
Column 1 A Column Column 3 Title
|
1165
|
+
---------------------------------------------------------------------------------------------------
|
1166
|
+
Row 1, Column 1 Row 1, Column 2 Row 1, Column 3 Row 1, Column 4
|
1167
|
+
Row 2, Column 1 Row 2, Column 2 Row 2, Column 3 Row 2, Column 4
|
1168
|
+
===================================================================================================
|
1169
|
+
END
|
1170
|
+
|
1171
|
+
assert_output_equal expected, @mock_out.string
|
1172
|
+
|
1173
|
+
end
|
1174
|
+
|
1175
|
+
def test_can_define_a_group_of_equal_size_columns_with_just_the_number_of_columns
|
1176
|
+
ConsoleTable.define(4, :width => 100, :output => @mock_out) do |table|
|
1177
|
+
table << [
|
1178
|
+
"Row 1, Column 1",
|
1179
|
+
"Row 1, Column 2",
|
1180
|
+
"Row 1, Column 3",
|
1181
|
+
"Row 1, Column 4"
|
1182
|
+
]
|
1183
|
+
|
1184
|
+
table << [
|
1185
|
+
"Row 2, Column 1",
|
1186
|
+
"Row 2, Column 2",
|
1187
|
+
"Row 2, Column 3",
|
1188
|
+
"Row 2, Column 4"
|
1189
|
+
]
|
1190
|
+
end
|
1191
|
+
|
1192
|
+
expected=<<-END
|
1193
|
+
===================================================================================================
|
1194
|
+
Column 1 Column 2 Column 3 Column 4
|
1195
|
+
---------------------------------------------------------------------------------------------------
|
1196
|
+
Row 1, Column 1 Row 1, Column 2 Row 1, Column 3 Row 1, Column 4
|
1197
|
+
Row 2, Column 1 Row 2, Column 2 Row 2, Column 3 Row 2, Column 4
|
1198
|
+
===================================================================================================
|
1199
|
+
END
|
1200
|
+
|
1201
|
+
assert_output_equal expected, @mock_out.string
|
1202
|
+
|
1203
|
+
end
|
1204
|
+
|
1205
|
+
def test_can_define_a_table_as_just_array_of_numbers
|
1206
|
+
table_config = [
|
1207
|
+
20,
|
1208
|
+
15,
|
1209
|
+
]
|
1210
|
+
|
1211
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
1212
|
+
table << {
|
1213
|
+
:col1 => "Row 1, Column 1",
|
1214
|
+
:col2 => "Row 1, Column 2"
|
1215
|
+
}
|
1216
|
+
|
1217
|
+
table << {
|
1218
|
+
:col1 => "Row 2, Column 1",
|
1219
|
+
:col2 => "Row 2, Column 1"
|
1220
|
+
}
|
1221
|
+
end
|
1222
|
+
|
1223
|
+
expected=<<-END
|
1224
|
+
====================================
|
1225
|
+
Column 1 Column 2
|
1226
|
+
------------------------------------
|
1227
|
+
Row 1, Column 1 Row 1, Column 2
|
1228
|
+
Row 2, Column 1 Row 2, Column 1
|
1229
|
+
====================================
|
1230
|
+
END
|
1231
|
+
|
1232
|
+
assert_output_equal expected, @mock_out.string
|
1233
|
+
|
1234
|
+
end
|
1235
|
+
|
1236
|
+
def test_can_define_a_table_with_just_numbers_including_floats
|
1237
|
+
table_config = [
|
1238
|
+
0.5,
|
1239
|
+
15,
|
1240
|
+
]
|
1241
|
+
|
1242
|
+
ConsoleTable.define(table_config, :width => 100, :output => @mock_out) do |table|
|
1243
|
+
table << {
|
1244
|
+
:col1 => "Row 1, Column 1",
|
1245
|
+
:col2 => "Row 1, Column 2"
|
1246
|
+
}
|
1247
|
+
|
1248
|
+
table << {
|
1249
|
+
:col1 => "Row 2, Column 1",
|
1250
|
+
:col2 => "Row 2, Column 1"
|
1251
|
+
}
|
1252
|
+
end
|
1253
|
+
|
1254
|
+
expected=<<-END
|
1255
|
+
==========================================================
|
1256
|
+
Column 1 Column 2
|
1257
|
+
----------------------------------------------------------
|
1258
|
+
Row 1, Column 1 Row 1, Column 2
|
1259
|
+
Row 2, Column 1 Row 2, Column 1
|
1260
|
+
==========================================================
|
1261
|
+
END
|
1262
|
+
|
1263
|
+
puts @mock_out.string
|
1264
|
+
|
1265
|
+
assert_output_equal expected, @mock_out.string
|
1266
|
+
|
1267
|
+
end
|
1268
|
+
|
1269
|
+
def test_can_use_console_table_as_glorified_tab_replacement
|
1270
|
+
ConsoleTable.define(2, :width => 40, :headings=>false, :outline=>false, :output => @mock_out) do |table|
|
1271
|
+
table << [
|
1272
|
+
"Row 1, Column 1",
|
1273
|
+
"\tRow 1, Column 2"
|
1274
|
+
]
|
1275
|
+
|
1276
|
+
table << [
|
1277
|
+
"Row 2, Column 1",
|
1278
|
+
"\tRow 2, Column 2"
|
1279
|
+
]
|
1280
|
+
end
|
1281
|
+
|
1282
|
+
expected=<<-END
|
1283
|
+
Row 1, Column 1 Row 1, Column 2
|
1284
|
+
Row 2, Column 1 Row 2, Column 2
|
1285
|
+
END
|
1286
|
+
|
1287
|
+
assert_output_equal expected, @mock_out.string
|
1288
|
+
|
1289
|
+
end
|
1290
|
+
|
1030
1291
|
private
|
1031
1292
|
def assert_output_equal(expected, actual)
|
1032
1293
|
expected_lines = expected.split("\n")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: console_table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rod Hilton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|