tabularize 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,8 @@
1
+ 0.2.4
2
+ -----
3
+ - Improvment: Caching result of table generator
4
+ - Bug fix/feature: Handling rows of different number of cells
5
+
1
6
  0.2.2
2
7
  -----
3
8
  - `screen_width` and `ellipsis` options to cut off trailing cells exceeding specified screen width
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tabularize (0.2.2)
4
+ tabularize (0.2.3)
5
5
  unicode-display_width (~> 0.1.1)
6
6
 
7
7
  GEM
@@ -33,6 +33,7 @@ class Tabularize
33
33
  @options = DEFAULT_OPTIONS.
34
34
  merge(DEFAULT_OPTIONS_GENERATOR).
35
35
  merge(options)
36
+ @cache = {}
36
37
  end
37
38
 
38
39
  # @since 0.2.0
@@ -51,8 +52,31 @@ class Tabularize
51
52
  # @return [String]
52
53
  # @since 0.2.0
53
54
  def to_s
54
- rows = Tabularize.it(@rows, @options)
55
- return nil if rows.empty?
55
+ return nil if @rows.empty?
56
+
57
+ # Invalidate cache if needed
58
+ num_cached_rows = @cache[:num_rows] || 0
59
+ analysis = Tabularize.analyze(@rows[num_cached_rows..-1], @options.merge(@cache[:analysis] || {}))
60
+
61
+ unless @cache.empty?
62
+ cmw = @cache[:analysis][:max_widths]
63
+ mw = analysis[:max_widths]
64
+ if mw.zip(cmw).any? { |pair| pair.first > (pair.last || 0) }
65
+ @cache = {}
66
+ num_cached_rows = 0
67
+ else
68
+ [@seps[@rows.length] - @cache[:last_seps], 0].max.times do
69
+ @cache[:string_io].puts @cache[:separator]
70
+ end
71
+ @cache[:last_seps] = @seps[@rows.length]
72
+
73
+ if num_cached_rows == @rows.length
74
+ return @cache[:string_io].string + @cache[:separator]
75
+ end
76
+ end
77
+ end
78
+
79
+ rows = Tabularize.it(@rows[num_cached_rows..-1], @options.merge(analysis))
56
80
 
57
81
  h = @options[:hborder]
58
82
  v = @options[:vborder]
@@ -64,26 +88,32 @@ class Tabularize
64
88
  sw = @options[:screen_width]
65
89
  el = @options[:ellipsis].length
66
90
 
67
- separator = ''
68
- rows[0].each_with_index do |c, idx|
69
- new_sep = separator + i + h * Tabularize.cell_width(c, u, a)
91
+ separator = @cache[:separator]
92
+ col_count = @cache[:col_count]
93
+ unless separator
94
+ separator = ''
95
+ rows[0].each_with_index do |c, idx|
96
+ new_sep = separator + i + h * Tabularize.cell_width(c, u, a)
70
97
 
71
- if sw && Tabularize.cell_width(new_sep, u, a) > sw - el
72
- rows = rows.map { |line| line[0, idx] }
73
- vl = il = @options[:ellipsis]
74
- break
75
- else
76
- separator = new_sep
98
+ if sw && Tabularize.cell_width(new_sep, u, a) > sw - el
99
+ col_count = idx
100
+ break
101
+ else
102
+ separator = new_sep
103
+ end
77
104
  end
105
+ separator += il
78
106
  end
79
- separator += il
80
107
 
81
- output = StringIO.new
82
- output.puts separator
108
+ output = @cache[:string_io] || StringIO.new.tap { |io| io.puts separator }
109
+ if col_count
110
+ rows = rows.map { |line| line[0, col_count] }
111
+ vl = il = @options[:ellipsis]
112
+ end
83
113
  rows.each_with_index do |row, idx|
84
114
  row = row.map { |val| val.lines.to_a.map(&:chomp) }
85
115
  height = row[0] ? row[0].count : 1
86
- @seps[idx].times do
116
+ @seps[idx + num_cached_rows].times do
87
117
  output.puts separator
88
118
  end
89
119
  (0...height).each do |line|
@@ -94,12 +124,22 @@ class Tabularize
94
124
  end
95
125
  end
96
126
 
97
- @seps[rows.length].times do
127
+ @seps[rows.length + num_cached_rows].times do
98
128
  output.puts separator
99
129
  end
100
130
 
