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.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/CHANGES.md +33 -2
- data/Gemfile +43 -2
- data/LICENSE +13 -13
- data/README.md +92 -62
- data/Rakefile +24 -0
- data/bzip2-ffi.gemspec +10 -1
- 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 +210 -104
- data/lib/bzip2/ffi/version.rb +4 -1
- data/lib/bzip2/ffi/writer.rb +81 -62
- data/lib/bzip2/ffi.rb +9 -6
- data/test/error_test.rb +19 -20
- 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 +339 -111
- data/test/test_helper.rb +45 -8
- data/test/version_test.rb +4 -1
- data/test/writer_test.rb +99 -73
- data.tar.gz.sig +0 -0
- metadata +33 -26
- metadata.gz.sig +2 -1
- /data/test/fixtures/{bzipped → compressed.bz2} +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,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
|
-
|
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
|
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
|
-
|
181
|
-
#
|
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
|
-
|
248
|
-
|
249
|
-
|
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
|
-
|
253
|
-
|
254
|
-
|
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
|
-
|
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
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
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
|
-
|
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
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
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
|
-
|
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.
|
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
|
-
|
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: 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/
|
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
|
-
|
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
|
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
|
-
|
1
|
+
҈ora�~8� w��ST�����o�;jۇ���}Jgj0%d���C0E�1��6���0ak>��3AUA�݀���$S��yY GU~��B�d�;s*�Uv<3B(��z?����T����ak29�����pH?����>�!���FE�o94����D.���u8
|
2
|
+
�H�33����|�ʚ����@�*'�o��ɤR��]o����I+��vO_+��u�"��8"�G3��q�Ȃn��\#h�]����,Y�kh�
|
File without changes
|