terminal-table 1.3.0 → 1.4.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.
- data/History.rdoc +5 -0
- data/README.rdoc +9 -2
- data/Todo.rdoc +1 -1
- data/examples/examples.rb +5 -1
- data/lib/terminal-table/table.rb +81 -34
- data/lib/terminal-table/version.rb +1 -1
- data/spec/table_spec.rb +29 -3
- data/terminal-table.gemspec +2 -2
- metadata +2 -2
data/History.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -22,11 +22,13 @@ Simple, feature rich ASCII table generator.
|
|
22
22
|
require 'rubygems'
|
23
23
|
require 'terminal-table/import'
|
24
24
|
|
25
|
-
puts table(['a', 'b'], [1, 2], [3, 4])
|
25
|
+
puts table(['a', 'b'], [1, 2], [3, 4], :separator, [4, 6])
|
26
26
|
|
27
27
|
t = table ['a', 'b']
|
28
28
|
t << [1, 2]
|
29
29
|
t << [3, 4]
|
30
|
+
t.add_separator
|
31
|
+
t << [4, 6]
|
30
32
|
puts t
|
31
33
|
|
32
34
|
user_table = table do |t|
|
@@ -39,7 +41,7 @@ Simple, feature rich ASCII table generator.
|
|
39
41
|
|
40
42
|
user_table = table do
|
41
43
|
self.headings = 'First Name', 'Last Name', 'Email'
|
42
|
-
add_row ['TJ', 'Holowaychuk', { :value => 'tj@vision-media.ca', :
|
44
|
+
add_row ['TJ', 'Holowaychuk', { :value => 'tj@vision-media.ca', :alignment => :right }]
|
43
45
|
add_row ['Bob', 'Someone', 'bob@vision-media.ca']
|
44
46
|
add_row ['Joe', 'Whatever', 'joe@vision-media.ca']
|
45
47
|
align_column 1, :center
|
@@ -77,6 +79,9 @@ Simple, feature rich ASCII table generator.
|
|
77
79
|
| 1 | 2 |
|
78
80
|
| 3 | 4 |
|
79
81
|
+---+---+
|
82
|
+
| 4 | 6 |
|
83
|
+
+---+---+
|
84
|
+
|
80
85
|
|
81
86
|
+---+---+
|
82
87
|
| a | b |
|
@@ -84,6 +89,8 @@ Simple, feature rich ASCII table generator.
|
|
84
89
|
| 1 | 2 |
|
85
90
|
| 3 | 4 |
|
86
91
|
+---+---+
|
92
|
+
| 4 | 6 |
|
93
|
+
+---+---+
|
87
94
|
|
88
95
|
+------------+-------------+---------------------+
|
89
96
|
| First Name | Last Name | Email |
|
data/Todo.rdoc
CHANGED
data/examples/examples.rb
CHANGED
@@ -9,6 +9,8 @@ puts
|
|
9
9
|
t = table ['a', 'b']
|
10
10
|
t << [1, 2]
|
11
11
|
t << [3, 4]
|
12
|
+
t << :separator
|
13
|
+
t << [4, 6]
|
12
14
|
puts t
|
13
15
|
|
14
16
|
puts
|
@@ -23,9 +25,11 @@ puts user_table
|
|
23
25
|
puts
|
24
26
|
user_table = table do
|
25
27
|
self.headings = 'First Name', 'Last Name', 'Email'
|
26
|
-
add_row ['TJ', 'Holowaychuk',
|
28
|
+
add_row ['TJ', 'Holowaychuk', 'tj@vision-media.ca']
|
27
29
|
add_row ['Bob', 'Someone', 'bob@vision-media.ca']
|
28
30
|
add_row ['Joe', 'Whatever', 'joe@vision-media.ca']
|
31
|
+
add_separator
|
32
|
+
add_row ['Total', { :value => '3', :colspan => 2, :alignment => :right }]
|
29
33
|
align_column 1, :center
|
30
34
|
end
|
31
35
|
puts user_table
|
data/lib/terminal-table/table.rb
CHANGED
@@ -6,7 +6,7 @@ module Terminal
|
|
6
6
|
# Exceptions
|
7
7
|
#++
|
8
8
|
|
9
|
-
|
9
|
+
Error = Class.new StandardError
|
10
10
|
|
11
11
|
##
|
12
12
|
# Table characters, x axis, y axis, and intersection.
|
@@ -36,44 +36,70 @@ module Terminal
|
|
36
36
|
# Render the table.
|
37
37
|
|
38
38
|
def render
|
39
|
-
buffer =
|
39
|
+
buffer = [separator, "\n"]
|
40
40
|
if has_headings?
|
41
|
-
buffer <<
|
42
|
-
|
43
|
-
if Hash === heading and not heading[:colspan].nil?
|
44
|
-
i.upto(i + heading[:colspan] - 1) do |col|
|
45
|
-
width += length_of_column(col)
|
46
|
-
end
|
47
|
-
width += (heading[:colspan] - 1) * (Y.length + 2)
|
48
|
-
else
|
49
|
-
width = length_of_column i
|
50
|
-
end
|
51
|
-
Heading.new(width, heading).render
|
52
|
-
end.join(Y) + Y
|
53
|
-
buffer << "\n#{seperator}\n"
|
41
|
+
buffer << render_headings
|
42
|
+
buffer << "\n" << separator << "\n"
|
54
43
|
end
|
55
|
-
buffer << rows.map do |row|
|
56
|
-
|
57
|
-
width = 0
|
58
|
-
if Hash === cell and not cell[:colspan].nil?
|
59
|
-
i.upto(i + cell[:colspan] - 1) do |col|
|
60
|
-
width += length_of_column(col)
|
61
|
-
end
|
62
|
-
width += (cell[:colspan] - 1) * (Y.length + 2)
|
63
|
-
else
|
64
|
-
width = length_of_column i
|
65
|
-
end
|
66
|
-
Cell.new(width, cell).render
|
67
|
-
end.join(Y) + Y
|
44
|
+
buffer << @rows.map do |row|
|
45
|
+
render_row(row)
|
68
46
|
end.join("\n")
|
69
|
-
buffer << "\n
|
47
|
+
buffer << "\n" << separator << "\n"
|
48
|
+
buffer.join
|
70
49
|
end
|
71
50
|
alias :to_s :render
|
72
51
|
|
73
52
|
##
|
74
|
-
#
|
53
|
+
# Render headings.
|
54
|
+
|
55
|
+
def render_headings
|
56
|
+
Y + headings.map_with_index do |heading, i|
|
57
|
+
width = 0
|
58
|
+
if heading.is_a?(Hash) and !heading[:colspan].nil?
|
59
|
+
i.upto(i + heading[:colspan] - 1) do |col|
|
60
|
+
width += length_of_column(col)
|
61
|
+
end
|
62
|
+
width += (heading[:colspan] - 1) * (Y.length + 2)
|
63
|
+
else
|
64
|
+
width = length_of_column(i)
|
65
|
+
end
|
66
|
+
Heading.new( width, heading).render
|
67
|
+
end.join(Y) + Y
|
68
|
+
end
|
69
|
+
|
70
|
+
##
|
71
|
+
# Render the given _row_.
|
72
|
+
|
73
|
+
def render_row row
|
74
|
+
if row == :separator
|
75
|
+
separator
|
76
|
+
else
|
77
|
+
Y + row.map_with_index do |cell, i|
|
78
|
+
render_cell(cell, i)
|
79
|
+
end.join(Y) + Y
|
80
|
+
end
|
81
|
+
end
|
75
82
|
|
76
|
-
|
83
|
+
##
|
84
|
+
# Render the given _cell_ at index _i_.
|
85
|
+
|
86
|
+
def render_cell cell, i
|
87
|
+
width = 0
|
88
|
+
if cell.is_a?(Hash) and !cell[:colspan].nil?
|
89
|
+
i.upto(i + cell[:colspan] - 1) do |col|
|
90
|
+
width += length_of_column(col)
|
91
|
+
end
|
92
|
+
width += (cell[:colspan] - 1) * (Y.length + 2)
|
93
|
+
else
|
94
|
+
width = length_of_column(i)
|
95
|
+
end
|
96
|
+
Cell.new(width, cell).render
|
97
|
+
end
|
98
|
+
|
99
|
+
##
|
100
|
+
# Create a separator based on colum lengths.
|
101
|
+
|
102
|
+
def separator
|
77
103
|
I + columns.collect_with_index do |col, i|
|
78
104
|
X * (length_of_column(i) + 2)
|
79
105
|
end.join(I) + I
|
@@ -83,12 +109,19 @@ module Terminal
|
|
83
109
|
# Add a row.
|
84
110
|
|
85
111
|
def add_row row
|
86
|
-
rows << row
|
112
|
+
@rows << row
|
87
113
|
end
|
88
114
|
alias :<< :add_row
|
89
115
|
|
90
116
|
##
|
91
|
-
#
|
117
|
+
# Add a separator.
|
118
|
+
|
119
|
+
def add_separator
|
120
|
+
@rows << :separator
|
121
|
+
end
|
122
|
+
|
123
|
+
##
|
124
|
+
# Weither or not any headings are present, since they are optional.
|
92
125
|
|
93
126
|
def has_headings?
|
94
127
|
not headings.empty?
|
@@ -157,7 +190,21 @@ module Terminal
|
|
157
190
|
def headings_with_rows
|
158
191
|
[headings] + rows
|
159
192
|
end
|
160
|
-
|
193
|
+
|
194
|
+
##
|
195
|
+
# Return rows without separator rows.
|
196
|
+
|
197
|
+
def rows
|
198
|
+
@rows.reject { |row| row == :separator }
|
199
|
+
end
|
200
|
+
|
201
|
+
##
|
202
|
+
# Return rows including separator rows.
|
203
|
+
|
204
|
+
def all_rows
|
205
|
+
@rows
|
206
|
+
end
|
207
|
+
|
161
208
|
##
|
162
209
|
# Check if _other_ is equal to self. _other_ is considered equal
|
163
210
|
# if it contains the same headings and rows.
|
data/spec/table_spec.rb
CHANGED
@@ -56,10 +56,18 @@ module Terminal
|
|
56
56
|
@table.length_of_column(1).should == 18
|
57
57
|
end
|
58
58
|
|
59
|
-
it "should render
|
59
|
+
it "should render separators" do
|
60
60
|
@table.headings = ['Char', 'Num']
|
61
61
|
@table << ['a', 1]
|
62
|
-
@table.
|
62
|
+
@table.separator.should == '+------+-----+'
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should add separator" do
|
66
|
+
@table << ['a', 1]
|
67
|
+
@table.add_separator
|
68
|
+
@table << ['b', 2]
|
69
|
+
@table.rows.size.should == 2
|
70
|
+
@table.all_rows.size.should == 3
|
63
71
|
end
|
64
72
|
|
65
73
|
it "should bitch and complain when you have no rows" do
|
@@ -95,6 +103,24 @@ module Terminal
|
|
95
103
|
EOF
|
96
104
|
end
|
97
105
|
|
106
|
+
it "should render separators" do
|
107
|
+
@table.headings = ['Char', 'Num']
|
108
|
+
@table << ['a', 1]
|
109
|
+
@table << ['b', 2]
|
110
|
+
@table.add_separator
|
111
|
+
@table << ['c', 3]
|
112
|
+
@table.render.should == <<-EOF.deindent
|
113
|
+
+------+-----+
|
114
|
+
| Char | Num |
|
115
|
+
+------+-----+
|
116
|
+
| a | 1 |
|
117
|
+
| b | 2 |
|
118
|
+
+------+-----+
|
119
|
+
| c | 3 |
|
120
|
+
+------+-----+
|
121
|
+
EOF
|
122
|
+
end
|
123
|
+
|
98
124
|
it "should render properly using block syntax" do
|
99
125
|
table = Terminal::Table.new do |t|
|
100
126
|
t << ['a', 1]
|
@@ -214,7 +240,7 @@ module Terminal
|
|
214
240
|
table_one = Table.new
|
215
241
|
table_two = Table.new
|
216
242
|
|
217
|
-
table_one.
|
243
|
+
table_one.add_row "a"
|
218
244
|
|
219
245
|
table_one.should_not == table_two
|
220
246
|
table_two.should_not == table_one
|
data/terminal-table.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{terminal-table}
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.4.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["TJ Holowaychuk"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-12-18}
|
10
10
|
s.description = %q{Simple, feature rich ascii table generation library}
|
11
11
|
s.email = %q{tj@vision-media.ca}
|
12
12
|
s.extra_rdoc_files = ["README.rdoc", "lib/terminal-table.rb", "lib/terminal-table/cell.rb", "lib/terminal-table/core_ext.rb", "lib/terminal-table/heading.rb", "lib/terminal-table/import.rb", "lib/terminal-table/table.rb", "lib/terminal-table/table_helper.rb", "lib/terminal-table/version.rb", "tasks/docs.rake", "tasks/gemspec.rake", "tasks/spec.rake"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: terminal-table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TJ Holowaychuk
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-18 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|