101
- output.puts separator
102
- output.string
131
+ @cache = {
132
+ :analysis => analysis,
133
+ :separator => separator,
134
+ :col_count => col_count,
135
+ :num_rows => @rows.length,
136
+ :string_io => output,
137
+ :last_seps => @seps[rows.length]
138
+ }
139
+ output.string + separator
140
+ rescue Exception
141
+ @cache = {}
142
+ raise
103
143
  end
104
144
 
105
145
  # Returns the display width of a String
@@ -113,6 +153,41 @@ class Tabularize
113
153
  str.send(unicode ? :display_width : :length)
114
154
  end
115
155
 
156
+ # Determines maximum widths of cells and maximum heights of rows
157
+ def self.analyze data, options = {}
158
+ unicode = options[:unicode]
159
+ ansi = options[:ansi]
160
+ max_widths = (options[:max_widths] || []).dup
161
+ max_heights = (options[:max_heights] || []).dup
162
+ rows = []
163
+
164
+ data.each_with_index do |row, ridx|
165
+ rows << row = [*row].map(&:to_s)
166
+
167
+ row.each_with_index do |cell, idx|
168
+ nlines = 0
169
+ cell.lines do |c|
170
+ max_widths[idx] = [ Tabularize.cell_width(c.chomp, unicode, ansi), max_widths[idx] || 0 ].max
171
+ nlines += 1
172
+ end
173
+ max_heights[ridx] = [ nlines, max_heights[ridx] || 1 ].max
174
+ end
175
+ end
176
+
177
+ num_cells = max_widths.length
178
+ rows.each do |row|
179
+ [num_cells - row.length, 0].max.times do
180
+ row << ''
181
+ end
182
+ end
183
+
184
+ {
185
+ :rows => rows,
186
+ :max_widths => max_widths,
187
+ :max_heights => max_heights,
188
+ }
189
+ end
190
+
116
191
  # Formats two-dimensional tabular data.
117
192
  # One-dimensional data (e.g. Array of Strings) is treated as tabular data
118
193
  # of which each row has only one column.
@@ -152,21 +227,10 @@ class Tabularize
152
227
  raise ArgumentError.new(":screen_width must be a positive integer")
153
228
  end
154
229
 
155
- rows = []
156
- max_widths = []
157
- max_heights = []
158
- table_data.each_with_index do |row, ridx|
159
- rows << row = [*row].map(&:to_s)
160
-
161
- row.each_with_index do |cell, idx|
162
- nlines = 0
163
- cell.lines do |c|
164
- max_widths[idx] = [ Tabularize.cell_width(c.chomp, unicode, ansi), max_widths[idx] || 0 ].max
165
- nlines += 1
166
- end
167
- max_heights[ridx] = [ nlines, max_heights[ridx] || 1 ].max
168
- end
169
- end
230
+ # Analyze data
231
+ ret = options[:analysis] || Tabularize.analyze(table_data, options)
232
+ rows, max_widths, max_heights =
233
+ [:rows, :max_widths, :max_heights].map { |k| ret[k] }
170
234
 
171
235
  ridx = -1
