iostreams 1.9.0 → 1.10.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 410a7bdcec2ee16f130bbb7010bfd2258975253c1bd380c1832f034ae18b2979
4
- data.tar.gz: 6f8e7bd896166b10a77477a95a0eae88b742a117525d48c10fd23952fa37faa7
3
+ metadata.gz: 30ace4685022c88754654b2b48d1c86185e47841f1d3c6a3916bc348098b178d
4
+ data.tar.gz: 040c669d7ad4521941a3752dc405390c4f7dda98a583cc0f5d923091e12bd452
5
5
  SHA512:
6
- metadata.gz: 85a53eae7c90affdfcd577836d83533d75eff5eb8e880352c6890d4805c219b91e99fc1d936cc72829dbe93d6b8ea55585cc0a2b3a1c8886ab2b261e7c078cb7
7
- data.tar.gz: 5bd17a2bae394ca10a84f659fe1e0aac8315ab393cfe11e4606b3b0e4ca901d121c2b0aeae91cf6dac0f1939fec039fac21036a5c8382abe382f5d705bf519ad
6
+ metadata.gz: 90f2635d2e443fe4c4f3992d8f92a725118b2f52c0d4861ee1d778be8f145d93c2f0663904f8cf699b33106a154d13980634881a0039c7e0ad6389d137d69760
7
+ data.tar.gz: 970da1fd8e3b6ea7e1b36dad476c7f842413c2b8b50dc2939802b1962c00347bcdfa6a135245550c9cb639b694e9ca2c16439bde1afe7677701f3867cdc277e4
@@ -2,9 +2,9 @@ module IOStreams
2
2
  module Gzip
3
3
  class Reader < IOStreams::Reader
4
4
  # Read from a gzip stream, decompressing the contents as it is read
5
- def self.stream(input_stream, original_file_name: nil, &block)
5
+ def self.stream(input_stream, original_file_name: nil)
6
6
  io = ::Zlib::GzipReader.new(input_stream)
7
- block.call(io)
7
+ yield io
8
8
  ensure
9
9
  io&.close
10
10
  end
@@ -146,8 +146,8 @@ module IOStreams
146
146
  data
147
147
  end
148
148
 
149
- # Returns [Integer] the number of characters read into the internal buffer
150
- # Returns 0 on EOF
149
+ # Returns whether more data is available to read
150
+ # Returns false on EOF
151
151
  def read_block
152
152
  return false if @eof
153
153
 
@@ -157,7 +157,8 @@ module IOStreams
157
157
  @input_stream.read(@buffer_size, @read_cache_buffer)
158
158
  rescue ArgumentError
159
159
  # Handle arity of -1 when just 0..1
160
- @read_cache_buffer = nil
160
+ @read_cache_buffer = nil
161
+ @use_read_cache_buffer = false
161
162
  @input_stream.read(@buffer_size)
162
163
  end
163
164
  else
@@ -89,6 +89,11 @@ module IOStreams
89
89
  # "**.rb" "lib/song.rb" true
90
90
  # "*" "dave/.profile" true
91
91
  def each_child(pattern = "*", case_sensitive: false, directories: false, hidden: false)
92
+ unless block_given?
93
+ return to_enum(__method__, pattern,
94
+ case_sensitive: case_sensitive, directories: directories, hidden: hidden)
95
+ end
96
+
92
97
  flags = 0
93
98
  flags |= ::File::FNM_CASEFOLD unless case_sensitive
94
99
  flags |= ::File::FNM_DOTMATCH if hidden
@@ -284,6 +284,11 @@ module IOStreams
284
284
  # Notes:
285
285
  # - Currently all S3 lookups are recursive as of the pattern regardless of whether the pattern includes `**`.
286
286
  def each_child(pattern = "*", case_sensitive: false, directories: false, hidden: false)
287
+ unless block_given?
288
+ return to_enum(__method__, pattern,
289
+ case_sensitive: case_sensitive, directories: directories, hidden: hidden)
290
+ end
291
+
287
292
  matcher = Matcher.new(self, pattern, case_sensitive: case_sensitive, hidden: hidden)
288
293
 
289
294
  # When the pattern includes an exact file name without any pattern characters
@@ -142,6 +142,11 @@ module IOStreams
142
142
  # sftp://sftp.example.org/a/b/c/test.txt {:type=>1, :size=>37, :owner=>"test_owner", :group=>"test_group",
