columnize 0.2 → 0.2.1
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/ChangeLog +30 -11
- data/NEWS +8 -2
- data/VERSION +1 -1
- data/lib/columnize.rb +60 -39
- data/test/test-columnize.rb +25 -23
- metadata +34 -41
data/ChangeLog
CHANGED
@@ -1,22 +1,38 @@
|
|
1
|
-
|
1
|
+
2009-01-01 03:55 rockyb
|
2
2
|
|
3
|
-
*
|
3
|
+
* ChangeLog: Get ready for release 0.2
|
4
4
|
|
5
|
-
|
5
|
+
2009-01-01 03:52 rockyb
|
6
6
|
|
7
|
-
*
|
7
|
+
* ChangeLog, NEWS, VERSION, lib/columnize.rb,
|
8
|
+
test/test-columnize.rb: Get ready for release 0.2
|
9
|
+
|
10
|
+
2008-03-16 21:14 rockyb
|
11
|
+
|
12
|
+
* lib/columnize.rb: *** empty log message ***
|
13
|
+
|
14
|
+
2008-03-16 21:13 rockyb
|
15
|
+
|
16
|
+
* lib/columnize.rb: Simplify __FILE__ == $0. (rdebug now changes $0
|
17
|
+
and rcov has an option)
|
18
|
+
|
19
|
+
2008-02-11 19:25 rockyb
|
20
|
+
|
21
|
+
* lib/columnize.rb: Remove 1.9's shadow warning
|
8
22
|
|
9
23
|
2007-12-09 17:33 rockyb
|
10
24
|
|
11
|
-
* : Fix up doc a little. Make the default rake task
|
25
|
+
* README, Rakefile: Fix up doc a little. Make the default rake task
|
26
|
+
"test".
|
12
27
|
|
13
28
|
2007-12-09 16:49 rockyb
|
14
29
|
|
15
|
-
* : Doc fix.
|
30
|
+
* lib/columnize.rb: Doc fix.
|
16
31
|
|
17
32
|
2007-12-09 16:47 rockyb
|
18
33
|
|
19
|
-
*
|
34
|
+
* ChangeLog, lib/columnize.rb, test/test-columnize.rb:
|
35
|
+
columnize.rb: Allow one to specify a separator string. Remove
|
20
36
|
restriction that
|
21
37
|
all entries in the array have to be a string.
|
22
38
|
test-columnize.rb: more tests - invalid list, empty list, with
|
@@ -25,15 +41,18 @@
|
|
25
41
|
|
26
42
|
2007-12-09 14:51 rockyb
|
27
43
|
|
28
|
-
* : Typo.
|
44
|
+
* test/test-columnize.rb: Typo.
|
29
45
|
|
30
46
|
2007-12-09 14:48 rockyb
|
31
47
|
|
32
|
-
*
|
48
|
+
* ., NEWS, README, lib/columnize.rb, test/test-columnize.rb:
|
49
|
+
Property changes for Id lines and to make test-columnize.rb
|
33
50
|
executable.
|
34
51
|
|
35
52
|
2007-12-09 14:40 rockyb
|
36
53
|
|
37
|
-
*
|
38
|
-
|
54
|
+
* ., AUTHORS, COPYING, ChangeLog, NEWS, README, Rakefile, VERSION,
|
55
|
+
lib, lib/columnize.rb, test, test/test-columnize.rb: Initial
|
56
|
+
release of Columnize, a module to print an Array in column-sorted
|
57
|
+
order.
|
39
58
|
|
data/NEWS
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
-
0.1
|
1
|
+
0.2.1
|
2
|
+
12-31-08
|
3
|
+
Add ability to run columns horizontally
|
4
|
+
|
5
|
+
0.2
|
6
|
+
- Minor - get rid of hacky $0 test
|
2
7
|
|
8
|
+
0.1
|
3
9
|
- Initial release of Columnize, a module to print an Array in
|
4
10
|
column-sorted order
|
5
11
|
|
6
|
-
$Id: NEWS
|
12
|
+
$Id: NEWS 155 2009-01-01 04:15:10Z rockyb $
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2
|
1
|
+
0.2.1
|
data/lib/columnize.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: columnize.rb
|
1
|
+
# $Id: columnize.rb 150 2009-01-01 03:52:54Z rockyb $
|
2
2
|
#
|
3
3
|
# Copyright (C) 2007, 2008 Rocky Bernstein <rockyb@rubyforge.net>
|
4
4
|
#
|
@@ -22,43 +22,62 @@
|
|
22
22
|
#
|
23
23
|
# Display a list of strings as a compact set of columns.
|
24
24
|
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
25
|
+
# For example, for a line width of 4 characters (arranged vertically):
|
26
|
+
# ['1', '2,', '3', '4'] => '1 3\n2 4\n'
|
27
|
+
#
|
28
|
+
# or arranged horizontally:
|
29
|
+
# ['1', '2,', '3', '4'] => '1 2\n3 4\n'
|
30
|
+
#
|
31
|
+
# Each column is only as wide as necessary. By default, columns are
|
32
|
+
# separated by two spaces (one was not legible enough).
|
33
|
+
|
34
|
+
|
35
|
+
# Adapted from
|
36
|
+
# the routine of the same name in cmd.py
|
28
37
|
|
29
38
|
module Columnize
|
30
39
|
|
31
|
-
# Return a string with embedded newlines (\n) arranging +list+ in
|
40
|
+
# Return a string with embedded newlines (\n) arranging +list+ in
|
32
41
|
# column-order so that each line is no larger than +displaywidth+.
|
33
42
|
# If +list+ is not an array, the empty string, '', is returned.
|
34
|
-
# +colsep+ contains the string to use to separate entries.
|
35
|
-
|
43
|
+
# +colsep+ contains the string to use to separate entries. Normally,
|
44
|
+
# consecutive items go down from the top to bottom from the
|
45
|
+
# left-most column to the right-most. If +arrange_vertical+ is set
|
46
|
+
# false, consecutive items will go across, left to right, top to
|
47
|
+
# bottom.
|
48
|
+
def columnize(list, displaywidth=80, colsep = ' ', arrange_vertical=true)
|
36
49
|
if not list.is_a?(Array)
|
37
50
|
return ''
|
38
51
|
end
|
39
52
|
if list.size == 0
|
40
53
|
return "<empty>\n"
|
41
54
|
end
|
42
|
-
l = list.map{|
|
55
|
+
l = list.map{|li| li.to_s}
|
43
56
|
if 1 == l.size
|
44
57
|
return "#{l[0]}\n"
|
45
58
|
end
|
46
59
|
# Consider arranging list in 1 rows total, then 2 rows...
|
47
60
|
# Stop when at the smallest number of rows which
|
48
61
|
# can be arranged less than the display width.
|
49
|
-
nrows = ncols =
|
62
|
+
nrows = 0; ncols = l.size
|
63
|
+
|
64
|
+
if arrange_vertical
|
65
|
+
array_index = lambda {|nrows, row, col| nrows*col + row }
|
66
|
+
else
|
67
|
+
array_index = lambda {|nrows, row, col| nrows*row + col }
|
68
|
+
end
|
69
|
+
|
50
70
|
colwidths = []
|
51
71
|
1.upto(l.size) do
|
52
72
|
colwidths = []
|
53
73
|
nrows += 1
|
54
|
-
|
55
|
-
ncols = (l.size + nrows-1) / nrows
|
56
74
|
totwidth = -colsep.length
|
75
|
+
col = 0
|
57
76
|
0.upto(ncols-1) do |col|
|
58
77
|
# get max column width for this column
|
59
78
|
colwidth = 0
|
60
79
|
0.upto(nrows-1) do |row|
|
61
|
-
i =
|
80
|
+
i = array_index.call(nrows, row, col)
|
62
81
|
if i >= l.size
|
63
82
|
break
|
64
83
|
end
|
@@ -67,6 +86,7 @@ module Columnize
|
|
67
86
|
colwidths << colwidth
|
68
87
|
totwidth += colwidth + colsep.length
|
69
88
|
if totwidth > displaywidth
|
89
|
+
ncols = col
|
70
90
|
break
|
71
91
|
end
|
72
92
|
end
|
@@ -82,27 +102,34 @@ module Columnize
|
|
82
102
|
0.upto(nrows-1) do |row|
|
83
103
|
texts = []
|
84
104
|
0.upto(ncols-1) do |col|
|
85
|
-
i = row
|
105
|
+
i = array_index.call(nrows, row, col)
|
86
106
|
if i >= l.size
|
87
|
-
|
107
|
+
if arrange_vertical:
|
108
|
+
x = ""
|
109
|
+
else
|
110
|
+
break
|
111
|
+
end
|
88
112
|
else
|
89
113
|
x = l[i]
|
90
|
-
|
91
|
-
|
114
|
+
end
|
115
|
+
texts << x
|
92
116
|
end
|
93
117
|
while texts and texts[-1] == ''
|
94
|
-
|
118
|
+
texts = texts[0..-2]
|
95
119
|
end
|
96
|
-
|
97
|
-
texts
|
120
|
+
if texts.size > 0
|
121
|
+
0.upto(texts.size-1) do |col|
|
122
|
+
texts[col] = texts[col].ljust(colwidths[col]) if
|
123
|
+
colwidths[col]
|
124
|
+
end
|
125
|
+
s += "%s\n" % texts.join(colsep)
|
98
126
|
end
|
99
|
-
s += "%s\n" % texts.join(colsep)
|
100
127
|
end
|
101
128
|
return s
|
102
129
|
end
|
103
130
|
module_function :columnize
|
104
131
|
end
|
105
|
-
if __FILE__ == $0
|
132
|
+
if __FILE__ == $0
|
106
133
|
#
|
107
134
|
puts Columnize::columnize(5)
|
108
135
|
include Columnize
|
@@ -110,22 +137,16 @@ if __FILE__ == $0
|
|
110
137
|
puts columnize(["a", 2, "c"], 10, ', ')
|
111
138
|
puts columnize(["oneitem"])
|
112
139
|
puts columnize(["one", "two", "three"])
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
"34e", "35o", "36ree",
|
126
|
-
"37e", "38o", "39ree",
|
127
|
-
"40e", "41o", "42ree",
|
128
|
-
"43e", "44o", "45ree",
|
129
|
-
"46e", "47o", "48ree",
|
130
|
-
"one", "two", "three"])
|
140
|
+
data = ["one", "two", "three",
|
141
|
+
"for", "five", "six",
|
142
|
+
"seven", "eight", "nine",
|
143
|
+
"ten", "eleven", "twelve",
|
144
|
+
"thirteen", "fourteen", "fifteen",
|
145
|
+
"sixteen", "seventeen", "eightteen",
|
146
|
+
"nineteen", "twenty", "twentyone",
|
147
|
+
"twentytwo", "twentythree", "twentyfour",
|
148
|
+
"twentyfive","twentysix", "twentyseven"]
|
149
|
+
|
150
|
+
puts columnize(data)
|
151
|
+
puts columnize(data, 80, ' ', false)
|
131
152
|
end
|
data/test/test-columnize.rb
CHANGED
@@ -14,32 +14,34 @@ class TestColumnize < Test::Unit::TestCase
|
|
14
14
|
assert_equal("1, 2, 3\n",
|
15
15
|
Columnize::columnize([1, 2, 3], 10, ', '))
|
16
16
|
assert_equal("", columnize(5))
|
17
|
+
assert_equal("1 3\n2 4\n",
|
18
|
+
columnize(['1', '2', '3', '4'], 4))
|
19
|
+
assert_equal("1 2\n3 4\n",
|
20
|
+
columnize(['1', '2', '3', '4'], 4, ' ', false))
|
17
21
|
assert_equal("<empty>\n", columnize([]))
|
18
22
|
assert_equal("oneitem\n", columnize(["oneitem"]))
|
23
|
+
data = ["one", "two", "three",
|
24
|
+
"for", "five", "six",
|
25
|
+
"seven", "eight", "nine",
|
26
|
+
"ten", "eleven", "twelve",
|
27
|
+
"thirteen", "fourteen", "fifteen",
|
28
|
+
"sixteen", "seventeen", "eightteen",
|
29
|
+
"nineteen", "twenty", "twentyone",
|
30
|
+
"twentytwo", "twentythree", "twentyfour",
|
31
|
+
"twentyfive","twentysix", "twentyseven"]
|
32
|
+
|
33
|
+
assert_equal(
|
34
|
+
"one two three for five six \n" +
|
35
|
+
"seven eight nine ten eleven twelve \n" +
|
36
|
+
"thirteen fourteen fifteen sixteen seventeen eightteen \n" +
|
37
|
+
"nineteen twenty twentyone twentytwo twentythree twentyfour\n" +
|
38
|
+
"twentyfive twentysix twentyseven\n", columnize(data, 80, ' ', false))
|
39
|
+
|
19
40
|
assert_equal(
|
20
|
-
"one
|
21
|
-
"two
|
22
|
-
"three
|
23
|
-
"
|
24
|
-
"5wo 10e 15ree 20o 25e 30ree 35o 40e 45ree two \n",
|
25
|
-
columnize([
|
26
|
-
"one", "two", "three",
|
27
|
-
"4ne", "5wo", "6hree",
|
28
|
-
"7ne", "8wo", "9hree",
|
29
|
-
"10e", "11o", "12ree",
|
30
|
-
"13e", "14o", "15ree",
|
31
|
-
"16e", "17o", "18ree",
|
32
|
-
"19e", "20o", "21ree",
|
33
|
-
"22e", "23o", "24ree",
|
34
|
-
"25e", "26o", "27ree",
|
35
|
-
"28e", "29o", "30ree",
|
36
|
-
"31e", "32o", "33ree",
|
37
|
-
"34e", "35o", "36ree",
|
38
|
-
"37e", "38o", "39ree",
|
39
|
-
"40e", "41o", "42ree",
|
40
|
-
"43e", "44o", "45ree",
|
41
|
-
"46e", "47o", "48ree",
|
42
|
-
"one", "two", "three"]))
|
41
|
+
"one five nine thirteen seventeen twentyone twentyfive \n" +
|
42
|
+
"two six ten fourteen eightteen twentytwo twentysix \n" +
|
43
|
+
"three seven eleven fifteen nineteen twentythree twentyseven\n" +
|
44
|
+
"for eight twelve sixteen twenty twentyfour \n", columnize(data))
|
43
45
|
|
44
46
|
end
|
45
47
|
end
|
metadata
CHANGED
@@ -1,27 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.4
|
3
|
+
specification_version: 1
|
2
4
|
name: columnize
|
3
5
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
6
|
+
version: 0.2.1
|
7
|
+
date: 2008-12-31 00:00:00 -05:00
|
8
|
+
summary: Read file with caching
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: rockyb@rubyforge.net
|
12
|
+
homepage: http://rubyforge.org/projects/rocky-hacks/columnize
|
13
|
+
rubyforge_project: rocky-hacks
|
14
|
+
description: Columnize is a module for reading and caching lines. This may be useful for example in a debugger where the same lines are shown many times.
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.8.2
|
24
|
+
version:
|
5
25
|
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
6
29
|
authors:
|
7
30
|
- R. Bernstein
|
8
|
-
autorequire:
|
9
|
-
bindir: bin
|
10
|
-
cert_chain: []
|
11
|
-
|
12
|
-
date: 2008-09-22 00:00:00 -04:00
|
13
|
-
default_executable:
|
14
|
-
dependencies: []
|
15
|
-
|
16
|
-
description: Columnize is a module for reading and caching lines. This may be useful for example in a debugger where the same lines are shown many times.
|
17
|
-
email: rockyb@rubyforge.net
|
18
|
-
executables: []
|
19
|
-
|
20
|
-
extensions: []
|
21
|
-
|
22
|
-
extra_rdoc_files:
|
23
|
-
- README
|
24
|
-
- lib/columnize.rb
|
25
31
|
files:
|
26
32
|
- AUTHORS
|
27
33
|
- COPYING
|
@@ -32,31 +38,18 @@ files:
|
|
32
38
|
- VERSION
|
33
39
|
- lib/columnize.rb
|
34
40
|
- test/test-columnize.rb
|
35
|
-
|
36
|
-
|
37
|
-
post_install_message:
|
41
|
+
test_files: []
|
42
|
+
|
38
43
|
rdoc_options: []
|
39
44
|
|
40
|
-
|
41
|
-
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
version:
|
48
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
-
requirements:
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: "0"
|
53
|
-
version:
|
45
|
+
extra_rdoc_files:
|
46
|
+
- README
|
47
|
+
- lib/columnize.rb
|
48
|
+
executables: []
|
49
|
+
|
50
|
+
extensions: []
|
51
|
+
|
54
52
|
requirements: []
|
55
53
|
|
56
|
-
|
57
|
-
rubygems_version: 1.0.1
|
58
|
-
signing_key:
|
59
|
-
specification_version: 2
|
60
|
-
summary: Read file with caching
|
61
|
-
test_files: []
|
54
|
+
dependencies: []
|
62
55
|
|