bzip2-ffi 1.0.0 → 1.1.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 +5 -5
- checksums.yaml.gz.sig +1 -2
- data.tar.gz.sig +0 -0
- data/CHANGES.md +23 -2
- data/Gemfile +33 -2
- data/LICENSE +13 -13
- data/README.md +70 -61
- data/Rakefile +24 -0
- data/bzip2-ffi.gemspec +9 -0
- data/lib/bzip2/ffi.rb +9 -6
- data/lib/bzip2/ffi/error.rb +5 -2
- data/lib/bzip2/ffi/io.rb +59 -47
- data/lib/bzip2/ffi/libbz2.rb +7 -3
- data/lib/bzip2/ffi/reader.rb +204 -104
- data/lib/bzip2/ffi/version.rb +4 -1
- data/lib/bzip2/ffi/writer.rb +77 -62
- data/test/error_test.rb +19 -20
- data/test/fixtures/{bzipped → compressed.bz2} +0 -0
- data/test/fixtures/lorem-4096-bytes-compressed.txt.bz2 +0 -0
- data/test/fixtures/lorem-first-structure-4096-bytes.txt.bz2 +0 -0
- data/test/fixtures/two_structures.bz2 +0 -0
- data/test/io_test.rb +34 -32
- data/test/reader_test.rb +335 -111
- data/test/test_helper.rb +45 -8
- data/test/version_test.rb +4 -1
- data/test/writer_test.rb +95 -73
- metadata +31 -25
- metadata.gz.sig +0 -0
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.
|
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
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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
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,12 @@ 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.pos, writer.pos)
|
35
52
|
end
|
36
53
|
else
|
37
54
|
buffer = io.read
|
38
55
|
assert_equal(buffer.bytesize, writer.write(buffer))
|
56
|
+
assert_equal(io.pos, writer.pos)
|
39
57
|
end
|
40
58
|
end
|
41
59
|
|
@@ -72,8 +90,8 @@ class WriterTest < Minitest::Test
|
|
72
90
|
end
|
73
91
|
end
|
74
92
|
|
75
|
-
def bunzip_test(fixture_or_strings, options = {})
|
76
|
-
Dir.mktmpdir('bzip2-ffi-test') do |dir|
|
93
|
+
def bunzip_test(fixture_or_strings, options = {})
|
94
|
+
Dir.mktmpdir('bzip2-ffi-test') do |dir|
|
77
95
|
compressed = File.join(dir, "test.bz2")
|
78
96
|
Bzip2::FFI::Writer.open(compressed, options[:writer_options] || {}) do |writer|
|
79
97
|
if fixture_or_strings
|
@@ -88,7 +106,7 @@ class WriterTest < Minitest::Test
|
|
88
106
|
end
|
89
107
|
|
90
108
|
bunzip_and_compare(compressed, fixture_or_strings)
|
91
|
-
end
|
109
|
+
end
|
92
110
|
end
|
93
111
|
|
94
112
|
def test_initialize_nil_io
|
@@ -113,29 +131,10 @@ class WriterTest < Minitest::Test
|
|
113
131
|
bunzip_test(nil)
|
114
132
|
end
|
115
133
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
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
|
134
|
+
bunzip_fixture_tests(:text, 'lorem.txt')
|
135
|
+
bunzip_fixture_tests(:very_compressible, 'zero.txt')
|
136
|
+
bunzip_fixture_tests(:uncompressible, 'compressed.bz2')
|
137
|
+
bunzip_fixture_tests(:image, 'moon.tiff')
|
139
138
|
|
140
139
|
def test_encoding_handling
|
141
140
|
bunzip_test(['áÁçÇðÐéÉ'.encode(Encoding::UTF_8), 'áÁçÇðÐéÉ'.encode(Encoding::ISO_8859_1)])
|
@@ -148,11 +147,11 @@ class WriterTest < Minitest::Test
|
|
148
147
|
def test_block_size
|
149
148
|
sizes = [1, 9].collect do |block_size|
|
150
149
|
io = DummyIO.new
|
151
|
-
|
150
|
+
|
152
151
|
Bzip2::FFI::Writer.open(io, block_size: block_size) do |writer|
|
153
152
|
write_fixture(writer, 'lorem.txt')
|
154
153
|
end
|
155
|
-
|
154
|
+
|
156
155
|
io.written_bytes
|
157
156
|
end
|
158
157
|
|
@@ -177,11 +176,8 @@ class WriterTest < Minitest::Test
|
|
177
176
|
assert_equal(explicit_io.written_bytes, default_io.written_bytes)
|
178
177
|
end
|
179
178
|
|
180
|
-
|
181
|
-
#
|
182
|
-
# there are no failures for values within the acceptable range.
|
183
|
-
|
184
|
-
[0, 100, 250].each do |work_factor|
|
179
|
+
[0, 100, 250].each do |work_factor|
|
180
|
+
define_method("test_work_factor_#{work_factor}") do
|
185
181
|
bunzip_test('lorem.txt', writer_options: {work_factor: work_factor})
|
186
182
|
end
|
187
183
|
end
|
@@ -230,6 +226,40 @@ class WriterTest < Minitest::Test
|
|
230
226
|
assert_nil(writer.close)
|
231
227
|
end
|
232
228
|
|
229
|
+
def test_pos_returns_uncompressed_position
|
230
|
+
Bzip2::FFI::Writer.open(DummyIO.new) do |writer|
|
231
|
+
assert_equal(0, writer.pos)
|
232
|
+
writer.write('Test')
|
233
|
+
assert_equal(4, writer.pos)
|
234
|
+
writer.write('Complete')
|
235
|
+
assert_equal(12, writer.pos)
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_pos_returns_uncompressed_64bit_position
|
240
|
+
skip_slow_test_unless_enabled
|
241
|
+
|
242
|
+
# The position is read from separate 32-bit low and high words.
|
243
|
+
Bzip2::FFI::Writer.open(DummyIO.new) do |writer|
|
244
|
+
buffer_bits = 12
|
245
|
+
buffer = "\0".encode(Encoding::ASCII_8BIT) * 2**buffer_bits
|
246
|
+
|
247
|
+
(2**(32 - buffer_bits)).times do |i|
|
248
|
+
writer.write(buffer)
|
249
|
+
end
|
250
|
+
|
251
|
+
assert_equal(2**32, writer.pos)
|
252
|
+
writer.write(buffer)
|
253
|
+
assert_equal(2**32 + buffer.bytesize, writer.pos)
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
def test_pos_raises_io_error_when_closed
|
258
|
+
writer = Bzip2::FFI::Writer.new(DummyIO.new)
|
259
|
+
writer.close
|
260
|
+
assert_raises(IOError) { writer.pos }
|
261
|
+
end
|
262
|
+
|
233
263
|
def test_finalizer
|
234
264
|
# Code coverage will verify that the finalizer was called.
|
235
265
|
10.times { Bzip2::FFI::Writer.new(DummyIO.new) }
|
@@ -244,14 +274,16 @@ class WriterTest < Minitest::Test
|
|
244
274
|
assert_raises(ArgumentError) { Bzip2::FFI::Writer.open(Object.new) }
|
245
275
|
end
|
246
276
|
|
247
|
-
|
248
|
-
|
249
|
-
|
277
|
+
[0, 10].each do |block_size|
|
278
|
+
define_method("test_open_invalid_block_size_#{block_size}") do
|
279
|
+
assert_raises(RangeError) { Bzip2::FFI::Writer.open(DummyIO.new, block_size: block_size) }
|
280
|
+
end
|
250
281
|
end
|
251
282
|
|
252
|
-
|
253
|
-
|
254
|
-
|
283
|
+
[-1, 251].each do |work_factor|
|
284
|
+
define_method("test_open_invalid_work_factor_#{work_factor}") do
|
285
|
+
assert_raises(RangeError) { Bzip2::FFI::Writer.open(DummyIO.new, work_factor: work_factor) }
|
286
|
+
end
|
255
287
|
end
|
256
288
|
|
257
289
|
def test_open_block_io
|
@@ -273,42 +305,38 @@ class WriterTest < Minitest::Test
|
|
273
305
|
end
|
274
306
|
end
|
275
307
|
|
276
|
-
|
308
|
+
path_or_pathname_tests(:open_block) do |path_param|
|
277
309
|
Dir.mktmpdir('bzip2-ffi-test') do |dir|
|
278
310
|
path = File.join(dir, 'test')
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
assert_nothing_raised { io.write('test') }
|
286
|
-
end
|
311
|
+
Bzip2::FFI::Writer.open(path_param.call(path)) do |writer|
|
312
|
+
io = writer.send(:io)
|
313
|
+
assert_kind_of(File, io)
|
314
|
+
assert_equal(path, io.path)
|
315
|
+
assert_raises(IOError) { io.read(1) }
|
316
|
+
assert_nothing_raised { io.write('test') }
|
287
317
|
end
|
288
318
|
end
|
289
319
|
end
|
290
320
|
|
291
|
-
|
321
|
+
path_or_pathname_tests(:open_no_block) do |path_param|
|
292
322
|
Dir.mktmpdir('bzip2-ffi-test') do |dir|
|
293
323
|
path = File.join(dir, 'test')
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
writer.close
|
304
|
-
end
|
324
|
+
writer = Bzip2::FFI::Writer.open(path_param.call(path))
|
325
|
+
begin
|
326
|
+
io = writer.send(:io)
|
327
|
+
assert_kind_of(File, io)
|
328
|
+
assert_equal(path, io.path)
|
329
|
+
assert_raises(IOError) { io.read(1) }
|
330
|
+
assert_nothing_raised { io.write('test') }
|
331
|
+
ensure
|
332
|
+
writer.close
|
305
333
|
end
|
306
334
|
end
|
307
335
|
end
|
308
336
|
|
309
337
|
def test_open_block_path_always_autoclosed
|
310
338
|
Dir.mktmpdir('bzip2-ffi-test') do |dir|
|
311
|
-
Bzip2::FFI::Writer.open(File.join(dir, 'test'), autoclose: false) do |writer|
|
339
|
+
Bzip2::FFI::Writer.open(File.join(dir, 'test'), autoclose: false) do |writer|
|
312
340
|
assert_equal(true, writer.autoclose?)
|
313
341
|
end
|
314
342
|
end
|
@@ -405,15 +433,9 @@ class WriterTest < Minitest::Test
|
|
405
433
|
end
|
406
434
|
end
|
407
435
|
|
408
|
-
|
436
|
+
path_or_pathname_tests(:class_write) do |path_param|
|
409
437
|
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)
|
438
|
+
Bzip2::FFI::Writer.write(path_param.call(compressed), content)
|
417
439
|
end
|
418
440
|
end
|
419
441
|
|
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.
|
4
|
+
version: 1.1.0
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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:
|
32
|
+
date: 2021-02-27 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/
|
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.0
|
95
|
+
homepage_uri: https://github.com/philr/bzip2-ffi
|
96
|
+
source_code_uri: https://github.com/philr/bzip2-ffi/tree/v1.1.0
|
90
97
|
post_install_message:
|
91
98
|
rdoc_options:
|
92
99
|
- "--title"
|
@@ -109,8 +116,7 @@ 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
|
-
|
113
|
-
rubygems_version: 2.4.5
|
119
|
+
rubygems_version: 3.2.3
|
114
120
|
signing_key:
|
115
121
|
specification_version: 4
|
116
122
|
summary: Reads and writes bzip2 compressed data using FFI bindings for libbz2.
|