143
143
  # :permissions=>420, :atime=>1572378136, :mtime=>1572378136, :link_count=>1, :extended=>{}}
144
144
  def each_child(pattern = "*", case_sensitive: true, directories: false, hidden: false)
145
+ unless block_given?
146
+ return to_enum(__method__, pattern,
147
+ case_sensitive: case_sensitive, directories: directories, hidden: hidden)
148
+ end
149
+
145
150
  Utils.load_soft_dependency("net-sftp", "SFTP glob capability", "net/sftp") unless defined?(Net::SFTP)
146
151
 
147
152
  flags = ::File::FNM_EXTGLOB
@@ -89,10 +89,11 @@ module IOStreams
89
89
 
90
90
  IOStreams::Pgp.logger&.debug { "IOStreams::Pgp::Writer.open: #{command}" }
91
91
 
92
+ result = nil
92
93
  Open3.popen2e(command) do |stdin, out, waith_thr|
93
94
  begin
94
95
  stdin.binmode
95
- yield(stdin)
96
+ result = yield(stdin)
96
97
  stdin.close
97
98
  rescue Errno::EPIPE
98
99
  # Ignore broken pipe because gpg terminates early due to an error
@@ -104,6 +105,7 @@ module IOStreams
104
105
  raise(Pgp::Failure, "GPG Failed to create encrypted file: #{file_name}: #{out.read.chomp}")
105
106
  end
106
107
  end
108
+ result
107
109
  end
108
110
  end
109
111
  end
@@ -148,14 +148,14 @@ module IOStreams
148
148
 
149
149
  def initialize(size:, key: nil, type: :string, decimals: 2)
150
150
  @key = key
151
- @size = size == :remainder ? -1 : size.to_i
151
+ @size = (size == :remainder || size == "remainder") ? -1 : size.to_i
152
152
  @type = type.to_sym
153
153
  @decimals = decimals
154
154
 
155
155
  unless @size.positive? || (@size == -1)
156
156
  raise(Errors::InvalidLayout, "Size #{size.inspect} must be positive or :remainder")
157
157
  end
158
- raise(Errors::InvalidLayout, "Unknown type: #{type.inspect}") unless TYPES.include?(type)
158
+ raise(Errors::InvalidLayout, "Unknown type: #{type.inspect}") unless TYPES.include?(@type)
159
159
  end
160
160
 
161
161
  def parse(value)
@@ -1,3 +1,3 @@
1
1
  module IOStreams
2
- VERSION = "1.9.0".freeze
2
+ VERSION = "1.10.3".freeze
3
3
  end
@@ -4,8 +4,9 @@ module IOStreams
4
4
  # and then pass that filename in for this reader.
5
5
  def self.stream(output_stream, original_file_name: nil, **args, &block)
6
6
  Utils.temp_file_name("iostreams_writer") do |file_name|
7
- file(file_name, original_file_name: original_file_name, **args, &block)
7
+ count = file(file_name, original_file_name: original_file_name, **args, &block)
8
8
  ::File.open(file_name, "rb") { |source| ::IO.copy_stream(source, output_stream) }
9
+ count
9
10
  end
10
11
  end
11
12
 
@@ -14,7 +14,7 @@ module IOStreams
14
14
  # Name of the file entry within the Zip file.
15
15
  #
16
16
  # The stream supplied to the block only responds to #write
17
- def self.stream(output_stream, original_file_name: nil, zip_file_name: nil, entry_file_name: zip_file_name, &block)
17
+ def self.stream(output_stream, original_file_name: nil, zip_file_name: nil, entry_file_name: zip_file_name)
18
18
  # Default the name of the file within the zip to the supplied file_name without the zip extension
19
19
  if entry_file_name.nil? && original_file_name && (original_file_name =~ /\.(zip)\z/i)
20
20
  entry_file_name = original_file_name.to_s[0..-5]
@@ -23,7 +23,11 @@ module IOStreams
23
23
 
24
24
  Utils.load_soft_dependency("zip_tricks", "Zip") unless defined?(ZipTricks::Streamer)
25
25
 
26
- ZipTricks::Streamer.open(output_stream) { |zip| zip.write_deflated_file(entry_file_name, &block) }
26
+ result = nil
27
+ ZipTricks::Streamer.open(output_stream) do |zip|
28
+ zip.write_deflated_file(entry_file_name) { |io| result = yield(io) }
29
+ end
30
+ result
27
31
  end
28
32
  end
29
33
  end