172
236
  rows.map { |row|
@@ -175,7 +239,7 @@ class Tabularize
175
239
  max_height = max_heights[ridx]
176
240
  row.map { |cell|
177
241
  idx += 1
178
- lines = cell.lines.to_a
242
+ lines = cell.to_s.lines.to_a
179
243
  offset =
180
244
  case valign[idx] || valign.last
181
245
  when :top
@@ -1,3 +1,3 @@
1
1
  class Tabularize
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.4"
3
3
  end
@@ -0,0 +1,56 @@
1
+ Name |Dept |Location |Phone
2
+ John Doe |Finance |Los Angeles, CA 90089 |555-1555
3
+ Average Joe |Engineering|Somewhere over the rainbow|N/A
4
+ Hong Gildong|HR |Nowhere |555-5555
5
+ Name| Dept| Location| Phone
6
+ John Doe| Finance| Los Angeles, CA 90089|555-1555
7
+ Average Joe|Engineering|Somewhere over the rainbow| N/A
8
+ Hong Gildong| HR| Nowhere|555-5555
9
+ Name | Dept | Location | Phone
10
+ John Doe | Finance | Los Angeles, CA 90089 |555-1555
11
+ Average Joe |Engineering|Somewhere over the rainbow| N/A
12
+ Hong Gildong| HR | Nowhere |555-5555
13
+ Name________|Dept_______|Location__________________|Phone___
14
+ John Doe____|Finance____|Los Angeles, CA 90089_____|555-1555
15
+ Average Joe_|Engineering|Somewhere over the rainbow|N/A_____
16
+ Hong Gildong|HR_________|Nowhere___________________|555-5555
17
+ Name |Dept |Location |Phone
18
+ John Doe |Finance |Los Angeles, CA 90089 |555-1555
19
+ Average Joe |Engineering|Somewhere over the rainbow |N/A
20
+ Hong Gildong|HR |Nowhere |555-5555
21
+ 홍길동 |탁상 3부 |서울역 3번 출구 김씨 옆자리|N/A
22
+ Name| Dept| Location| Phone
23
+ John Doe| Finance| Los Angeles, CA 90089|555-1555
24
+ Average Joe|Engineering| Somewhere over the rainbow| N/A
25
+ Hong Gildong| HR| Nowhere|555-5555
26
+ 홍길동| 탁상 3부|서울역 3번 출구 김씨 옆자리| N/A
27
+ Name | Dept | Location | Phone
28
+ John Doe | Finance | Los Angeles, CA 90089 |555-1555
29
+ Average Joe |Engineering|Somewhere over the rainbow | N/A
30
+ Hong Gildong| HR | Nowhere |555-5555
31
+ 홍길동 | 탁상 3부 |서울역 3번 출구 김씨 옆자리| N/A
32
+ Name________|Dept_______|Location___________________|Phone___
33
+ John Doe____|Finance____|Los Angeles, CA 90089______|555-1555
34
+ Average Joe_|Engineering|Somewhere over the rainbow_|N/A_____
35
+ Hong Gildong|HR_________|Nowhere____________________|555-5555
36
+ 홍길동______|탁상 3부___|서울역 3번 출구 김씨 옆자리|N/A_____
37
+ Name |Dept |Location |Phone
38
+ John Doe |Finance |Los Angeles, CA 90089 |555-1555
39
+ Average Joe |Engineering|Somewhere over the rainbow |N/A
40
+ Hong Gildong|HR |Nowhere |555-5555
41
+ 홍길동 |탁상 3부 |서울역 3번 출구 김씨 옆자리|N/A
42
+ Name| Dept| Location| Phone
43
+ John Doe| Finance| Los Angeles, CA 90089|555-1555
44
+ Average Joe|Engineering| Somewhere over the rainbow| N/A
45
+ Hong Gildong| HR| Nowhere|555-5555
46
+ 홍길동| 탁상 3부|서울역 3번 출구 김씨 옆자리| N/A
47
+ Name | Dept | Location | Phone
48
+ John Doe | Finance | Los Angeles, CA 90089 |555-1555
49
+ Average Joe |Engineering|Somewhere over the rainbow | N/A
50
+ Hong Gildong| HR | Nowhere |555-5555
51
+ 홍길동 | 탁상 3부 |서울역 3번 출구 김씨 옆자리| N/A
52
+ Name________|Dept_______|Location___________________|Phone___
53
+ John Doe____|Finance____|Los Angeles, CA 90089______|555-1555
54
+ Average Joe_|Engineering|Somewhere over the rainbow_|N/A_____
55
+ Hong Gildong|HR_________|Nowhere____________________|555-5555
56
+ 홍길동______|탁상 3부___|서울역 3번 출구 김씨 옆자리|N/A_____
File without changes
@@ -68,22 +68,22 @@ class TestTabularize < Test::Unit::TestCase
68
68
  :left =>
69
69
  [
70
70
  "a |aa |aaa|aaaa",
71
- "cccccccccccccccccccc",
72
- "ddd |dddd|d ",
71
+ "cccccccccccccccccccc| | | ",
72
+ "ddd |dddd|d | ",
73
73
  "bbbb |bbb |bb |b "
74
74
  ],
75
75
  :right =>
76
76
  [
77
77
  " a| aa|aaa|aaaa",
78
- "cccccccccccccccccccc",
79
- " ddd|dddd| d",
78
+ "cccccccccccccccccccc| | | ",
79
+ " ddd|dddd| d| ",
80
80
  " bbbb| bbb| bb| b"
81
81
  ],
82
82
  :center =>
83
83
  [
84
84
  " a | aa |aaa|aaaa",
85
- "cccccccccccccccccccc",
86
- " ddd |dddd| d ",
85
+ "cccccccccccccccccccc| | | ",
86
+ " ddd |dddd| d | ",
87
87
  " bbbb |bbb |bb | b "
88
88
  ]
89
89
  }
@@ -96,36 +96,47 @@ class TestTabularize < Test::Unit::TestCase
96
96
  [ '.', '_' ].each do |pad|
97
97
  [:left, :right, :center].each do |align|
98
98
  result = Tabularize.it(data, :pad => pad, :align => align)
99
- ap :align => align, :pad => pad, :from => data, :to => result.map { |r| r.join('|') }
100
99
  assert_equal RESULT[data][align], result.map { |row| row.join('|').gsub(pad, ' ') }
101
100
  end
102
101
  end
103
102
  end
104
103
  end
105
104
 
105
+ def test_analyze
106
+ data = []
107
+ data << %w[a bb ccc]
108
+ data << %w[aa bb cc]
109
+ data << %w[aaa bb cc]
110
+ data << %w[aaa bb cc] + ["dddd\neee"]
111
+ data << %w[f]
112
+ ret = Tabularize.analyze(data, :unicode => true, :ansi => true)
113
+ assert_equal [%w[a bb ccc].push(''), %w[aa bb cc].push(''), %w[aaa bb cc].push(''),
114
+ %w[aaa bb cc] + ["dddd\neee"], %w[f] + [''] * 3], ret[:rows]
115
+ assert_equal [1, 1, 1, 2, 1], ret[:max_heights]
116
+ assert_equal [3, 2, 3, 4], ret[:max_widths]
117
+ end
118
+
106
119
  # TODO: Need assertion
107
120
  def test_tabularize_csv
121
+ sio = StringIO.new
122
+
108
123
  {
109
- 'test.csv' => [false, false],
110
- 'test_unicode.csv' => [true, false],
111
- 'test_unicode_ansi.csv' => [true, true]
124
+ 'fixture/test.csv' => [false, false],
125
+ 'fixture/test_unicode.csv' => [true, false],
126
+ 'fixture/test_unicode_ansi.csv' => [true, true]
112
127
  }.each do |file, unicode_ansi|
113
128
  unicode, ansi = unicode_ansi
114
129
  opts = { :unicode => unicode, :ansi => ansi }
115
130
  data = CSV.read(File.join(File.dirname(__FILE__), file), :col_sep => '|')
116
- ap data
117
131
  output = Tabularize.it(data, opts).map { |row| row.join '|' }
118
- ap output
119
- puts
120
- puts output
121
-
122
- puts Tabularize.it(data, opts.merge(:align => :right)).map { |row| row.join '|' }
123
- puts
124
- puts Tabularize.it(data, opts.merge(:align => :center)).map { |row| row.join '|' }
125
- puts
126
- puts Tabularize.it(data, opts.merge(:pad => '_')).map { |row| row.join '|' }
127
132
 
133
+ sio.puts output
134
+ sio.puts Tabularize.it(data, opts.merge(:align => :right)).map { |row| row.join '|' }
135
+ sio.puts Tabularize.it(data, opts.merge(:align => :center)).map { |row| row.join '|' }
136
+ sio.puts Tabularize.it(data, opts.merge(:pad => '_')).map { |row| row.join '|' }
128
137
  end
138
+
139
+ assert_equal File.read(File.join(File.dirname(__FILE__), 'fixture/tabularize_csv.txt')), sio.string
129
140
  end
130
141
 
131
142
  def test_invalid_arguments
@@ -156,17 +167,29 @@ class TestTabularize < Test::Unit::TestCase
156
167
  table << DATA2[2]
157
168
  table << DATA2[3]
158
169
 
159
- puts table.to_s
170
+ assert_equal(
171
+ '#============================#============#===========#============#
172
+ I,,,,,,,,,,,,a,,,,,,,,,,,,,,,I,,,,aa,,,,,,I,,,aaa,,,,,I,,,aaaa,,,,,I
173
+ #============================#============#===========#============#
174
+ I,,,,,,,,,,,,a,,,,,,,,,,,,,,,I,,,,aa,,,,,,I,,,aaa,,,,,I,,,aaaa,,,,,I
175
+ #============================#============#===========#============#
176
+ #============================#============#===========#============#
177
+ I,,,cccccccccccccccccccc,,,,,I,,,,,,,,,,,,I,,,,,,,,,,,I,,,,,,,,,,,,I
178
+ #============================#============#===========#============#
179
+ I,,,,,,,,,,,ddd,,,,,,,,,,,,,,I,,,dddd,,,,,I,,,,d,,,,,,I,,,,,,,,,,,,I
180
+ I,,,,,,,,,,,bbbb,,,,,,,,,,,,,I,,,bbb,,,,,,I,,,bb,,,,,,I,,,,b,,,,,,,I
181
+ #============================#============#===========#============#', table.to_s)
160
182
  end
161
183
 
162
184
  def test_table_complex
185
+ separator = '#~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#'
163
186
  output = "
164
187
  #~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
165
188
  I..Name.......I.....Dept....I.....................LocationI.....PhoneI
166
189
  #~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
167
190
  I..John Doe...I....Finance..I.........Los Angeles CA 90089I..555-1555I
168
191
  I..Average JoeI..EngineeringI...Somewhere over the rainbowI.......N/AI
169
- I..1..........I
192
+ I..1..........I.............I.............................I..........I
170
193
  #~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
171
194
  #~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
172
195
  I..홍길동.....I.............I..서울역 3번 출구 김씨 옆자리I..........I
@@ -191,17 +214,56 @@ I.............I...탁상 3부..I.....................맞습니다I..........I
191
214
  table << ['홍길동', '탁상 3부', "서울역 3번 출구 김씨 옆자리\n\n맞습니다", 'N/A']
192
215
  table.separator!
193
216
  table.separator!
217
+
218
+ 100.times do
219
+ assert_equal output, table.to_s.strip
220
+ end
221
+ table.separator!
222
+ table.separator!
223
+ assert_equal [output, separator, separator].join($/), table.to_s.strip
224
+ assert_equal [output, separator, separator].join($/), table.to_s.strip
225
+ table << "This should change everything doh!"
226
+ output = "
227
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
228
+ I..Name..............................I.....Dept....I.....................LocationI.....PhoneI
229
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
230
+ I..John Doe..........................I....Finance..I.........Los Angeles CA 90089I..555-1555I
231
+ I..Average Joe.......................I..EngineeringI...Somewhere over the rainbowI.......N/AI
232
+ I..1.................................I.............I.............................I..........I
233
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
234
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
235
+ I..홍길동............................I.............I..서울역 3번 출구 김씨 옆자리I..........I
236
+ I....................................I.............I.............................I.......N/AI
237
+ I....................................I...탁상 3부..I.....................맞습니다I..........I
238
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
239
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
240
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
241
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#
242
+ I..This should change everything doh!I.............I.............................I..........I
243
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#".strip
244
+ assert_equal output, table.to_s.strip
194
245
  assert_equal output, table.to_s.strip
246
+
247
+ separator = '#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~#'
248
+ line = 'I..a.................................I.......b.....I............................cI.........dI'
249
+ 10.times do |i|
250
+ table << %w[a b c d]
251
+ expected = (output.lines.to_a[0..-2].map(&:chomp) + [line] * (i+1) + [separator]).join($/)
252
+ assert_equal expected, table.to_s
253
+ end
195
254
  end
196
255
 
197
256
  def test_screen_width
198
257
  [1, 3, 9, 50, 80].each do |w|
199
258
  t = Tabularize.new :screen_width => w
200
259
  10.times do
201
- t << ['12345'] * 80
260
+ t << ['12345'] * 20
202
261
  end
203
- puts t
204
262
  assert t.to_s.lines.all? { |line| line.chomp.length <= w }
263
+ t << %w[12345]
264
+ puts t.to_s
265
+ assert t.to_s.lines.all? { |line| line.chomp.length <= w }
266
+ assert t.to_s.lines.all? { |line| %w[+ >].include?(line.chomp.reverse[0, 1]) }
205
267
  end
206
268
  end
207
269
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tabularize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-21 00:00:00.000000000 Z
12
+ date: 2012-07-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: awesome_print
@@ -76,11 +76,12 @@ files:
76
76
  - lib/tabularize.rb
77
77
  - lib/tabularize/version.rb
78
78
  - tabularize.gemspec
79
+ - test/fixture/tabularize_csv.txt
80
+ - test/fixture/test.csv
81
+ - test/fixture/test_unicode.csv
82
+ - test/fixture/test_unicode_ansi.csv
79
83
  - test/readme.rb
80
- - test/test.csv
81
84
  - test/test_tabularize.rb
82
- - test/test_unicode.csv
83
- - test/test_unicode_ansi.csv
84
85
  homepage: ''
85
86
  licenses: []
86
87
  post_install_message:
@@ -106,8 +107,9 @@ signing_key:
106
107
  specification_version: 3
107
108
  summary: Formatting tabular data
108
109
  test_files:
110
+ - test/fixture/tabularize_csv.txt
111
+ - test/fixture/test.csv
112
+ - test/fixture/test_unicode.csv
113
+ - test/fixture/test_unicode_ansi.csv
109
114
  - test/readme.rb
110
- - test/test.csv
111
115
  - test/test_tabularize.rb
112
- - test/test_unicode.csv
113
- - test/test_unicode_ansi.csv