iostreams 1.0.0.beta7 → 1.0.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.
- checksums.yaml +4 -4
- data/README.md +138 -78
- data/lib/io_streams/{streams.rb → builder.rb} +4 -3
- data/lib/io_streams/deprecated.rb +9 -9
- data/lib/io_streams/io_streams.rb +11 -11
- data/lib/io_streams/line/writer.rb +2 -2
- data/lib/io_streams/path.rb +7 -7
- data/lib/io_streams/paths/file.rb +13 -4
- data/lib/io_streams/paths/http.rb +4 -2
- data/lib/io_streams/paths/s3.rb +4 -4
- data/lib/io_streams/paths/sftp.rb +37 -36
- data/lib/io_streams/pgp/reader.rb +3 -1
- data/lib/io_streams/record/writer.rb +1 -1
- data/lib/io_streams/row/writer.rb +1 -1
- data/lib/io_streams/stream.rb +134 -109
- data/lib/io_streams/version.rb +1 -1
- data/lib/iostreams.rb +1 -1
- data/test/{streams_test.rb → builder_test.rb} +23 -11
- data/test/encode_reader_test.rb +1 -0
- data/test/paths/s3_test.rb +1 -1
- data/test/stream_test.rb +26 -26
- metadata +8 -8
data/lib/io_streams/version.rb
CHANGED
data/lib/iostreams.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'io_streams/version'
|
2
2
|
# @formatter:off
|
3
3
|
module IOStreams
|
4
|
+
autoload :Builder, 'io_streams/builder'
|
4
5
|
autoload :Errors, 'io_streams/errors'
|
5
6
|
autoload :Path, 'io_streams/path'
|
6
7
|
autoload :Pgp, 'io_streams/pgp'
|
7
8
|
autoload :Reader, 'io_streams/reader'
|
8
9
|
autoload :Stream, 'io_streams/stream'
|
9
|
-
autoload :Streams, 'io_streams/streams'
|
10
10
|
autoload :Tabular, 'io_streams/tabular'
|
11
11
|
autoload :Utils, 'io_streams/utils'
|
12
12
|
autoload :Writer, 'io_streams/writer'
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require_relative 'test_helper'
|
2
2
|
|
3
|
-
class
|
4
|
-
describe IOStreams::
|
3
|
+
class BuilderTest < Minitest::Test
|
4
|
+
describe IOStreams::Builder do
|
5
5
|
let(:file_name) { 'my/path/abc.bcd.xlsx.zip.gz.pgp' }
|
6
|
-
let(:streams) { IOStreams::
|
6
|
+
let(:streams) { IOStreams::Builder.new(file_name) }
|
7
7
|
|
8
8
|
describe '#option' do
|
9
9
|
it 'adds one option' do
|
@@ -68,6 +68,14 @@ class StreamsTest < Minitest::Test
|
|
68
68
|
end
|
69
69
|
|
70
70
|
describe '#reader' do
|
71
|
+
let :gzip_string do
|
72
|
+
io_string = StringIO.new(''.b)
|
73
|
+
IOStreams::Gzip::Writer.stream(io_string) do |io|
|
74
|
+
io.write("Hello World")
|
75
|
+
end
|
76
|
+
io_string.string
|
77
|
+
end
|
78
|
+
|
71
79
|
it 'directly calls block for an empty stream' do
|
72
80
|
string_io = StringIO.new
|
73
81
|
value = nil
|
@@ -80,17 +88,17 @@ class StreamsTest < Minitest::Test
|
|
80
88
|
end
|
81
89
|
|
82
90
|
it 'returns the reader' do
|
83
|
-
string_io = StringIO.new
|
84
|
-
streams.stream(:
|
91
|
+
string_io = StringIO.new(gzip_string)
|
92
|
+
streams.stream(:gz)
|
85
93
|
streams.reader(string_io) do |io|
|
86
|
-
assert io.is_a?(
|
94
|
+
assert io.is_a?(::Zlib::GzipReader), io
|
87
95
|
end
|
88
96
|
end
|
89
97
|
|
90
98
|
it 'returns the last reader' do
|
91
|
-
string_io = StringIO.new
|
99
|
+
string_io = StringIO.new(gzip_string)
|
92
100
|
streams.stream(:encode)
|
93
|
-
streams.stream(:
|
101
|
+
streams.stream(:gz)
|
94
102
|
streams.reader(string_io) do |io|
|
95
103
|
assert io.is_a?(IOStreams::Encode::Reader), io
|
96
104
|
end
|
@@ -147,12 +155,12 @@ class StreamsTest < Minitest::Test
|
|
147
155
|
|
148
156
|
describe '#parse_extensions' do
|
149
157
|
it 'single stream' do
|
150
|
-
streams = IOStreams::
|
158
|
+
streams = IOStreams::Builder.new('my/path/abc.xlsx')
|
151
159
|
assert_equal %i[xlsx], streams.send(:parse_extensions)
|
152
160
|
end
|
153
161
|
|
154
162
|
it 'empty' do
|
155
|
-
streams = IOStreams::
|
163
|
+
streams = IOStreams::Builder.new('my/path/abc.csv')
|
156
164
|
assert_equal [], streams.send(:parse_extensions)
|
157
165
|
end
|
158
166
|
|
@@ -178,7 +186,7 @@ class StreamsTest < Minitest::Test
|
|
178
186
|
|
179
187
|
it 'no file name, streams, or options' do
|
180
188
|
expected = {}
|
181
|
-
streams = IOStreams::
|
189
|
+
streams = IOStreams::Builder.new
|
182
190
|
assert_equal expected, streams.pipeline
|
183
191
|
end
|
184
192
|
|
@@ -238,6 +246,10 @@ class StreamsTest < Minitest::Test
|
|
238
246
|
yield new(io, **args)
|
239
247
|
end
|
240
248
|
|
249
|
+
def self.open(file_name_or_io, **args, &block)
|
250
|
+
file_name_or_io.is_a?(String) ? file(file_name_or_io, **args, &block) : stream(file_name_or_io, **args, &block)
|
251
|
+
end
|
252
|
+
|
241
253
|
def initialize(io, arg:)
|
242
254
|
@io = io
|
243
255
|
@arg = arg
|
data/test/encode_reader_test.rb
CHANGED
@@ -21,6 +21,7 @@ class EncodeReaderTest < Minitest::Test
|
|
21
21
|
describe '#read' do
|
22
22
|
describe 'replacement' do
|
23
23
|
it 'does not strip invalid characters' do
|
24
|
+
skip "Does not raise on JRuby" if defined?(JRuby)
|
24
25
|
input = StringIO.new(bad_data)
|
25
26
|
IOStreams::Encode::Reader.stream(input, encoding: 'UTF-8') do |io|
|
26
27
|
assert_raises ::Encoding::UndefinedConversionError do
|
data/test/paths/s3_test.rb
CHANGED
@@ -100,7 +100,7 @@ module Paths
|
|
100
100
|
describe '#each_line' do
|
101
101
|
it 'reads line by line' do
|
102
102
|
lines = []
|
103
|
-
existing_path.
|
103
|
+
existing_path.each(:line) {|line| lines << line}
|
104
104
|
assert_equal raw.lines.collect(&:chomp), lines
|
105
105
|
end
|
106
106
|
end
|
data/test/stream_test.rb
CHANGED
@@ -75,7 +75,7 @@ class StreamTest < Minitest::Test
|
|
75
75
|
it 'returns a line at a time' do
|
76
76
|
lines = []
|
77
77
|
stream.stream(:none)
|
78
|
-
count = stream.
|
78
|
+
count = stream.each(:line) { |line| lines << line }
|
79
79
|
assert_equal data.lines.map(&:strip), lines
|
80
80
|
assert_equal data.lines.count, count
|
81
81
|
end
|
@@ -85,16 +85,16 @@ class StreamTest < Minitest::Test
|
|
85
85
|
lines = []
|
86
86
|
stream = IOStreams::Stream.new(input)
|
87
87
|
stream.stream(:encode, encoding: 'UTF-8', cleaner: :printable, replace: '')
|
88
|
-
count = stream.
|
88
|
+
count = stream.each(:line) { |line| lines << line }
|
89
89
|
assert_equal stripped_data.lines.map(&:strip), lines
|
90
90
|
assert_equal stripped_data.lines.count, count
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
describe '.
|
94
|
+
describe '.each row' do
|
95
95
|
end
|
96
96
|
|
97
|
-
describe '.
|
97
|
+
describe '.each record' do
|
98
98
|
end
|
99
99
|
|
100
100
|
describe '#writer' do
|
@@ -191,11 +191,11 @@ class StreamTest < Minitest::Test
|
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
194
|
-
describe '#
|
194
|
+
describe '#writer(:line)' do
|
195
195
|
describe "#write" do
|
196
196
|
it 'one block' do
|
197
197
|
io = StringIO.new
|
198
|
-
IOStreams::Stream.new(io).
|
198
|
+
IOStreams::Stream.new(io).writer(:line) do |stream|
|
199
199
|
stream.write("Hello World")
|
200
200
|
end
|
201
201
|
assert_equal "Hello World\n", io.string
|
@@ -203,7 +203,7 @@ class StreamTest < Minitest::Test
|
|
203
203
|
|
204
204
|
it 'multiple blocks' do
|
205
205
|
io = StringIO.new
|
206
|
-
IOStreams::Stream.new(io).
|
206
|
+
IOStreams::Stream.new(io).writer(:line) do |stream|
|
207
207
|
stream.write("He")
|
208
208
|
stream.write("l")
|
209
209
|
stream.write("lo ")
|
@@ -214,7 +214,7 @@ class StreamTest < Minitest::Test
|
|
214
214
|
|
215
215
|
it 'empty blocks' do
|
216
216
|
io = StringIO.new
|
217
|
-
IOStreams::Stream.new(io).
|
217
|
+
IOStreams::Stream.new(io).writer(:line) do |stream|
|
218
218
|
stream.write("")
|
219
219
|
stream.write("He")
|
220
220
|
stream.write("")
|
@@ -229,7 +229,7 @@ class StreamTest < Minitest::Test
|
|
229
229
|
|
230
230
|
it 'nil blocks' do
|
231
231
|
io = StringIO.new
|
232
|
-
IOStreams::Stream.new(io).
|
232
|
+
IOStreams::Stream.new(io).writer(:line) do |stream|
|
233
233
|
stream.write(nil)
|
234
234
|
stream.write("He")
|
235
235
|
stream.write(nil)
|
@@ -246,7 +246,7 @@ class StreamTest < Minitest::Test
|
|
246
246
|
describe "#<<" do
|
247
247
|
it 'one block' do
|
248
248
|
io = StringIO.new
|
249
|
-
IOStreams::Stream.new(io).
|
249
|
+
IOStreams::Stream.new(io).writer(:line) do |stream|
|
250
250
|
stream << "Hello World"
|
251
251
|
end
|
252
252
|
assert_equal "Hello World\n", io.string
|
@@ -254,7 +254,7 @@ class StreamTest < Minitest::Test
|
|
254
254
|
|
255
255
|
it 'multiple blocks' do
|
256
256
|
io = StringIO.new
|
257
|
-
IOStreams::Stream.new(io).
|
257
|
+
IOStreams::Stream.new(io).writer(:line) do |stream|
|
258
258
|
stream << "He"
|
259
259
|
stream << "l" << "lo " << "World"
|
260
260
|
end
|
@@ -263,7 +263,7 @@ class StreamTest < Minitest::Test
|
|
263
263
|
|
264
264
|
it 'empty blocks' do
|
265
265
|
io = StringIO.new
|
266
|
-
IOStreams::Stream.new(io).
|
266
|
+
IOStreams::Stream.new(io).writer(:line) do |stream|
|
267
267
|
stream << ""
|
268
268
|
stream << "He" << "" << "l" << ""
|
269
269
|
stream << "lo " << "World"
|
@@ -274,7 +274,7 @@ class StreamTest < Minitest::Test
|
|
274
274
|
|
275
275
|
it 'nil blocks' do
|
276
276
|
io = StringIO.new
|
277
|
-
IOStreams::Stream.new(io).
|
277
|
+
IOStreams::Stream.new(io).writer(:line) do |stream|
|
278
278
|
stream << nil
|
279
279
|
stream << "He" << nil << "l" << nil
|
280
280
|
stream << "lo " << "World"
|
@@ -287,9 +287,9 @@ class StreamTest < Minitest::Test
|
|
287
287
|
describe "line writers within line writers" do
|
288
288
|
it 'uses existing line writer' do
|
289
289
|
io = StringIO.new
|
290
|
-
IOStreams::Stream.new(io).
|
290
|
+
IOStreams::Stream.new(io).writer(:line) do |stream|
|
291
291
|
stream.write("Before")
|
292
|
-
IOStreams::Stream.new(stream).
|
292
|
+
IOStreams::Stream.new(stream).writer(:line) do |inner|
|
293
293
|
stream.write("Inner")
|
294
294
|
assert_equal inner.object_id, stream.object_id
|
295
295
|
end
|
@@ -300,11 +300,11 @@ class StreamTest < Minitest::Test
|
|
300
300
|
end
|
301
301
|
end
|
302
302
|
|
303
|
-
describe '#
|
303
|
+
describe '#writer(:array)' do
|
304
304
|
describe "#write" do
|
305
305
|
it 'one block' do
|
306
306
|
io = StringIO.new
|
307
|
-
IOStreams::Stream.new(io).
|
307
|
+
IOStreams::Stream.new(io).writer(:array) do |stream|
|
308
308
|
stream << %w[Hello World]
|
309
309
|
end
|
310
310
|
assert_equal "Hello,World\n", io.string
|
@@ -312,7 +312,7 @@ class StreamTest < Minitest::Test
|
|
312
312
|
|
313
313
|
it 'multiple blocks' do
|
314
314
|
io = StringIO.new
|
315
|
-
IOStreams::Stream.new(io).
|
315
|
+
IOStreams::Stream.new(io).writer(:array) do |stream|
|
316
316
|
stream << %w[He]
|
317
317
|
stream << %w[l lo\ World]
|
318
318
|
stream << ["He", "", "l", ""]
|
@@ -324,7 +324,7 @@ class StreamTest < Minitest::Test
|
|
324
324
|
it 'empty blocks' do
|
325
325
|
# skip "TODO"
|
326
326
|
io = StringIO.new
|
327
|
-
IOStreams::Stream.new(io).
|
327
|
+
IOStreams::Stream.new(io).writer(:array) do |stream|
|
328
328
|
stream << %w[He]
|
329
329
|
stream << []
|
330
330
|
stream << %w[l lo\ World]
|
@@ -337,7 +337,7 @@ class StreamTest < Minitest::Test
|
|
337
337
|
|
338
338
|
it 'nil values' do
|
339
339
|
io = StringIO.new
|
340
|
-
IOStreams::Stream.new(io).
|
340
|
+
IOStreams::Stream.new(io).writer(:array) do |stream|
|
341
341
|
stream << %w[He]
|
342
342
|
stream << %w[l lo\ World]
|
343
343
|
stream << ["He", nil, "l", nil]
|
@@ -349,7 +349,7 @@ class StreamTest < Minitest::Test
|
|
349
349
|
it 'empty leading array' do
|
350
350
|
skip "TODO"
|
351
351
|
io = StringIO.new
|
352
|
-
IOStreams::Stream.new(io).
|
352
|
+
IOStreams::Stream.new(io).writer(:array) do |stream|
|
353
353
|
stream << []
|
354
354
|
stream << %w[He]
|
355
355
|
stream << %w[l lo\ World]
|
@@ -362,11 +362,11 @@ class StreamTest < Minitest::Test
|
|
362
362
|
end
|
363
363
|
end
|
364
364
|
|
365
|
-
describe '#
|
365
|
+
describe '#writer(:hash)' do
|
366
366
|
describe "#write" do
|
367
367
|
it 'one block' do
|
368
368
|
io = StringIO.new
|
369
|
-
IOStreams::Stream.new(io).
|
369
|
+
IOStreams::Stream.new(io).writer(:hash) do |stream|
|
370
370
|
stream << {first_name: "Jack", last_name: "Johnson"}
|
371
371
|
end
|
372
372
|
assert_equal "first_name,last_name\nJack,Johnson\n", io.string, io.string.inspect
|
@@ -374,7 +374,7 @@ class StreamTest < Minitest::Test
|
|
374
374
|
|
375
375
|
it 'multiple blocks' do
|
376
376
|
io = StringIO.new
|
377
|
-
IOStreams::Stream.new(io).
|
377
|
+
IOStreams::Stream.new(io).writer(:hash) do |stream|
|
378
378
|
stream << {first_name: "Jack", last_name: "Johnson"}
|
379
379
|
stream << {first_name: "Able", last_name: "Smith"}
|
380
380
|
end
|
@@ -383,7 +383,7 @@ class StreamTest < Minitest::Test
|
|
383
383
|
|
384
384
|
it 'empty hashes' do
|
385
385
|
io = StringIO.new
|
386
|
-
IOStreams::Stream.new(io).
|
386
|
+
IOStreams::Stream.new(io).writer(:hash) do |stream|
|
387
387
|
stream << {first_name: "Jack", last_name: "Johnson"}
|
388
388
|
stream << {} << {first_name: "Able", last_name: "Smith"}
|
389
389
|
stream << {}
|
@@ -394,7 +394,7 @@ class StreamTest < Minitest::Test
|
|
394
394
|
it 'nil values' do
|
395
395
|
skip "TODO"
|
396
396
|
io = StringIO.new
|
397
|
-
IOStreams::Stream.new(io).
|
397
|
+
IOStreams::Stream.new(io).writer(:hash) do |stream|
|
398
398
|
stream << {first_name: "Jack", last_name: "Johnson"}
|
399
399
|
stream << {} << {first_name: "Able", last_name: "Smith"}
|
400
400
|
stream << {first_name: "Able", last_name: nil}
|
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: 1.0.0
|
4
|
+
version: 1.0.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:
|
11
|
+
date: 2020-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -20,6 +20,7 @@ files:
|
|
20
20
|
- LICENSE
|
21
21
|
- README.md
|
22
22
|
- Rakefile
|
23
|
+
- lib/io_streams/builder.rb
|
23
24
|
- lib/io_streams/bzip2/reader.rb
|
24
25
|
- lib/io_streams/bzip2/writer.rb
|
25
26
|
- lib/io_streams/deprecated.rb
|
@@ -46,7 +47,6 @@ files:
|
|
46
47
|
- lib/io_streams/row/reader.rb
|
47
48
|
- lib/io_streams/row/writer.rb
|
48
49
|
- lib/io_streams/stream.rb
|
49
|
-
- lib/io_streams/streams.rb
|
50
50
|
- lib/io_streams/symmetric_encryption/reader.rb
|
51
51
|
- lib/io_streams/symmetric_encryption/writer.rb
|
52
52
|
- lib/io_streams/tabular.rb
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/io_streams/zip/reader.rb
|
67
67
|
- lib/io_streams/zip/writer.rb
|
68
68
|
- lib/iostreams.rb
|
69
|
+
- test/builder_test.rb
|
69
70
|
- test/bzip2_reader_test.rb
|
70
71
|
- test/bzip2_writer_test.rb
|
71
72
|
- test/deprecated_test.rb
|
@@ -104,7 +105,6 @@ files:
|
|
104
105
|
- test/row_reader_test.rb
|
105
106
|
- test/row_writer_test.rb
|
106
107
|
- test/stream_test.rb
|
107
|
-
- test/streams_test.rb
|
108
108
|
- test/tabular_test.rb
|
109
109
|
- test/test_helper.rb
|
110
110
|
- test/utils_test.rb
|
@@ -126,17 +126,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
126
|
version: '2.3'
|
127
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: '0'
|
132
132
|
requirements: []
|
133
|
-
rubygems_version: 3.
|
133
|
+
rubygems_version: 3.1.2
|
134
134
|
signing_key:
|
135
135
|
specification_version: 4
|
136
136
|
summary: Input and Output streaming for Ruby.
|
137
137
|
test_files:
|
138
138
|
- test/pgp_reader_test.rb
|
139
139
|
- test/deprecated_test.rb
|
140
|
+
- test/builder_test.rb
|
140
141
|
- test/line_reader_test.rb
|
141
142
|
- test/xlsx_reader_test.rb
|
142
143
|
- test/minimal_file_reader.rb
|
@@ -145,7 +146,6 @@ test_files:
|
|
145
146
|
- test/bzip2_writer_test.rb
|
146
147
|
- test/encode_writer_test.rb
|
147
148
|
- test/gzip_writer_test.rb
|
148
|
-
- test/streams_test.rb
|
149
149
|
- test/stream_test.rb
|
150
150
|
- test/paths/matcher_test.rb
|
151
151
|
- test/paths/s3_test.rb
|