@@ -20,10 +20,13 @@ class Bzip2WriterTest < Minitest::Test
20
20
 
21
21
  describe ".file" do
22
22
  it "file" do
23
- IOStreams::Bzip2::Writer.file(file_name) do |io|
24
- io.write(decompressed)
25
- io.write(decompressed)
26
- end
23
+ result =
24
+ IOStreams::Bzip2::Writer.file(file_name) do |io|
25
+ io.write(decompressed)
26
+ io.write(decompressed)
27
+ 53534
28
+ end
29
+ assert_equal 53534, result
27
30
 
28
31
  File.open(file_name, "rb") do |file|
29
32
  io = ::Bzip2::FFI::Reader.new(file)
@@ -35,10 +38,13 @@ class Bzip2WriterTest < Minitest::Test
35
38
 
36
39
  it "stream" do
37
40
  io_string = StringIO.new("".b)
38
- IOStreams::Bzip2::Writer.stream(io_string) do |io|
39
- io.write(decompressed)
40
- io.write(decompressed)
41
- end
41
+ result =
42
+ IOStreams::Bzip2::Writer.stream(io_string) do |io|
43
+ io.write(decompressed)
44
+ io.write(decompressed)
45
+ 53534
46
+ end
47
+ assert_equal 53534, result
42
48
 
43
49
  io = StringIO.new(io_string.string)
44
50
  rbzip2 = ::Bzip2::FFI::Reader.new(io)
@@ -22,18 +22,24 @@ class EncodeWriterTest < Minitest::Test
22
22
  it "file" do
23
23
  temp_file = Tempfile.new("rocket_job")
24
24
  file_name = temp_file.to_path
25
- IOStreams::Encode::Writer.file(file_name, encoding: "ASCII-8BIT") do |io|
26
- io << bad_data
27
- end
25
+ result =
26
+ IOStreams::Encode::Writer.file(file_name, encoding: "ASCII-8BIT") do |io|
27
+ io << bad_data
28
+ 53534
29
+ end
30
+ assert_equal 53534, result
28
31
  result = File.read(file_name, mode: "rb")
29
32
  assert_equal bad_data, result
30
33
  end
31
34
 
32
35
  it "stream" do
33
- io = StringIO.new("".b)
34
- IOStreams::Encode::Writer.stream(io, encoding: "ASCII-8BIT") do |encoded|
35
- encoded << bad_data
36
- end
36
+ io = StringIO.new("".b)
37
+ result =
38
+ IOStreams::Encode::Writer.stream(io, encoding: "ASCII-8BIT") do |encoded|
39
+ encoded << bad_data
40
+ 53534
41
+ end
42
+ assert_equal 53534, result
37
43
  assert_equal "ASCII-8BIT", io.string.encoding.to_s
38
44
  assert_equal bad_data, io.string
39
45
  end
@@ -70,9 +76,12 @@ class EncodeWriterTest < Minitest::Test
70
76
  it "returns byte count" do
71
77
  io_string = StringIO.new("".b)
72
78
  count = 0
73
- IOStreams::Encode::Writer.stream(io_string, encoding: "ASCII-8BIT") do |io|
74
- count += io.write(bad_data)
75
- end
79
+ result =
80
+ IOStreams::Encode::Writer.stream(io_string, encoding: "ASCII-8BIT") do |io|
81
+ count += io.write(bad_data)
82
+ 53534
83
+ end
84
+ assert_equal 53534, result
76
85
  assert_equal bad_data, io_string.string
77
86
  assert_equal bad_data.size, count
78
87
  end
Binary file
@@ -20,9 +20,13 @@ class GzipWriterTest < Minitest::Test
20
20
 
21
21
  describe ".file" do
22
22
  it "file" do
23
- IOStreams::Gzip::Writer.file(file_name) do |io|
24
- io.write(decompressed)
25
- end
23
+ result =
24
+ IOStreams::Gzip::Writer.file(file_name) do |io|
25
+ io.write(decompressed)
26
+ 53534
27
+ end
28
+ assert_equal 53534, result
29
+
26
30
  result = Zlib::GzipReader.open(file_name, &:read)
27
31
  temp_file.delete
28
32
  assert_equal decompressed, result
@@ -30,11 +34,15 @@ class GzipWriterTest < Minitest::Test
30
34
 
31
35
  it "stream" do
32
36
  io_string = StringIO.new("".b)
