bzip2-ffi 1.0.0 → 1.1.1

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.
data/test/test_helper.rb CHANGED
@@ -1,8 +1,11 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
1
4
  unless RUBY_ENGINE == 'jruby'
2
5
  require 'simplecov'
3
6
  require 'coveralls'
4
7
 
5
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
8
+ SimpleCov.formatters = [
6
9
  SimpleCov::Formatter::HTMLFormatter,
7
10
  Coveralls::SimpleCov::Formatter
8
11
  ]
@@ -17,6 +20,7 @@ require 'bzip2/ffi'
17
20
  require 'fileutils'
18
21
  require 'minitest/autorun'
19
22
  require 'open3'
23
+ require 'pathname'
20
24
 
21
25
  class Bzip2::FFI::IO
22
26
  class << self
@@ -61,6 +65,10 @@ module TestHelper
61
65
  end
62
66
  end
63
67
 
68
+ def skip_slow_test_unless_enabled
69
+ skip('Skipping slow test (enable with RUN_SLOW_TESTS=1)') unless ENV['RUN_SLOW_TESTS'] == '1'
70
+ end
71
+
64
72
  private
65
73
 
66
74
  if File::ALT_SEPARATOR
@@ -74,25 +82,54 @@ module TestHelper
74
82
  end
75
83
 
76
84
  def assert_bzip2_command_successful(*arguments)
77
- out, err, status = Open3.capture3(*(['bzip2'] + arguments))
78
-
79
- args_string = arguments.collect {|a| "'#{a}'" }.join(' ')
80
- assert(err == '', "`bzip2 #{args_string}` returned error: #{err}")
81
- assert(out == '', "`bzip2 #{args_string}` returned output: #{out}")
82
- assert(status.exitstatus == 0, "`bzip2 #{args_string}` exit status was non-zero")
85
+ command_with_arguments = ['bzip2'] + arguments
86
+ begin
87
+ out, err, status = Open3.capture3(*command_with_arguments)
88
+
89
+ args_string = arguments.collect {|a| "'#{a}'" }.join(' ')
90
+ assert(err == '', "`bzip2 #{args_string}` returned error: #{err}")
91
+ assert(out == '', "`bzip2 #{args_string}` returned output: #{out}")
92
+
93
+ # Ruby 1.9.3 on Windows intermittently returns a nil status. Assume that
94
+ # the process completed successfully.
95
+ if status
96
+ assert(status.exitstatus == 0, "`bzip2 #{args_string}` exit status was non-zero")
97
+ else
98
+ puts "`#{command_with_arguments.join(' ')}`: command status was nil, assuming successful"
99
+ end
100
+ rescue Errno::EBADF => e
101
+ # JRuby 1.7 intermittently reports a bad file descriptor when closing
102
+ # one of the input or output streams. Assume that the process completed
103
+ # successfully.
104
+ puts "`#{command_with_arguments.join(' ')}`: Open3.capture3 raised Errno::EBADF, assuming successful"
105
+ puts e.inspect
106
+ puts e.backtrace.join("\n")
107
+ end
83
108
  end
84
109
  end
85
110
 
86
111
  module Fixtures
87
112
  FIXTURES_DIR = File.join(BASE_DIR, 'fixtures')
88
-
113
+
89
114
  def fixture_path(fixture)
90
115
  File.join(FIXTURES_DIR, fixture)
91
116
  end
92
117
  end
118
+
119
+ module TestDefinitions
120
+ def path_or_pathname_tests(name, &block)
121
+ [['path', Proc.new {|p| p }], ['pathname', Proc.new {|p| Pathname.new(p) }]].each do |(description, path_param)|
122
+ define_method("test_#{name}_with_#{description}") do
123
+ instance_exec(path_param, &block)
124
+ end
125
+ end
126
+ end
127
+ end
93
128
  end
94
129
 
95
130
  class Minitest::Test
96
131
  include TestHelper::Assertions
97
132
  include TestHelper::Fixtures
133
+ extend TestHelper::Fixtures
134
+ extend TestHelper::TestDefinitions
98
135
  end
data/test/version_test.rb CHANGED
@@ -1,4 +1,7 @@
1
- require 'test_helper'
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ require_relative 'test_helper'
2
5
 
