iostreams 1.0.0.beta7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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