33
- IOStreams::Gzip::Writer.stream(io_string) do |io|
34
- io.write(decompressed)
35
- end
36
- io = StringIO.new(io_string.string)
37
- gz = Zlib::GzipReader.new(io)
37
+ result =
38
+ IOStreams::Gzip::Writer.stream(io_string) do |io|
39
+ io.write(decompressed)
40
+ 53534
41
+ end
42
+ assert_equal 53534, result
43
+
44
+ io = StringIO.new(io_string.string)
45
+ gz = Zlib::GzipReader.new(io)
38
46
  data = gz.read
39
47
  gz.close
40
48
  assert_equal decompressed, data
@@ -18,18 +18,25 @@ class DelimitedWriterTest < Minitest::Test
18
18
  it "file" do
19
19
  temp_file = Tempfile.new("rocket_job")
20
20
  file_name = temp_file.to_path
21
- IOStreams::Line::Writer.file(file_name) do |io|
22
- lines.each { |line| io << line }
23
- end
21
+ result =
22
+ IOStreams::Line::Writer.file(file_name) do |io|
23
+ lines.each { |line| io << line }
24
+ 53534
25
+ end
26
+ assert_equal 53534, result
27
+
24
28
  result = File.read(file_name)
25
29
  assert_equal raw, result
26
30
  end
27
31
 
28
32
  it "stream" do
29
33
  io_string = StringIO.new
30
- IOStreams::Line::Writer.stream(io_string) do |io|
31
- lines.each { |line| io << line }
32
- end
34
+ result =
35
+ IOStreams::Line::Writer.stream(io_string) do |io|
36
+ lines.each { |line| io << line }
37
+ 53534
38
+ end
39
+ assert_equal 53534, result
33
40
  assert_equal raw, io_string.string
34
41
  end
35
42
  end
@@ -38,9 +45,12 @@ class DelimitedWriterTest < Minitest::Test
38
45
  it "returns byte count" do
39
46
  io_string = StringIO.new
40
47
  count = 0
41
- IOStreams::Line::Writer.stream(io_string) do |io|
42
- lines.each { |line| count += io.write(line) }
43
- end
48
+ result =
49
+ IOStreams::Line::Writer.stream(io_string) do |io|
50
+ lines.each { |line| count += io.write(line) }
51
+ 53534
52
+ end
53
+ assert_equal 53534, result
44
54
  assert_equal raw, io_string.string
45
55
  assert_equal raw.size, count
46
56
  end
@@ -5,7 +5,7 @@ module Paths
5
5
  describe IOStreams::Paths::File do
6
6
  let(:root) { IOStreams::Paths::File.new("/tmp/iostreams").delete_all }
7
7
  let(:directory) { root.join("/some_test_dir") }
8
- let(:data) { "Hello World" }
8
+ let(:data) { "Hello World\nHow are you doing?\nOn this fine day" }
9
9
  let(:file_path) do
10
10
  path = root.join("some_test_dir/test_file.txt")
11
11
  path.writer { |io| io << data }
@@ -17,6 +17,15 @@ module Paths
17
17
  path
18
18
  end
19
19
 
20
+ describe "#each" do
21
+ it "reads lines" do
22
+ records = []
23
+ count = file_path.each { |line| records << line }
24
+ assert_equal count, data.lines.size
25
+ assert_equal data.lines.collect(&:strip), records
26
+ end
27
+ end
28
+
20
29
  describe "#each_child" do
21
30
  it "iterates an empty path" do
22
31
  none = nil
@@ -48,6 +57,12 @@ module Paths
48
57
  actual = root.children("**/Test*.TXT", case_sensitive: true).collect(&:to_s)
49
58
  refute_equal expected, actual.sort
50
59
  end
60
+
61
+ it "with no block returns enumerator" do
62
+ expected = [file_path.to_s, file_path2.to_s]
63
+ actual = root.each_child("**/*").first(100).collect(&:to_s)
64
+ assert_equal expected.sort, actual.sort
65
+ end
51
66
  end
52
67
 
53
68
  describe "#mkpath" do
@@ -21,9 +21,12 @@ class PgpWriterTest < Minitest::Test
21
21
 
22
22
  describe ".file" do
23
23
  it "writes encrypted text file" do
24
- IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org") do |io|
25
- io.write(decrypted)
26
- end
24
+ result =
25
+ IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org") do |io|
26
+ io.write(decrypted)
27
+ 53534
28
+ end
29
+ assert_equal 53534, result
27
30
 
28
31
  result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
29
32
  assert_equal decrypted, result