3
6
  class VersionTest < Minitest::Test
4
7
  def test_version
data/test/writer_test.rb CHANGED
@@ -1,22 +1,38 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
 
3
- require 'pathname'
4
- require 'test_helper'
5
4
  require 'tmpdir'
5
+ require_relative 'test_helper'
6
6
 
7
7
  class WriterTest < Minitest::Test
8
8
  class DummyIO
9
9
  attr_reader :written_bytes
10
-
10
+
11
11
  def initialize
12
12
  @written_bytes = 0
13
13
  end
14
-
14
+
15
15
  def write(string)
16
16
  @written_bytes += string.bytesize
17
17
  end
18
18
  end
19
19
 
20
+ class << self
21
+ def read_size_combinations(fixture)
22
+ [16, 1024, 16384, File.size(fixture_path(fixture)), nil].each do |read_size|
23
+ yield read_size, "#{read_size ? "_with_read_size_#{read_size}" : ''}"
24
+ end
25
+ end
26
+
27
+ def bunzip_fixture_tests(name, fixture)
28
+ read_size_combinations(fixture) do |read_size, description|
29
+ define_method("test_fixture_#{name}#{description}") do
30
+ bunzip_test(fixture, read_size: read_size)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
20
36
  def setup
21
37
  Bzip2::FFI::Writer.test_after_open_file_raise_exception = false
22
38
  end
@@ -32,10 +48,14 @@ class WriterTest < Minitest::Test
32
48
  buffer = io.read(read_size)
33
49
  break unless buffer
34
50
  assert_equal(buffer.bytesize, writer.write(buffer))
51
+ assert_equal(io.tell, writer.tell)
52
+ assert_equal(io.pos, writer.pos)
35
53
  end
36
54
  else
37
55
  buffer = io.read
38
56
  assert_equal(buffer.bytesize, writer.write(buffer))
57
+ assert_equal(io.tell, writer.tell)
58
+ assert_equal(io.pos, writer.pos)
39
59
  end
40
60
  end
41
61
 
@@ -72,8 +92,8 @@ class WriterTest < Minitest::Test
72
92
  end
73
93
  end
74
94
 
75
- def bunzip_test(fixture_or_strings, options = {})
76
- Dir.mktmpdir('bzip2-ffi-test') do |dir|
95
+ def bunzip_test(fixture_or_strings, options = {})
96
+ Dir.mktmpdir('bzip2-ffi-test') do |dir|
77
97
  compressed = File.join(dir, "test.bz2")
78
98
  Bzip2::FFI::Writer.open(compressed, options[:writer_options] || {}) do |writer|
79
99
  if fixture_or_strings
@@ -88,7 +108,7 @@ class WriterTest < Minitest::Test
88
108
  end
89
109
 
90
110
  bunzip_and_compare(compressed, fixture_or_strings)
91
- end
111
+ end
92
112
  end
93
113
 
94
114
  def test_initialize_nil_io
@@ -113,29 +133,10 @@ class WriterTest < Minitest::Test
113
133
  bunzip_test(nil)
114
134
  end
115
135
 
116
- def test_fixture_text
117
- [16, 1024, 16384, nil].each do |read_size|
118
- bunzip_test('lorem.txt', read_size: read_size)
119
- end
120
- end
121
-
122
- def test_fixture_very_compressible
123
- [16, 1024, 16384, nil].each do |read_size|
124
- bunzip_test('zero.txt', read_size: read_size)
125
- end
126
- end
127
-
128
- def test_fixture_uncompressible
129
- [16, 1024, 16384, nil].each do |read_size|
130
- bunzip_test('bzipped', read_size: read_size)
131
- end
132
- end
133
-
134
- def test_fixture_image
135
- [16, 1024, 16384, nil].each do |read_size|
136
- bunzip_test('moon.tiff', read_size: read_size)
137
- end
138
- end
136
+ bunzip_fixture_tests(:text, 'lorem.txt')
137
+ bunzip_fixture_tests(:very_compressible, 'zero.txt')
138
+ bunzip_fixture_tests(:uncompressible, 'compressed.bz2')
139
+ bunzip_fixture_tests(:image, 'moon.tiff')
139
140
 
