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.
@@ -1,3 +1,3 @@
1
1
  module IOStreams
2
- VERSION = "1.0.0.beta7".freeze
2
+ VERSION = "1.0.0".freeze
3
3
  end
@@ -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 StreamsTest < Minitest::Test
4
- describe IOStreams::Streams do
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::Streams.new(file_name) }
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(:bz2)
91
+ string_io = StringIO.new(gzip_string)
92
+ streams.stream(:gz)
85
93
  streams.reader(string_io) do |io|
86
- assert io.is_a?(RBzip2::FFI::Decompressor), io
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(:bz2)
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::Streams.new('my/path/abc.xlsx')
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::Streams.new('my/path/abc.csv')
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::Streams.new
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
@@ -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
@@ -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.each_line {|line| lines << line}
103
+ existing_path.each(:line) {|line| lines << line}
104
104
  assert_equal raw.lines.collect(&:chomp), lines
105
105
  end
106
106
  end
@@ -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.each_line { |line| lines << line }
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.each_line { |line| lines << line }
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 '.each_row' do
94
+ describe '.each row' do
95
95
  end
96
96
 
97
- describe '.each_record' do
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 '#line_writer' do
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).line_writer do |stream|
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).line_writer do |stream|
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).line_writer do |stream|
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).line_writer do |stream|
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).line_writer do |stream|
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).line_writer do |stream|
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).line_writer do |stream|
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).line_writer do |stream|
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).line_writer do |stream|
290
+ IOStreams::Stream.new(io).writer(:line) do |stream|
291
291
  stream.write("Before")
292
- IOStreams::Stream.new(stream).line_writer do |inner|
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 '#row_writer' do
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).row_writer do |stream|
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).row_writer do |stream|
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).row_writer do |stream|
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).row_writer do |stream|
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).row_writer do |stream|
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 '#record_writer' do
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).record_writer do |stream|
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).record_writer do |stream|
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).record_writer do |stream|
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).record_writer do |stream|
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.beta7
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: 2019-12-09 00:00:00.000000000 Z
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: 1.3.1
131
+ version: '0'
132
132
  requirements: []
133
- rubygems_version: 3.0.6
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