@@ -34,9 +37,12 @@ class PgpWriterTest < Minitest::Test
34
37
  binary_data = File.open(binary_file_name, "rb", &:read)
35
38
 
36
39
  File.open(binary_file_name, "rb") do |input|
37
- IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org") do |output|
38
- IO.copy_stream(input, output)
39
- end
40
+ result =
41
+ IOStreams::Pgp::Writer.file(file_name, recipient: "receiver@example.org") do |output|
42
+ IO.copy_stream(input, output)
43
+ 53534
44
+ end
45
+ assert_equal 53534, result
40
46
  end
41
47
 
42
48
  result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
@@ -108,9 +114,12 @@ class PgpWriterTest < Minitest::Test
108
114
 
109
115
  it "writes to a stream" do
110
116
  io_string = StringIO.new("".b)
111
- IOStreams::Pgp::Writer.stream(io_string, recipient: "receiver@example.org", signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
112
- io.write(decrypted)
113
- end
117
+ result =
118
+ IOStreams::Pgp::Writer.stream(io_string, recipient: "receiver@example.org", signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
119
+ io.write(decrypted)
120
+ 53534
121
+ end
122
+ assert_equal 53534, result
114
123
 
115
124
  io = StringIO.new(io_string.string)
116
125
  result = IOStreams::Pgp::Reader.stream(io, passphrase: "receiver_passphrase", &:read)
@@ -43,28 +43,38 @@ class RecordWriterTest < Minitest::Test
43
43
 
44
44
  describe "#<<" do
45
45
  it "file" do
46
- IOStreams::Record::Writer.file(file_name) do |io|
47
- inputs.each { |hash| io << hash }
48
- end
46
+ result =
47
+ IOStreams::Record::Writer.file(file_name) do |io|
48
+ inputs.each { |hash| io << hash }
49
+ 53534
50
+ end
51
+ assert_equal 53534, result
49
52
  result = File.read(file_name)
50
53
  assert_equal raw_csv_data, result
51
54
  end
52
55
 
53
56
  it "json file" do
54
- IOStreams::Record::Writer.file(file_name, file_name: "abc.json") do |io|
55
- inputs.each { |hash| io << hash }
56
- end
57
+ result =
58
+ IOStreams::Record::Writer.file(file_name, file_name: "abc.json") do |io|
59
+ inputs.each { |hash| io << hash }
60
+ 53534
61
+ end
62
+ assert_equal 53534, result
63
+
57
64
  result = File.read(file_name)
58
65
  assert_equal raw_json_data, result
59
66
  end
60
67
 
61
68
  it "stream" do
62
69
  io_string = StringIO.new
63
- IOStreams::Line::Writer.stream(io_string) do |io|
64
- IOStreams::Record::Writer.stream(io) do |stream|
65
- inputs.each { |row| stream << row }
70
+ result =
71
+ IOStreams::Line::Writer.stream(io_string) do |io|
72
+ IOStreams::Record::Writer.stream(io) do |stream|
73
+ inputs.each { |row| stream << row }
74
+ 53534
75
+ end
66
76
  end
67
- end
77
+ assert_equal 53534, result
68
78
  assert_equal raw_csv_data, io_string.string
69
79
  end
70
80
  end
@@ -10,7 +10,7 @@ class RowReaderTest < Minitest::Test
10
10
  CSV.read(file_name)
11
11
  end
12
12
 
13
- describe ".open" do
13
+ describe "#each" do
14
14
  it "file" do
15
15
  rows = []
16
16
  count = IOStreams::Row::Reader.file(file_name) do |io|
@@ -29,20 +29,26 @@ class RowWriterTest < Minitest::Test
29
29
 
30
30
  describe ".stream" do
31
31
  it "file" do
32
- IOStreams::Row::Writer.file(file_name) do |io|
33
- csv_rows.each { |array| io << array }
34
- end
32
+ result =
33
+ IOStreams::Row::Writer.file(file_name) do |io|
34
+ csv_rows.each { |array| io << array }
35
+ 53534
36
+ end
37
+ assert_equal 53534, result
35
38
  result = ::File.read(file_name)
36
39
  assert_equal raw_csv_data, result
37
40
  end
38
41
 
39
42
  it "streams" do
40
43
  io_string = StringIO.new
41
- IOStreams::Line::Writer.stream(io_string) do |io|
42
- IOStreams::Row::Writer.stream(io) do |stream|
43
- csv_rows.each { |array| stream << array }
44
+ result =
45
+ IOStreams::Line::Writer.stream(io_string) do |io|
46
+ IOStreams::Row::Writer.stream(io) do |stream|
47
+ csv_rows.each { |array| stream << array }
48
+ 53534
49
+ end
44
50
  end
45
- end
51
+ assert_equal 53534, result
46
52
  assert_equal raw_csv_data, io_string.string
47
53
  end
48
54
  end
data/test/tabular_test.rb CHANGED
@@ -40,6 +40,19 @@ class TabularTest < Minitest::Test
40
40
  IOStreams::Tabular.new(format: :fixed, format_options: {layout: layout})
41
41
  end
42
42
 
43
+ let :fixed_with_strings do
44
+ layout = [
45
+ {size: "23", key: "name"},
46
+ {size: 40, key: "address"},
47
+ {size: 2},
48
+ {size: 5.0, key: "zip", type: "integer"},
49
+ {size: "8", key: "age", type: "integer"},
50
+ {size: 10, key: "weight", type: "float", decimals: 2},
51
+ {size: "remainder", key: "remainder"}
52
+ ]
53
+ IOStreams::Tabular.new(format: :fixed, format_options: {layout: layout})
54
+ end
55
+
43
56
  describe "#parse_header" do
44
57
  it "parses and sets the csv header" do
45
58
  tabular = IOStreams::Tabular.new(format: :csv)
@@ -269,6 +282,11 @@ class TabularTest < Minitest::Test
269
282
  assert_equal "Jack over there 34618000000210123456.79", string
270
283
  end
271
284
 
285
+ it "renders fixed data with string keys" do
286
+ assert string = fixed_with_strings.render("name" => "Jack", "address" => "over there", "zip" => 34_618, "weight" => 123_456.789123, "age" => 21)
287
+ assert_equal "Jack over there 34618000000210123456.79", string
288
+ end
289
+
272
290
  it "truncates long strings" do
273
291
  assert string = fixed.render(name: "Jack ran up the beanstalk and when jack reached the top it was truncated", address: "over there", zip: 34_618)
274
292
  assert_equal "Jack ran up the beanstaover there 34618000000000000000.00", string
@@ -21,19 +21,25 @@ class ZipWriterTest < Minitest::Test
21
21
 
22
22
  describe ".file" do
23
23
  it "file" do
24
- IOStreams::Zip::Writer.file(file_name, entry_file_name: "text.txt") do |io|
25
- io.write(decompressed)
26
- end
24
+ result =
25
+ IOStreams::Zip::Writer.file(file_name, entry_file_name: "text.txt") do |io|
26
+ io.write(decompressed)
27
+ 53534
28
+ end
29
+ assert_equal 53534, result
27
30
  result = IOStreams::Zip::Reader.file(file_name, &:read)
28
31
  assert_equal decompressed, result
29
32
  end
30
33
 
31
34
  it "stream" do
32
35
  io_string = StringIO.new("".b)
33
- IOStreams::Zip::Writer.stream(io_string) do |io|
34
- io.write(decompressed)
35
- end
36
- io = StringIO.new(io_string.string)
36
+ result =
37
+ IOStreams::Zip::Writer.stream(io_string) do |io|
38
+ io.write(decompressed)
39
+ 53534
40
+ end
41
+ assert_equal 53534, result
42
+ io = StringIO.new(io_string.string)
37
43
  result = IOStreams::Zip::Reader.stream(io, &:read)
38
44
  assert_equal decompressed, result
39
45
  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: 1.9.0
4
+ version: 1.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-17 00:00:00.000000000 Z
11
+ date: 2021-10-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -87,6 +87,7 @@ files:
87
87
  - test/files/unclosed_quote_large_test.csv
88
88
  - test/files/unclosed_quote_test.csv
89
89
  - test/files/unclosed_quote_test2.csv
90
+ - test/files/utf16_test.csv
90
91
  - test/gzip_reader_test.rb
91
92
  - test/gzip_writer_test.rb
92
93
  - test/io_streams_test.rb
@@ -159,6 +160,7 @@ test_files:
159
160
  - test/files/unclosed_quote_large_test.csv
160
161
  - test/files/unclosed_quote_test.csv
161
162
  - test/files/unclosed_quote_test2.csv
163
+ - test/files/utf16_test.csv
162
164
  - test/gzip_reader_test.rb
163
165
  - test/gzip_writer_test.rb
164
166
  - test/io_streams_test.rb