140
141
  def test_encoding_handling
141
142
  bunzip_test(['áÁçÇðÐéÉ'.encode(Encoding::UTF_8), 'áÁçÇðÐéÉ'.encode(Encoding::ISO_8859_1)])
@@ -148,11 +149,11 @@ class WriterTest < Minitest::Test
148
149
  def test_block_size
149
150
  sizes = [1, 9].collect do |block_size|
150
151
  io = DummyIO.new
151
-
152
+
152
153
  Bzip2::FFI::Writer.open(io, block_size: block_size) do |writer|
153
154
  write_fixture(writer, 'lorem.txt')
154
155
  end
155
-
156
+
156
157
  io.written_bytes
157
158
  end
158
159
 
@@ -177,11 +178,8 @@ class WriterTest < Minitest::Test
177
178
  assert_equal(explicit_io.written_bytes, default_io.written_bytes)
178
179
  end
179
180
 
180
- def test_work_factor
181
- # Not trivial to check if the value passed has any effect. Just check that
182
- # there are no failures for values within the acceptable range.
183
-
184
- [0, 100, 250].each do |work_factor|
181
+ [0, 100, 250].each do |work_factor|
182
+ define_method("test_work_factor_#{work_factor}") do
185
183
  bunzip_test('lorem.txt', writer_options: {work_factor: work_factor})
186
184
  end
187
185
  end
@@ -230,6 +228,42 @@ class WriterTest < Minitest::Test
230
228
  assert_nil(writer.close)
231
229
  end
232
230
 
231
+ [:tell, :pos].each do |method|
232
+ define_method("test_#{method}_returns_uncompressed_position") do
233
+ Bzip2::FFI::Writer.open(DummyIO.new) do |writer|
234
+ assert_equal(0, writer.public_send(method))
235
+ writer.write('Test')
236
+ assert_equal(4, writer.public_send(method))
237
+ writer.write('Complete')
238
+ assert_equal(12, writer.public_send(method))
239
+ end
240
+ end
241
+
242
+ define_method("test_#{method}_returns_uncompressed_64bit_position") do
243
+ skip_slow_test_unless_enabled
244
+
245
+ # The position is read from separate 32-bit low and high words.
246
+ Bzip2::FFI::Writer.open(DummyIO.new) do |writer|
247
+ buffer_bits = 12
248
+ buffer = "\0".encode(Encoding::ASCII_8BIT) * 2**buffer_bits
249
+
250
+ (2**(32 - buffer_bits)).times do |i|
251
+ writer.write(buffer)
252
+ end
253
+
254
+ assert_equal(2**32, writer.public_send(method))
255
+ writer.write(buffer)
256
+ assert_equal(2**32 + buffer.bytesize, writer.public_send(method))
257
+ end
258
+ end
259
+
260
+ define_method("test_#{method}_raises_io_error_when_closed") do
261
+ writer = Bzip2::FFI::Writer.new(DummyIO.new)
262
+ writer.close
263
+ assert_raises(IOError) { writer.public_send(method) }
264
+ end
265
+ end
266
+
233
267
  def test_finalizer
234
268
  # Code coverage will verify that the finalizer was called.
235
269
  10.times { Bzip2::FFI::Writer.new(DummyIO.new) }
@@ -244,14 +278,16 @@ class WriterTest < Minitest::Test
244
278
  assert_raises(ArgumentError) { Bzip2::FFI::Writer.open(Object.new) }
245
279
  end
246
280
 
247
- def test_open_invalid_block_size
248
- assert_raises(RangeError) { Bzip2::FFI::Writer.open(DummyIO.new, block_size: 0) }
249
- assert_raises(RangeError) { Bzip2::FFI::Writer.open(DummyIO.new, block_size: 10) }
281
+ [0, 10].each do |block_size|
282
+ define_method("test_open_invalid_block_size_#{block_size}") do
283
+ assert_raises(RangeError) { Bzip2::FFI::Writer.open(DummyIO.new, block_size: block_size) }
284
+ end
250
285
  end
251
286
 
