iostreams 0.15.0 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/io_streams/bzip2/reader.rb +1 -1
- data/lib/io_streams/bzip2/writer.rb +1 -1
- data/lib/io_streams/encode/reader.rb +102 -0
- data/lib/io_streams/encode/writer.rb +78 -0
- data/lib/io_streams/errors.rb +19 -0
- data/lib/io_streams/file/reader.rb +1 -1
- data/lib/io_streams/file/writer.rb +1 -3
- data/lib/io_streams/gzip/reader.rb +1 -1
- data/lib/io_streams/gzip/writer.rb +1 -1
- data/lib/io_streams/io_streams.rb +57 -38
- data/lib/io_streams/line/reader.rb +125 -69
- data/lib/io_streams/line/writer.rb +11 -35
- data/lib/io_streams/pgp.rb +1 -1
- data/lib/io_streams/record/reader.rb +12 -14
- data/lib/io_streams/record/writer.rb +12 -14
- data/lib/io_streams/row/reader.rb +15 -16
- data/lib/io_streams/row/writer.rb +14 -12
- data/lib/io_streams/tabular.rb +50 -30
- data/lib/io_streams/tabular/header.rb +6 -6
- data/lib/io_streams/tabular/parser/array.rb +2 -2
- data/lib/io_streams/tabular/parser/csv.rb +6 -2
- data/lib/io_streams/tabular/parser/fixed.rb +18 -37
- data/lib/io_streams/tabular/parser/hash.rb +1 -1
- data/lib/io_streams/tabular/parser/json.rb +3 -1
- data/lib/io_streams/tabular/parser/psv.rb +6 -2
- data/lib/io_streams/version.rb +1 -1
- data/lib/io_streams/xlsx/reader.rb +22 -32
- data/lib/iostreams.rb +6 -0
- data/test/encode_reader_test.rb +54 -0
- data/test/encode_writer_test.rb +82 -0
- data/test/io_streams_test.rb +0 -65
- data/test/line_reader_test.rb +180 -37
- data/test/tabular_test.rb +79 -3
- data/test/test_helper.rb +1 -1
- data/test/xlsx_reader_test.rb +7 -10
- metadata +10 -4
- data/lib/io_streams/tabular/errors.rb +0 -14
data/test/tabular_test.rb
CHANGED
@@ -60,7 +60,7 @@ class TabularTest < Minitest::Test
|
|
60
60
|
|
61
61
|
it 'raises exception for columns not in the whitelist' do
|
62
62
|
tabular = IOStreams::Tabular.new(columns: [' first ', 'Unknown Column', 'thirD '], allowed_columns: @allowed_columns, skip_unknown: false)
|
63
|
-
exc = assert_raises IOStreams::
|
63
|
+
exc = assert_raises IOStreams::Errors::InvalidHeader do
|
64
64
|
tabular.cleanse_header!
|
65
65
|
end
|
66
66
|
assert_equal 'Unknown columns after cleansing: Unknown Column', exc.message
|
@@ -69,7 +69,7 @@ class TabularTest < Minitest::Test
|
|
69
69
|
it 'raises exception missing required columns' do
|
70
70
|
required = ['first', 'second', 'fifth']
|
71
71
|
tabular = IOStreams::Tabular.new(columns: [' first ', 'Second', 'thirD '], allowed_columns: @allowed_columns, required_columns: required)
|
72
|
-
exc = assert_raises IOStreams::
|
72
|
+
exc = assert_raises IOStreams::Errors::InvalidHeader do
|
73
73
|
tabular.cleanse_header!
|
74
74
|
end
|
75
75
|
assert_equal 'Missing columns after cleansing: fifth', exc.message
|
@@ -77,7 +77,7 @@ class TabularTest < Minitest::Test
|
|
77
77
|
|
78
78
|
it 'raises exception when no columns left' do
|
79
79
|
tabular = IOStreams::Tabular.new(columns: ['one', 'two', 'three'], allowed_columns: @allowed_columns)
|
80
|
-
exc = assert_raises IOStreams::
|
80
|
+
exc = assert_raises IOStreams::Errors::InvalidHeader do
|
81
81
|
tabular.cleanse_header!
|
82
82
|
end
|
83
83
|
assert_equal 'All columns are unknown after cleansing: one,two,three', exc.message
|
@@ -135,6 +135,47 @@ class TabularTest < Minitest::Test
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
+
describe ':fixed format' do
|
139
|
+
let :tabular do
|
140
|
+
layout = [
|
141
|
+
{key: 'name', size: 23},
|
142
|
+
{key: 'address', size: 40},
|
143
|
+
{key: 'zip', size: 5}
|
144
|
+
]
|
145
|
+
IOStreams::Tabular.new(format: :fixed, format_options: {layout: layout})
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'parses to hash' do
|
149
|
+
assert hash = tabular.record_parse('Jack over there 34618')
|
150
|
+
assert_equal({'name' => 'Jack', 'address' => 'over there', 'zip' => '34618'}, hash)
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'parses short string' do
|
154
|
+
# TODO: Raise exception on lines that are too short?
|
155
|
+
assert hash = tabular.record_parse('Jack over th')
|
156
|
+
assert_equal({'name' => 'Jack', 'address' => 'over th', 'zip' => ''}, hash)
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'parses longer string' do
|
160
|
+
# TODO: Raise exception on lines that are too long?
|
161
|
+
assert hash = tabular.record_parse('Jack over there 34618........................................')
|
162
|
+
assert_equal({'name' => 'Jack', 'address' => 'over there', 'zip' => '34618'}, hash)
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'parses empty strings' do
|
166
|
+
assert hash = tabular.record_parse(' 34618')
|
167
|
+
assert_equal({'name' => '', 'address' => '', 'zip' => '34618'}, hash)
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'parses nil data as nil' do
|
171
|
+
refute tabular.record_parse(nil)
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'parses empty string as nil' do
|
175
|
+
refute tabular.record_parse('')
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
138
179
|
it 'skips columns not in the whitelist' do
|
139
180
|
tabular.header.allowed_columns = ['first', 'second', 'third', 'fourth', 'fifth']
|
140
181
|
tabular.cleanse_header!
|
@@ -179,6 +220,41 @@ class TabularTest < Minitest::Test
|
|
179
220
|
assert_equal 'a:b:c|:|23', psv_string
|
180
221
|
end
|
181
222
|
end
|
223
|
+
|
224
|
+
describe ':fixed format' do
|
225
|
+
let :tabular do
|
226
|
+
layout = [
|
227
|
+
{key: 'name', size: 23},
|
228
|
+
{key: 'address', size: 40},
|
229
|
+
{key: 'zip', size: 5}
|
230
|
+
]
|
231
|
+
IOStreams::Tabular.new(format: :fixed, format_options: {layout: layout})
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'renders fixed data' do
|
235
|
+
assert string = tabular.render({'name' => 'Jack', 'address' => 'over there', 'zip' => 34618, 'phone' => '5551231234'})
|
236
|
+
assert_equal 'Jack over there 34618', string
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'truncates long data' do
|
240
|
+
assert string = tabular.render({'name' => 'Jack', 'address' => 'over there', 'zip' => 3461832653653265, 'phone' => '5551231234'})
|
241
|
+
assert_equal 'Jack over there 34618', string
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'renders nil as empty string' do
|
245
|
+
assert string = tabular.render('zip' => 3461832653653265)
|
246
|
+
assert_equal ' 34618', string
|
247
|
+
end
|
248
|
+
|
249
|
+
it 'renders boolean' do
|
250
|
+
assert string = tabular.render({'name' => true, 'address' => false, 'zip' => nil, 'phone' => '5551231234'})
|
251
|
+
assert_equal 'true false ', string
|
252
|
+
end
|
253
|
+
|
254
|
+
it 'renders no data as nil' do
|
255
|
+
refute tabular.render({})
|
256
|
+
end
|
257
|
+
end
|
182
258
|
end
|
183
259
|
end
|
184
260
|
end
|
data/test/test_helper.rb
CHANGED
data/test/xlsx_reader_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative 'test_helper'
|
2
|
+
require 'csv'
|
2
3
|
|
3
4
|
class XlsxReaderTest
|
4
5
|
describe IOStreams::Xlsx::Reader do
|
@@ -17,23 +18,19 @@ class XlsxReaderTest
|
|
17
18
|
describe 'with a file path' do
|
18
19
|
it 'returns the contents of the file' do
|
19
20
|
rows = []
|
20
|
-
IOStreams::Xlsx::Reader.open(file_name)
|
21
|
-
|
22
|
-
end
|
23
|
-
assert_equal xlsx_contents, rows
|
21
|
+
csv = IOStreams::Xlsx::Reader.open(file_name, &:read)
|
22
|
+
assert_equal xlsx_contents, CSV.parse(csv)
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
26
|
describe 'with a file stream' do
|
28
27
|
it 'returns the contents of the file' do
|
29
|
-
|
30
|
-
File.open(file_name) do |file|
|
31
|
-
IOStreams::Xlsx::Reader.open(file)
|
32
|
-
stream.each { |row| rows << row }
|
33
|
-
end
|
28
|
+
csv = ''
|
29
|
+
File.open(file_name, 'rb') do |file|
|
30
|
+
csv = IOStreams::Xlsx::Reader.open(file, &:read)
|
34
31
|
end
|
35
32
|
|
36
|
-
assert_equal xlsx_contents,
|
33
|
+
assert_equal xlsx_contents, CSV.parse(csv)
|
37
34
|
end
|
38
35
|
end
|
39
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iostreams
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -36,6 +36,9 @@ files:
|
|
36
36
|
- Rakefile
|
37
37
|
- lib/io_streams/bzip2/reader.rb
|
38
38
|
- lib/io_streams/bzip2/writer.rb
|
39
|
+
- lib/io_streams/encode/reader.rb
|
40
|
+
- lib/io_streams/encode/writer.rb
|
41
|
+
- lib/io_streams/errors.rb
|
39
42
|
- lib/io_streams/file/reader.rb
|
40
43
|
- lib/io_streams/file/writer.rb
|
41
44
|
- lib/io_streams/gzip/reader.rb
|
@@ -57,7 +60,6 @@ files:
|
|
57
60
|
- lib/io_streams/sftp/writer.rb
|
58
61
|
- lib/io_streams/streams.rb
|
59
62
|
- lib/io_streams/tabular.rb
|
60
|
-
- lib/io_streams/tabular/errors.rb
|
61
63
|
- lib/io_streams/tabular/header.rb
|
62
64
|
- lib/io_streams/tabular/parser/array.rb
|
63
65
|
- lib/io_streams/tabular/parser/base.rb
|
@@ -74,6 +76,8 @@ files:
|
|
74
76
|
- lib/iostreams.rb
|
75
77
|
- test/bzip2_reader_test.rb
|
76
78
|
- test/bzip2_writer_test.rb
|
79
|
+
- test/encode_reader_test.rb
|
80
|
+
- test/encode_writer_test.rb
|
77
81
|
- test/file_reader_test.rb
|
78
82
|
- test/file_writer_test.rb
|
79
83
|
- test/files/spreadsheet.xlsx
|
@@ -113,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
113
117
|
requirements:
|
114
118
|
- - ">="
|
115
119
|
- !ruby/object:Gem::Version
|
116
|
-
version: '2.
|
120
|
+
version: '2.2'
|
117
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
122
|
requirements:
|
119
123
|
- - ">="
|
@@ -132,6 +136,7 @@ test_files:
|
|
132
136
|
- test/row_writer_test.rb
|
133
137
|
- test/zip_reader_test.rb
|
134
138
|
- test/bzip2_writer_test.rb
|
139
|
+
- test/encode_writer_test.rb
|
135
140
|
- test/gzip_writer_test.rb
|
136
141
|
- test/file_reader_test.rb
|
137
142
|
- test/record_reader_test.rb
|
@@ -149,6 +154,7 @@ test_files:
|
|
149
154
|
- test/files/text.txt.gz
|
150
155
|
- test/files/text.txt
|
151
156
|
- test/gzip_reader_test.rb
|
157
|
+
- test/encode_reader_test.rb
|
152
158
|
- test/test_helper.rb
|
153
159
|
- test/file_writer_test.rb
|
154
160
|
- test/tabular_test.rb
|