rubyzip 1.1.7 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubyzip might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +69 -32
- data/Rakefile +3 -4
- data/lib/zip.rb +3 -5
- data/lib/zip/central_directory.rb +7 -7
- data/lib/zip/compressor.rb +0 -0
- data/lib/zip/constants.rb +2 -2
- data/lib/zip/crypto/null_encryption.rb +3 -3
- data/lib/zip/crypto/traditional_encryption.rb +5 -5
- data/lib/zip/decompressor.rb +2 -2
- data/lib/zip/deflater.rb +8 -6
- data/lib/zip/dos_time.rb +4 -5
- data/lib/zip/entry.rb +68 -80
- data/lib/zip/entry_set.rb +11 -11
- data/lib/zip/errors.rb +1 -0
- data/lib/zip/extra_field.rb +6 -6
- data/lib/zip/extra_field/generic.rb +7 -7
- data/lib/zip/extra_field/ntfs.rb +14 -16
- data/lib/zip/extra_field/old_unix.rb +9 -10
- data/lib/zip/extra_field/universal_time.rb +14 -14
- data/lib/zip/extra_field/unix.rb +8 -9
- data/lib/zip/extra_field/zip64.rb +12 -11
- data/lib/zip/extra_field/zip64_placeholder.rb +1 -1
- data/lib/zip/file.rb +45 -49
- data/lib/zip/filesystem.rb +132 -135
- data/lib/zip/inflater.rb +3 -3
- data/lib/zip/input_stream.rb +13 -7
- data/lib/zip/ioextras.rb +1 -3
- data/lib/zip/ioextras/abstract_input_stream.rb +5 -9
- data/lib/zip/ioextras/abstract_output_stream.rb +0 -2
- data/lib/zip/null_compressor.rb +2 -2
- data/lib/zip/null_decompressor.rb +3 -3
- data/lib/zip/null_input_stream.rb +0 -0
- data/lib/zip/output_stream.rb +8 -9
- data/lib/zip/pass_thru_compressor.rb +4 -4
- data/lib/zip/pass_thru_decompressor.rb +2 -3
- data/lib/zip/streamable_directory.rb +2 -2
- data/lib/zip/streamable_stream.rb +2 -2
- data/lib/zip/version.rb +1 -1
- data/samples/example.rb +29 -39
- data/samples/example_filesystem.rb +16 -18
- data/samples/example_recursive.rb +33 -24
- data/samples/{gtkRubyzip.rb → gtk_ruby_zip.rb} +23 -25
- data/samples/qtzip.rb +17 -26
- data/samples/write_simple.rb +12 -13
- data/samples/zipfind.rb +24 -32
- data/test/basic_zip_file_test.rb +11 -15
- data/test/case_sensitivity_test.rb +69 -0
- data/test/central_directory_entry_test.rb +31 -35
- data/test/central_directory_test.rb +46 -50
- data/test/crypto/null_encryption_test.rb +2 -2
- data/test/crypto/traditional_encryption_test.rb +5 -5
- data/test/data/notzippedruby.rb +1 -1
- data/test/data/oddExtraField.zip +0 -0
- data/test/data/test.xls +0 -0
- data/test/deflater_test.rb +10 -12
- data/test/encryption_test.rb +2 -2
- data/test/entry_set_test.rb +38 -24
- data/test/entry_test.rb +76 -78
- data/test/errors_test.rb +0 -2
- data/test/extra_field_test.rb +19 -21
- data/test/file_extract_directory_test.rb +12 -14
- data/test/file_extract_test.rb +33 -40
- data/test/file_permissions_test.rb +69 -0
- data/test/file_split_test.rb +24 -27
- data/test/file_test.rb +174 -170
- data/test/filesystem/dir_iterator_test.rb +13 -17
- data/test/filesystem/directory_test.rb +80 -90
- data/test/filesystem/file_mutating_test.rb +51 -63
- data/test/filesystem/file_nonmutating_test.rb +222 -228
- data/test/filesystem/file_stat_test.rb +17 -19
- data/test/gentestfiles.rb +43 -55
- data/test/inflater_test.rb +1 -1
- data/test/input_stream_test.rb +42 -30
- data/test/ioextras/abstract_input_stream_test.rb +21 -22
- data/test/ioextras/abstract_output_stream_test.rb +32 -32
- data/test/local_entry_test.rb +35 -37
- data/test/output_stream_test.rb +20 -21
- data/test/pass_thru_compressor_test.rb +5 -6
- data/test/pass_thru_decompressor_test.rb +0 -1
- data/test/samples/example_recursive_test.rb +37 -0
- data/test/settings_test.rb +18 -15
- data/test/test_helper.rb +37 -44
- data/test/unicode_file_names_and_comments_test.rb +5 -7
- data/test/zip64_full_test.rb +9 -11
- data/test/zip64_support_test.rb +0 -1
- metadata +14 -32
data/test/settings_test.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class ZipSettingsTest < MiniTest::Test
|
4
|
-
# TODO Refactor out into common test module
|
4
|
+
# TODO: Refactor out into common test module
|
5
5
|
include CommonZipFileFixture
|
6
6
|
|
7
|
-
TEST_OUT_NAME =
|
7
|
+
TEST_OUT_NAME = 'test/data/generated/emptyOutDir'
|
8
8
|
|
9
9
|
def setup
|
10
10
|
super
|
@@ -18,27 +18,26 @@ class ZipSettingsTest < MiniTest::Test
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def open_zip(&aProc)
|
21
|
-
assert(aProc
|
21
|
+
assert(!aProc.nil?)
|
22
22
|
::Zip::File.open(TestZipFile::TEST_ZIP4.zip_name, &aProc)
|
23
23
|
end
|
24
24
|
|
25
25
|
def extract_test_dir(&aProc)
|
26
|
-
open_zip
|
27
|
-
|zf|
|
26
|
+
open_zip do |zf|
|
28
27
|
zf.extract(TestFiles::EMPTY_TEST_DIR, TEST_OUT_NAME, &aProc)
|
29
|
-
|
28
|
+
end
|
30
29
|
end
|
31
30
|
|
32
31
|
def test_true_on_exists_proc
|
33
32
|
Zip.on_exists_proc = true
|
34
|
-
File.open(TEST_OUT_NAME,
|
33
|
+
File.open(TEST_OUT_NAME, 'w') { |f| f.puts 'something' }
|
35
34
|
extract_test_dir
|
36
35
|
assert(File.directory?(TEST_OUT_NAME))
|
37
36
|
end
|
38
37
|
|
39
38
|
def test_false_on_exists_proc
|
40
39
|
Zip.on_exists_proc = false
|
41
|
-
File.open(TEST_OUT_NAME,
|
40
|
+
File.open(TEST_OUT_NAME, 'w') { |f| f.puts 'something' }
|
42
41
|
assert_raises(Zip::DestinationFileExistsError) { extract_test_dir }
|
43
42
|
end
|
44
43
|
|
@@ -47,7 +46,7 @@ class ZipSettingsTest < MiniTest::Test
|
|
47
46
|
|
48
47
|
assert_raises(::Zip::EntryExistsError) do
|
49
48
|
::Zip::File.open(TEST_ZIP.zip_name) do |zf|
|
50
|
-
zf.add(zf.entries.first.name,
|
49
|
+
zf.add(zf.entries.first.name, 'test/data/file2.txt')
|
51
50
|
end
|
52
51
|
end
|
53
52
|
end
|
@@ -59,11 +58,11 @@ class ZipSettingsTest < MiniTest::Test
|
|
59
58
|
|
60
59
|
::Zip::File.open(TEST_ZIP.zip_name) do |zf|
|
61
60
|
replacedEntry = zf.entries.first.name
|
62
|
-
zf.add(replacedEntry,
|
61
|
+
zf.add(replacedEntry, 'test/data/file2.txt')
|
63
62
|
end
|
64
63
|
|
65
64
|
::Zip::File.open(TEST_ZIP.zip_name) do |zf|
|
66
|
-
assert_contains(zf, replacedEntry,
|
65
|
+
assert_contains(zf, replacedEntry, 'test/data/file2.txt')
|
67
66
|
end
|
68
67
|
end
|
69
68
|
|
@@ -71,7 +70,9 @@ class ZipSettingsTest < MiniTest::Test
|
|
71
70
|
test_file = File.join(File.dirname(__FILE__), 'data', 'WarnInvalidDate.zip')
|
72
71
|
Zip.warn_invalid_date = false
|
73
72
|
|
74
|
-
|
73
|
+
assert_output('', '') do
|
74
|
+
::Zip::File.open(test_file) do |_zf|
|
75
|
+
end
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
@@ -79,14 +80,16 @@ class ZipSettingsTest < MiniTest::Test
|
|
79
80
|
test_file = File.join(File.dirname(__FILE__), 'data', 'WarnInvalidDate.zip')
|
80
81
|
Zip.warn_invalid_date = true
|
81
82
|
|
82
|
-
|
83
|
+
assert_output('', /Invalid date\/time in zip entry/) do
|
84
|
+
::Zip::File.open(test_file) do |_zf|
|
85
|
+
end
|
83
86
|
end
|
84
87
|
end
|
85
88
|
|
86
|
-
|
87
89
|
private
|
90
|
+
|
88
91
|
def assert_contains(zf, entryName, filename = entryName)
|
89
92
|
assert(zf.entries.detect { |e| e.name == entryName } != nil, "entry #{entryName} not in #{zf.entries.join(', ')} in zip file #{zf}")
|
90
|
-
|
93
|
+
assert_entry_contents(zf, entryName, filename) if File.exist?(filename)
|
91
94
|
end
|
92
95
|
end
|
data/test/test_helper.rb
CHANGED
@@ -9,6 +9,11 @@ require 'gentestfiles'
|
|
9
9
|
TestFiles.create_test_files
|
10
10
|
TestZipFile.create_test_zips
|
11
11
|
|
12
|
+
if defined? JRUBY_VERSION
|
13
|
+
require 'jruby'
|
14
|
+
JRuby.objectspace = true
|
15
|
+
end
|
16
|
+
|
12
17
|
::MiniTest.after_run do
|
13
18
|
FileUtils.rm_rf('test/data/generated')
|
14
19
|
end
|
@@ -21,7 +26,7 @@ module IOizeString
|
|
21
26
|
count = size unless count
|
22
27
|
retVal = slice(@tell, count)
|
23
28
|
@tell += count
|
24
|
-
|
29
|
+
retVal
|
25
30
|
end
|
26
31
|
|
27
32
|
def seek(index, offset)
|
@@ -34,12 +39,12 @@ module IOizeString
|
|
34
39
|
when IO::SEEK_CUR
|
35
40
|
newPos = @tell + index
|
36
41
|
else
|
37
|
-
raise
|
42
|
+
raise 'Error in test method IOizeString::seek'
|
38
43
|
end
|
39
|
-
if
|
44
|
+
if newPos < 0 || newPos >= size
|
40
45
|
raise Errno::EINVAL
|
41
46
|
else
|
42
|
-
@tell=newPos
|
47
|
+
@tell = newPos
|
43
48
|
end
|
44
49
|
end
|
45
50
|
|
@@ -51,7 +56,7 @@ end
|
|
51
56
|
module DecompressorTests
|
52
57
|
# expects @refText, @refLines and @decompressor
|
53
58
|
|
54
|
-
TEST_FILE =
|
59
|
+
TEST_FILE = 'test/data/file1.txt'
|
55
60
|
|
56
61
|
def setup
|
57
62
|
@refText = ''
|
@@ -59,11 +64,11 @@ module DecompressorTests
|
|
59
64
|
@refLines = @refText.split($/)
|
60
65
|
end
|
61
66
|
|
62
|
-
def
|
67
|
+
def test_read_everything
|
63
68
|
assert_equal(@refText, @decompressor.sysread)
|
64
69
|
end
|
65
70
|
|
66
|
-
def
|
71
|
+
def test_read_in_chunks
|
67
72
|
chunkSize = 5
|
68
73
|
while (decompressedChunk = @decompressor.sysread(chunkSize))
|
69
74
|
assert_equal(@refText.slice!(0, chunkSize), decompressedChunk)
|
@@ -71,22 +76,19 @@ module DecompressorTests
|
|
71
76
|
assert_equal(0, @refText.size)
|
72
77
|
end
|
73
78
|
|
74
|
-
def
|
79
|
+
def test_mixing_reads_and_produce_input
|
75
80
|
# Just some preconditions to make sure we have enough data for this test
|
76
81
|
assert(@refText.length > 1000)
|
77
82
|
assert(@refLines.length > 40)
|
78
83
|
|
79
|
-
|
80
84
|
assert_equal(@refText[0...100], @decompressor.sysread(100))
|
81
85
|
|
82
86
|
assert(!@decompressor.input_finished?)
|
83
87
|
buf = @decompressor.produce_input
|
84
|
-
assert_equal(@refText[100...(100+buf.length)], buf)
|
88
|
+
assert_equal(@refText[100...(100 + buf.length)], buf)
|
85
89
|
end
|
86
90
|
end
|
87
91
|
|
88
|
-
|
89
|
-
|
90
92
|
module AssertEntry
|
91
93
|
def assert_next_entry(filename, zis)
|
92
94
|
assert_entry(filename, zis, zis.get_next_entry.name)
|
@@ -94,33 +96,32 @@ module AssertEntry
|
|
94
96
|
|
95
97
|
def assert_entry(filename, zis, entryName)
|
96
98
|
assert_equal(filename, entryName)
|
97
|
-
|
99
|
+
assert_entry_contents_for_stream(filename, zis, entryName)
|
98
100
|
end
|
99
101
|
|
100
|
-
def
|
101
|
-
File.open(filename,
|
102
|
-
|file|
|
102
|
+
def assert_entry_contents_for_stream(filename, zis, entryName)
|
103
|
+
File.open(filename, 'rb') do |file|
|
103
104
|
expected = file.read
|
104
105
|
actual = zis.read
|
105
106
|
if (expected != actual)
|
106
|
-
if (
|
107
|
-
zipEntryFilename=entryName+
|
108
|
-
File.open(zipEntryFilename,
|
107
|
+
if (expected && actual) && (expected.length > 400 || actual.length > 400)
|
108
|
+
zipEntryFilename = entryName + '.zipEntry'
|
109
|
+
File.open(zipEntryFilename, 'wb') { |entryfile| entryfile << actual }
|
109
110
|
fail("File '#{filename}' is different from '#{zipEntryFilename}'")
|
110
111
|
else
|
111
112
|
assert_equal(expected, actual)
|
112
113
|
end
|
113
114
|
end
|
114
|
-
|
115
|
+
end
|
115
116
|
end
|
116
117
|
|
117
|
-
def
|
118
|
-
fileContents =
|
119
|
-
File.open(filename,
|
118
|
+
def self.assert_contents(filename, aString)
|
119
|
+
fileContents = ''
|
120
|
+
File.open(filename, 'rb') { |f| fileContents = f.read }
|
120
121
|
if (fileContents != aString)
|
121
|
-
if
|
122
|
-
stringFile = filename +
|
123
|
-
File.open(stringFile,
|
122
|
+
if fileContents.length > 400 || aString.length > 400
|
123
|
+
stringFile = filename + '.other'
|
124
|
+
File.open(stringFile, 'wb') { |f| f << aString }
|
124
125
|
fail("File '#{filename}' is different from contents of string stored in '#{stringFile}'")
|
125
126
|
else
|
126
127
|
assert_equal(fileContents, aString)
|
@@ -129,7 +130,7 @@ module AssertEntry
|
|
129
130
|
end
|
130
131
|
|
131
132
|
def assert_stream_contents(zis, testZipFile)
|
132
|
-
assert(zis
|
133
|
+
assert(!zis.nil?)
|
133
134
|
testZipFile.entry_names.each do |entryName|
|
134
135
|
assert_next_entry(entryName, zis)
|
135
136
|
end
|
@@ -142,27 +143,25 @@ module AssertEntry
|
|
142
143
|
end
|
143
144
|
end
|
144
145
|
|
145
|
-
def
|
146
|
+
def assert_entry_contents(zipFile, entryName, filename = entryName.to_s)
|
146
147
|
zis = zipFile.get_input_stream(entryName)
|
147
|
-
|
148
|
+
assert_entry_contents_for_stream(filename, zis, entryName)
|
148
149
|
ensure
|
149
150
|
zis.close if zis
|
150
151
|
end
|
151
152
|
end
|
152
153
|
|
153
|
-
|
154
154
|
module CrcTest
|
155
|
-
|
156
155
|
class TestOutputStream
|
157
156
|
include ::Zip::IOExtras::AbstractOutputStream
|
158
157
|
|
159
158
|
attr_accessor :buffer
|
160
159
|
|
161
160
|
def initialize
|
162
|
-
@buffer =
|
161
|
+
@buffer = ''
|
163
162
|
end
|
164
163
|
|
165
|
-
def <<
|
164
|
+
def <<(data)
|
166
165
|
@buffer << data
|
167
166
|
self
|
168
167
|
end
|
@@ -178,26 +177,23 @@ module CrcTest
|
|
178
177
|
end
|
179
178
|
end
|
180
179
|
|
181
|
-
|
182
180
|
module Enumerable
|
183
181
|
def compare_enumerables(otherEnumerable)
|
184
182
|
otherAsArray = otherEnumerable.to_a
|
185
|
-
each_with_index
|
186
|
-
|element, index|
|
183
|
+
each_with_index do |element, index|
|
187
184
|
return false unless yield(element, otherAsArray[index])
|
188
|
-
|
189
|
-
|
185
|
+
end
|
186
|
+
size == otherAsArray.size
|
190
187
|
end
|
191
188
|
end
|
192
189
|
|
193
|
-
|
194
190
|
module CommonZipFileFixture
|
195
191
|
include AssertEntry
|
196
192
|
|
197
|
-
EMPTY_FILENAME =
|
193
|
+
EMPTY_FILENAME = 'emptyZipFile.zip'
|
198
194
|
|
199
195
|
TEST_ZIP = TestZipFile::TEST_ZIP2.clone
|
200
|
-
TEST_ZIP.zip_name =
|
196
|
+
TEST_ZIP.zip_name = 'test/data/generated/5entry_copy.zip'
|
201
197
|
|
202
198
|
def setup
|
203
199
|
File.delete(EMPTY_FILENAME) if File.exist?(EMPTY_FILENAME)
|
@@ -205,9 +201,7 @@ module CommonZipFileFixture
|
|
205
201
|
end
|
206
202
|
end
|
207
203
|
|
208
|
-
|
209
204
|
module ExtraAssertions
|
210
|
-
|
211
205
|
def assert_forwarded(anObject, method, retVal, *expectedArgs)
|
212
206
|
callArgs = nil
|
213
207
|
setCallArgsProc = proc { |args| callArgs = args }
|
@@ -224,5 +218,4 @@ module ExtraAssertions
|
|
224
218
|
ensure
|
225
219
|
anObject.instance_eval "undef #{method}; alias #{method} #{method}_org"
|
226
220
|
end
|
227
|
-
|
228
221
|
end
|
@@ -3,12 +3,11 @@
|
|
3
3
|
require 'test_helper'
|
4
4
|
|
5
5
|
class ZipUnicodeFileNamesAndComments < MiniTest::Test
|
6
|
-
|
7
|
-
FILENAME = File.join(File.dirname(__FILE__), "test1.zip")
|
6
|
+
FILENAME = File.join(File.dirname(__FILE__), 'test1.zip')
|
8
7
|
|
9
8
|
def test_unicode_file_name
|
10
|
-
file_entrys = [
|
11
|
-
directory_entrys = [
|
9
|
+
file_entrys = ['текстовыйфайл.txt', 'Résumé.txt', '슬레이어스휘.txt']
|
10
|
+
directory_entrys = ['папка/текстовыйфайл.txt', 'Résumé/Résumé.txt', '슬레이어스휘/슬레이어스휘.txt']
|
12
11
|
stream = ::Zip::OutputStream.open(FILENAME) do |io|
|
13
12
|
file_entrys.each do |filename|
|
14
13
|
io.put_next_entry(filename)
|
@@ -24,13 +23,13 @@ class ZipUnicodeFileNamesAndComments < MiniTest::Test
|
|
24
23
|
file_entrys.each do |filename|
|
25
24
|
entry = io.get_next_entry
|
26
25
|
entry_name = entry.name
|
27
|
-
entry_name = entry_name.force_encoding(
|
26
|
+
entry_name = entry_name.force_encoding('UTF-8')
|
28
27
|
assert(filename == entry_name)
|
29
28
|
end
|
30
29
|
directory_entrys.each do |filepath|
|
31
30
|
entry = io.get_next_entry
|
32
31
|
entry_name = entry.name
|
33
|
-
entry_name = entry_name.force_encoding(
|
32
|
+
entry_name = entry_name.force_encoding('UTF-8')
|
34
33
|
assert(filepath == entry_name)
|
35
34
|
end
|
36
35
|
end
|
@@ -48,5 +47,4 @@ class ZipUnicodeFileNamesAndComments < MiniTest::Test
|
|
48
47
|
end
|
49
48
|
::File.unlink(FILENAME)
|
50
49
|
end
|
51
|
-
|
52
50
|
end
|
data/test/zip64_full_test.rb
CHANGED
@@ -4,32 +4,32 @@ if ENV['FULL_ZIP64_TEST']
|
|
4
4
|
require 'fileutils'
|
5
5
|
require 'zip'
|
6
6
|
|
7
|
-
# test zip64 support for real, by actually exceeding the 32-bit size/offset limits
|
8
|
-
# this test does not, of course, run with the normal unit tests! ;)
|
7
|
+
# test zip64 support for real, by actually exceeding the 32-bit size/offset limits
|
8
|
+
# this test does not, of course, run with the normal unit tests! ;)
|
9
9
|
|
10
10
|
class Zip64FullTest < MiniTest::Test
|
11
11
|
def teardown
|
12
12
|
::Zip.reset!
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
15
|
+
def prepare_test_file(test_filename)
|
16
16
|
::File.delete(test_filename) if ::File.exist?(test_filename)
|
17
|
-
|
17
|
+
test_filename
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
20
|
+
def test_large_zip_file
|
21
21
|
::Zip.write_zip64_support = true
|
22
22
|
first_text = 'starting out small'
|
23
23
|
last_text = 'this tests files starting after 4GB in the archive'
|
24
|
-
test_filename =
|
24
|
+
test_filename = prepare_test_file('huge.zip')
|
25
25
|
::Zip::OutputStream.open(test_filename) do |io|
|
26
26
|
io.put_next_entry('first_file.txt')
|
27
27
|
io.write(first_text)
|
28
28
|
|
29
29
|
# write just over 4GB (stored, so the zip file exceeds 4GB)
|
30
|
-
buf = 'blah' *
|
30
|
+
buf = 'blah' * 16_384
|
31
31
|
io.put_next_entry('huge_file', nil, nil, ::Zip::Entry::STORED)
|
32
|
-
|
32
|
+
65_537.times { io.write(buf) }
|
33
33
|
|
34
34
|
io.put_next_entry('last_file.txt')
|
35
35
|
io.write(last_text)
|
@@ -44,10 +44,8 @@ if ENV['FULL_ZIP64_TEST']
|
|
44
44
|
# note: if this fails, be sure you have UnZip version 6.0 or newer
|
45
45
|
# as this is the first version to support zip64 extensions
|
46
46
|
# but some OSes (*cough* OSX) still bundle a 5.xx release
|
47
|
-
assert system("unzip -t #{test_filename}"),
|
47
|
+
assert system("unzip -t #{test_filename}"), 'third-party zip validation failed'
|
48
48
|
end
|
49
|
-
|
50
49
|
end
|
51
50
|
|
52
51
|
end
|
53
|
-
|
data/test/zip64_support_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyzip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Simonov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -66,34 +66,6 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0.7'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: guard
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: guard-minitest
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
69
|
description:
|
98
70
|
email:
|
99
71
|
- alex@simonov.me
|
@@ -144,11 +116,12 @@ files:
|
|
144
116
|
- samples/example.rb
|
145
117
|
- samples/example_filesystem.rb
|
146
118
|
- samples/example_recursive.rb
|
147
|
-
- samples/
|
119
|
+
- samples/gtk_ruby_zip.rb
|
148
120
|
- samples/qtzip.rb
|
149
121
|
- samples/write_simple.rb
|
150
122
|
- samples/zipfind.rb
|
151
123
|
- test/basic_zip_file_test.rb
|
124
|
+
- test/case_sensitivity_test.rb
|
152
125
|
- test/central_directory_entry_test.rb
|
153
126
|
- test/central_directory_test.rb
|
154
127
|
- test/crypto/null_encryption_test.rb
|
@@ -164,8 +137,10 @@ files:
|
|
164
137
|
- test/data/mimetype
|
165
138
|
- test/data/notzippedruby.rb
|
166
139
|
- test/data/ntfs.zip
|
140
|
+
- test/data/oddExtraField.zip
|
167
141
|
- test/data/rubycode.zip
|
168
142
|
- test/data/rubycode2.zip
|
143
|
+
- test/data/test.xls
|
169
144
|
- test/data/testDirectory.bin
|
170
145
|
- test/data/zip64-sample.zip
|
171
146
|
- test/data/zipWithDirs.zip
|
@@ -178,6 +153,7 @@ files:
|
|
178
153
|
- test/extra_field_test.rb
|
179
154
|
- test/file_extract_directory_test.rb
|
180
155
|
- test/file_extract_test.rb
|
156
|
+
- test/file_permissions_test.rb
|
181
157
|
- test/file_split_test.rb
|
182
158
|
- test/file_test.rb
|
183
159
|
- test/filesystem/dir_iterator_test.rb
|
@@ -195,6 +171,7 @@ files:
|
|
195
171
|
- test/output_stream_test.rb
|
196
172
|
- test/pass_thru_compressor_test.rb
|
197
173
|
- test/pass_thru_decompressor_test.rb
|
174
|
+
- test/samples/example_recursive_test.rb
|
198
175
|
- test/settings_test.rb
|
199
176
|
- test/test_helper.rb
|
200
177
|
- test/unicode_file_names_and_comments_test.rb
|
@@ -220,12 +197,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
197
|
version: '0'
|
221
198
|
requirements: []
|
222
199
|
rubyforge_project:
|
223
|
-
rubygems_version: 2.4.
|
200
|
+
rubygems_version: 2.4.8
|
224
201
|
signing_key:
|
225
202
|
specification_version: 4
|
226
203
|
summary: rubyzip is a ruby module for reading and writing zip files
|
227
204
|
test_files:
|
228
205
|
- test/basic_zip_file_test.rb
|
206
|
+
- test/case_sensitivity_test.rb
|
229
207
|
- test/central_directory_entry_test.rb
|
230
208
|
- test/central_directory_test.rb
|
231
209
|
- test/crypto/null_encryption_test.rb
|
@@ -240,8 +218,10 @@ test_files:
|
|
240
218
|
- test/data/mimetype
|
241
219
|
- test/data/notzippedruby.rb
|
242
220
|
- test/data/ntfs.zip
|
221
|
+
- test/data/oddExtraField.zip
|
243
222
|
- test/data/rubycode.zip
|
244
223
|
- test/data/rubycode2.zip
|
224
|
+
- test/data/test.xls
|
245
225
|
- test/data/testDirectory.bin
|
246
226
|
- test/data/WarnInvalidDate.zip
|
247
227
|
- test/data/zip64-sample.zip
|
@@ -255,6 +235,7 @@ test_files:
|
|
255
235
|
- test/extra_field_test.rb
|
256
236
|
- test/file_extract_directory_test.rb
|
257
237
|
- test/file_extract_test.rb
|
238
|
+
- test/file_permissions_test.rb
|
258
239
|
- test/file_split_test.rb
|
259
240
|
- test/file_test.rb
|
260
241
|
- test/filesystem/dir_iterator_test.rb
|
@@ -272,6 +253,7 @@ test_files:
|
|
272
253
|
- test/output_stream_test.rb
|
273
254
|
- test/pass_thru_compressor_test.rb
|
274
255
|
- test/pass_thru_decompressor_test.rb
|
256
|
+
- test/samples/example_recursive_test.rb
|
275
257
|
- test/settings_test.rb
|
276
258
|
- test/test_helper.rb
|
277
259
|
- test/unicode_file_names_and_comments_test.rb
|