252
- def test_open_invalid_work_factor
253
- assert_raises(RangeError) { Bzip2::FFI::Writer.open(DummyIO.new, work_factor: -1) }
254
- assert_raises(RangeError) { Bzip2::FFI::Writer.open(DummyIO.new, work_factor: 251) }
287
+ [-1, 251].each do |work_factor|
288
+ define_method("test_open_invalid_work_factor_#{work_factor}") do
289
+ assert_raises(RangeError) { Bzip2::FFI::Writer.open(DummyIO.new, work_factor: work_factor) }
290
+ end
255
291
  end
256
292
 
257
293
  def test_open_block_io
@@ -273,42 +309,38 @@ class WriterTest < Minitest::Test
273
309
  end
274
310
  end
275
311
 
276
- def test_open_block_path
312
+ path_or_pathname_tests(:open_block) do |path_param|
277
313
  Dir.mktmpdir('bzip2-ffi-test') do |dir|
278
314
  path = File.join(dir, 'test')
279
- [path, Pathname.new(path)].each do |path_param|
280
- Bzip2::FFI::Writer.open(path_param) do |writer|
281
- io = writer.send(:io)
282
- assert_kind_of(File, io)
283
- assert_equal(path, io.path)
284
- assert_raises(IOError) { io.read(1) }
285
- assert_nothing_raised { io.write('test') }
286
- end
315
+ Bzip2::FFI::Writer.open(path_param.call(path)) do |writer|
316
+ io = writer.send(:io)
317
+ assert_kind_of(File, io)
318
+ assert_equal(path, io.path)
319
+ assert_raises(IOError) { io.read(1) }
320
+ assert_nothing_raised { io.write('test') }
287
321
  end
288
322
  end
289
323
  end
290
324
 
291
- def test_open_no_block_path
325
+ path_or_pathname_tests(:open_no_block) do |path_param|
292
326
  Dir.mktmpdir('bzip2-ffi-test') do |dir|
293
327
  path = File.join(dir, 'test')
294
- [path, Pathname.new(path)].each do |path_param|
295
- writer = Bzip2::FFI::Writer.open(path_param)
296
- begin
297
- io = writer.send(:io)
298
- assert_kind_of(File, io)
299
- assert_equal(path, io.path)
300
- assert_raises(IOError) { io.read(1) }
301
- assert_nothing_raised { io.write('test') }
302
- ensure
303
- writer.close
304
- end
328
+ writer = Bzip2::FFI::Writer.open(path_param.call(path))
329
+ begin
330
+ io = writer.send(:io)
331
+ assert_kind_of(File, io)
332
+ assert_equal(path, io.path)
333
+ assert_raises(IOError) { io.read(1) }
334
+ assert_nothing_raised { io.write('test') }
335
+ ensure
336
+ writer.close
305
337
  end
306
338
  end
307
339
  end
308
340
 
309
341
  def test_open_block_path_always_autoclosed
310
342
  Dir.mktmpdir('bzip2-ffi-test') do |dir|
311
- Bzip2::FFI::Writer.open(File.join(dir, 'test'), autoclose: false) do |writer|
343
+ Bzip2::FFI::Writer.open(File.join(dir, 'test'), autoclose: false) do |writer|
312
344
  assert_equal(true, writer.autoclose?)
313
345
  end
314
346
  end
@@ -405,15 +437,9 @@ class WriterTest < Minitest::Test
405
437
  end
406
438
  end
407
439
 
408
- def test_class_write_path
440
+ path_or_pathname_tests(:class_write) do |path_param|
409
441
  class_write_test('test_path') do |compressed, content|
410
- Bzip2::FFI::Writer.write(compressed, content)
411
- end
412
- end
413
-
414
- def test_class_write_pathname
415
- class_write_test('test_pathname') do |compressed, content|
416
- Bzip2::FFI::Writer.write(Pathname.new(compressed), content)
442
+ Bzip2::FFI::Writer.write(path_param.call(compressed), content)
417
443
  end
418
444
  end
419
445
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bzip2-ffi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philip Ross
@@ -10,27 +10,26 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDdDCCAlygAwIBAgIBATANBgkqhkiG9w0BAQUFADBAMRIwEAYDVQQDDAlwaGls
14
- LnJvc3MxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
15
- bTAeFw0xNDA5MjgxOTA4MDdaFw0xNTA5MjgxOTA4MDdaMEAxEjAQBgNVBAMMCXBo
16
- aWwucm9zczEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYD
17
- Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkZzB+qfhmyY+XRvU
18
- u310LMTGsTkR4/8JFCMF0YeQX6ZKmLr1fKzF3At1+DlI+v0t/G2FS6Dic0V3l8MK
19
- JczyFh72NANOaQhAo0GHh8WkaeCf2DLL5K6YJeLpvkvp39oxzn00A4zosnzxM50f
20
- Xrjx2HmurcJQurzafeCDj67QccaNE+5H+mcIVAJlsA1h1f5QFZ3SqQ4mf8St40pE
21
- 6YR4ev/Eq6Hb8aUoUq30otxbeHAEHh8cdVhTNFq7sPWb0psQRF2D/+o0MLgHt8PY
22
- EUm49szlLsnjVXAMCHU7wH9CmDR/5Lzcrgqh3DgyI8ay6DnlSQ213eYZH/Nkn1Yz
23
- TcNLCQIDAQABo3kwdzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU
24
- D5nzO9/MG4B6ygch/Pv6PF9Q5x8wHgYDVR0RBBcwFYETcGhpbC5yb3NzQGdtYWls
25
- LmNvbTAeBgNVHRIEFzAVgRNwaGlsLnJvc3NAZ21haWwuY29tMA0GCSqGSIb3DQEB
26
- BQUAA4IBAQCI4Ucln0W425HOc2mIaXkAiHWNs1Fv/rCPrBIwBYhjStVYUEPCIhEf
27
- MRCqpeOog3+b31SMIqqHQcNnjY9/YHeJCQ5vsRyN/A7+nafQ+PjI+E5HIl5Bd8Hk
28
- nbizkcvM/qE8w2IWuadTRzGzeBolzVp4gl/GLP9wT1H+cTjC7zCjgbxnwM7zLnxA
29
- F4XcKGArAMYd8GgHUTVwMsYP4XkM3CGWtuk8pmgCo2CKZA4PDrWYiuo+vtwFsgYJ
30
- hKe67BDNyG4DxJTu6tP979ZXanCYEDWmxJMSm4Ih9tObHryZc6xp1SsM4jPR6Mbt
31
- OWpW9iGQHkfCktjw+bYdDKVK8c0WU5PN
13
+ MIIDPDCCAiSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAkMSIwIAYDVQQDDBlwaGls
14
+ LnJvc3MvREM9Z21haWwvREM9Y29tMB4XDTE5MTIyNDE0NTU0N1oXDTM5MTIyNDE0
15
+ NTU0N1owJDEiMCAGA1UEAwwZcGhpbC5yb3NzL0RDPWdtYWlsL0RDPWNvbTCCASIw
16
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJGcwfqn4ZsmPl0b1Lt9dCzExrE5
17
+ EeP/CRQjBdGHkF+mSpi69XysxdwLdfg5SPr9LfxthUug4nNFd5fDCiXM8hYe9jQD
18
+ TmkIQKNBh4fFpGngn9gyy+SumCXi6b5L6d/aMc59NAOM6LJ88TOdH1648dh5rq3C
19
+ ULq82n3gg4+u0HHGjRPuR/pnCFQCZbANYdX+UBWd0qkOJn/EreNKROmEeHr/xKuh
20
+ 2/GlKFKt9KLcW3hwBB4fHHVYUzRau7D1m9KbEERdg//qNDC4B7fD2BFJuPbM5S7J
21
+ 41VwDAh1O8B/Qpg0f+S83K4Kodw4MiPGsug55UkNtd3mGR/zZJ9WM03DSwkCAwEA
22
+ AaN5MHcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFA+Z8zvfzBuA
23
+ esoHIfz7+jxfUOcfMB4GA1UdEQQXMBWBE3BoaWwucm9zc0BnbWFpbC5jb20wHgYD
24
+ VR0SBBcwFYETcGhpbC5yb3NzQGdtYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEA
25
+ J80xgZ3gGdQVA8N+8NJANU5HLuZIU9jOaAlziU9ImoTgPiOHKGZC4as1TwT4kBt1
26
+ Qcnu7YSANYRrxP5tpOHsWPF/MQYgerAFCZS5+PzOTudwZ+7OsMW4/EMHy6aCVHEd
27
+ c7HzQRC4mSrDRpWxzyBnZ5nX5OAmIkKA8NgeKybT/4Ku6iFPPUQwlyxQaO+Wlxdo
28
+ FqHwpjRyoiVSpe4RUTNK3d3qesWPYi7Lxn6k6ZZeEdvG6ya33AXktE3jmmF+jPR1
29
+ J3Zn/kSTjTekiaspyGbczC3PUaeJNxr+yCvR4sk71Xmk/GaKKGOHedJ1uj/LAXrA
30
+ MR0mpl7b8zCg0PFC1J73uw==
32
31
  -----END CERTIFICATE-----
33
- date: 2015-02-28 00:00:00.000000000 Z
32
+ date: 2023-07-08 00:00:00.000000000 Z
34
33
  dependencies:
35
34
  - !ruby/object:Gem::Dependency
36
35
  name: ffi
@@ -74,9 +73,12 @@ files:
74
73
  - lib/bzip2/ffi/version.rb
75
74
  - lib/bzip2/ffi/writer.rb
76
75
  - test/error_test.rb
77
- - test/fixtures/bzipped
76
+ - test/fixtures/compressed.bz2
77
+ - test/fixtures/lorem-4096-bytes-compressed.txt.bz2
78
+ - test/fixtures/lorem-first-structure-4096-bytes.txt.bz2
78
79
  - test/fixtures/lorem.txt
79
80
  - test/fixtures/moon.tiff
81
+ - test/fixtures/two_structures.bz2
80
82
  - test/fixtures/zero.txt
81
83
  - test/io_test.rb
82
84
  - test/reader_test.rb
@@ -86,7 +88,12 @@ files:
86
88
  homepage: https://github.com/philr/bzip2-ffi
87
89
  licenses:
88
90
  - MIT
89
- metadata: {}
91
+ metadata:
92
+ bug_tracker_uri: https://github.com/philr/bzip2-ffi/issues
93
+ changelog_uri: https://github.com/philr/bzip2-ffi/blob/master/CHANGES.md
94
+ documentation_uri: https://rubydoc.info/gems/bzip2-ffi/1.1.1
95
+ homepage_uri: https://github.com/philr/bzip2-ffi
96
+ source_code_uri: https://github.com/philr/bzip2-ffi/tree/v1.1.1
90
97
  post_install_message:
91
98
  rdoc_options:
92
99
  - "--title"
@@ -109,9 +116,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
116
  version: '0'
110
117
  requirements:
111
118
  - libbz2.(so|dll|dylib) available on the library search path
112
- rubyforge_project:
113
- rubygems_version: 2.4.5
119
+ rubygems_version: 3.4.9
114
120
  signing_key:
115
121
  specification_version: 4
116
- summary: Reads and writes bzip2 compressed data using FFI bindings for libbz2.
122
+ summary: Reads and writes bzip2 compressed data as a stream using FFI bindings for
123
+ libbz2.
117
124
  test_files: []
metadata.gz.sig CHANGED
@@ -1 +1,2 @@
1
- $��fC���Qa*FQ�=Ms��k����^��@c�*:�]LN9�!᯿l9�A�����"Q�wJ�)ZC����VE/zM�u!��93�5O��ց�2���v�o��~M��$��olP�x��}�� �92�0�~�<�BO+�zN�Na��x>��\m��]m�)e�D��!8��:�G�wt����6�t��(g^�e�t��#��j���!�~a���_�Ɏ�|X�2��,,#ٜ_'��"��g���5jУ���_��
1
+ ҈ora�~8 w��ST�����o�;jۇ���}Jgj0%d���C0E1��6���0ak>��3AUA�݀���$S��yY GU~��B�d�;s*�Uv<3B(��z?����T����ak29�����pH?����>�!���FE�o94����D.���u8
2
+ �H�3 3����|�ʚ����@�*'�o��ɤR��]o����I+��vO_+��u�"��8"�G3��q�Ȃn��\#h�]����,Y�kh�
File without changes