rubyzip 3.0.0.alpha → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +51 -0
- data/LICENSE.md +24 -0
- data/README.md +37 -12
- data/Rakefile +1 -1
- data/lib/zip/central_directory.rb +10 -10
- data/lib/zip/constants.rb +4 -0
- data/lib/zip/crypto/decrypted_io.rb +1 -1
- data/lib/zip/crypto/null_encryption.rb +1 -1
- data/lib/zip/crypto/traditional_encryption.rb +3 -3
- data/lib/zip/dos_time.rb +11 -1
- data/lib/zip/entry.rb +74 -47
- data/lib/zip/entry_set.rb +2 -2
- data/lib/zip/errors.rb +24 -3
- data/lib/zip/extra_field/generic.rb +3 -3
- data/lib/zip/extra_field/ntfs.rb +2 -2
- data/lib/zip/extra_field.rb +2 -2
- data/lib/zip/file.rb +38 -15
- data/lib/zip/file_split.rb +1 -7
- data/lib/zip/filesystem/dir.rb +2 -2
- data/lib/zip/filesystem/zip_file_name_mapper.rb +1 -1
- data/lib/zip/filesystem.rb +1 -1
- data/lib/zip/input_stream.rb +13 -18
- data/lib/zip/ioextras/abstract_input_stream.rb +2 -2
- data/lib/zip/ioextras.rb +1 -1
- data/lib/zip/output_stream.rb +8 -8
- data/lib/zip/version.rb +1 -1
- data/lib/zip.rb +4 -3
- data/rubyzip.gemspec +16 -15
- data/samples/example_filesystem.rb +1 -1
- data/samples/write_simple.rb +1 -1
- metadata +23 -21
data/lib/zip/file.rb
CHANGED
@@ -52,8 +52,9 @@ module Zip
|
|
52
52
|
extend Forwardable
|
53
53
|
extend FileSplit
|
54
54
|
|
55
|
-
IO_METHODS = [:tell, :seek, :read, :eof, :close].freeze
|
55
|
+
IO_METHODS = [:tell, :seek, :read, :eof, :close].freeze # :nodoc:
|
56
56
|
|
57
|
+
# The name of this zip archive.
|
57
58
|
attr_reader :name
|
58
59
|
|
59
60
|
# default -> false.
|
@@ -69,28 +70,40 @@ module Zip
|
|
69
70
|
|
70
71
|
# Opens a zip archive. Pass create: true to create
|
71
72
|
# a new archive if it doesn't exist already.
|
72
|
-
def initialize(path_or_io, create: false, buffer: false,
|
73
|
+
def initialize(path_or_io, create: false, buffer: false,
|
74
|
+
restore_ownership: DEFAULT_RESTORE_OPTIONS[:restore_ownership],
|
75
|
+
restore_permissions: DEFAULT_RESTORE_OPTIONS[:restore_permissions],
|
76
|
+
restore_times: DEFAULT_RESTORE_OPTIONS[:restore_times],
|
77
|
+
compression_level: ::Zip.default_compression)
|
73
78
|
super()
|
74
|
-
|
75
|
-
.merge(compression_level: ::Zip.default_compression)
|
76
|
-
.merge(options)
|
79
|
+
|
77
80
|
@name = path_or_io.respond_to?(:path) ? path_or_io.path : path_or_io
|
78
81
|
@create = create ? true : false # allow any truthy value to mean true
|
79
82
|
|
80
83
|
initialize_cdir(path_or_io, buffer: buffer)
|
81
84
|
|
82
|
-
@restore_ownership =
|
83
|
-
@restore_permissions =
|
84
|
-
@restore_times =
|
85
|
-
@compression_level =
|
85
|
+
@restore_ownership = restore_ownership
|
86
|
+
@restore_permissions = restore_permissions
|
87
|
+
@restore_times = restore_times
|
88
|
+
@compression_level = compression_level
|
86
89
|
end
|
87
90
|
|
88
91
|
class << self
|
89
92
|
# Similar to ::new. If a block is passed the Zip::File object is passed
|
90
93
|
# to the block and is automatically closed afterwards, just as with
|
91
94
|
# ruby's builtin File::open method.
|
92
|
-
def open(file_name, create: false,
|
93
|
-
|
95
|
+
def open(file_name, create: false,
|
96
|
+
restore_ownership: DEFAULT_RESTORE_OPTIONS[:restore_ownership],
|
97
|
+
restore_permissions: DEFAULT_RESTORE_OPTIONS[:restore_permissions],
|
98
|
+
restore_times: DEFAULT_RESTORE_OPTIONS[:restore_times],
|
99
|
+
compression_level: ::Zip.default_compression)
|
100
|
+
|
101
|
+
zf = ::Zip::File.new(file_name, create: create,
|
102
|
+
restore_ownership: restore_ownership,
|
103
|
+
restore_permissions: restore_permissions,
|
104
|
+
restore_times: restore_times,
|
105
|
+
compression_level: compression_level)
|
106
|
+
|
94
107
|
return zf unless block_given?
|
95
108
|
|
96
109
|
begin
|
@@ -104,7 +117,12 @@ module Zip
|
|
104
117
|
# stream, and outputs data to a buffer.
|
105
118
|
# (This can be used to extract data from a
|
106
119
|
# downloaded zip archive without first saving it to disk.)
|
107
|
-
def open_buffer(io = ::StringIO.new, create: false,
|
120
|
+
def open_buffer(io = ::StringIO.new, create: false,
|
121
|
+
restore_ownership: DEFAULT_RESTORE_OPTIONS[:restore_ownership],
|
122
|
+
restore_permissions: DEFAULT_RESTORE_OPTIONS[:restore_permissions],
|
123
|
+
restore_times: DEFAULT_RESTORE_OPTIONS[:restore_times],
|
124
|
+
compression_level: ::Zip.default_compression)
|
125
|
+
|
108
126
|
unless IO_METHODS.map { |method| io.respond_to?(method) }.all? || io.kind_of?(String)
|
109
127
|
raise 'Zip::File.open_buffer expects a String or IO-like argument' \
|
110
128
|
"(responds to #{IO_METHODS.join(', ')}). Found: #{io.class}"
|
@@ -112,7 +130,12 @@ module Zip
|
|
112
130
|
|
113
131
|
io = ::StringIO.new(io) if io.kind_of?(::String)
|
114
132
|
|
115
|
-
zf = ::Zip::File.new(io, create: create, buffer: true,
|
133
|
+
zf = ::Zip::File.new(io, create: create, buffer: true,
|
134
|
+
restore_ownership: restore_ownership,
|
135
|
+
restore_permissions: restore_permissions,
|
136
|
+
restore_times: restore_times,
|
137
|
+
compression_level: compression_level)
|
138
|
+
|
116
139
|
return zf unless block_given?
|
117
140
|
|
118
141
|
yield zf
|
@@ -278,7 +301,7 @@ module Zip
|
|
278
301
|
|
279
302
|
# Write buffer write changes to buffer and return
|
280
303
|
def write_buffer(io = ::StringIO.new)
|
281
|
-
return unless commit_required?
|
304
|
+
return io unless commit_required?
|
282
305
|
|
283
306
|
::Zip::OutputStream.write_buffer(io) do |zos|
|
284
307
|
@cdir.each { |e| e.write_to_zip_output_stream(zos) }
|
@@ -356,7 +379,7 @@ module Zip
|
|
356
379
|
# This zip is probably a non-empty StringIO.
|
357
380
|
@create = false
|
358
381
|
@cdir.read_from_stream(path_or_io)
|
359
|
-
elsif !@create && ::File.
|
382
|
+
elsif !@create && ::File.empty?(@name)
|
360
383
|
# A file exists, but it is empty, and we've said we're
|
361
384
|
# NOT creating a new zip.
|
362
385
|
raise Error, "File #{@name} has zero size. Did you mean to pass the create flag?"
|
data/lib/zip/file_split.rb
CHANGED
@@ -7,13 +7,7 @@ module Zip
|
|
7
7
|
DATA_BUFFER_SIZE = 8192
|
8
8
|
|
9
9
|
def get_segment_size_for_split(segment_size)
|
10
|
-
|
11
|
-
MIN_SEGMENT_SIZE
|
12
|
-
elsif MAX_SEGMENT_SIZE < segment_size
|
13
|
-
MAX_SEGMENT_SIZE
|
14
|
-
else
|
15
|
-
segment_size
|
16
|
-
end
|
10
|
+
segment_size.clamp(MIN_SEGMENT_SIZE, MAX_SEGMENT_SIZE)
|
17
11
|
end
|
18
12
|
|
19
13
|
def get_partial_zip_file_name(zip_file_name, partial_zip_file_name)
|
data/lib/zip/filesystem/dir.rb
CHANGED
data/lib/zip/filesystem.rb
CHANGED
data/lib/zip/input_stream.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
##
|
3
4
|
module Zip
|
4
5
|
# InputStream is the basic class for reading zip entries in a
|
5
6
|
# zip file. It is possible to create a InputStream object directly,
|
@@ -39,9 +40,8 @@ module Zip
|
|
39
40
|
#
|
40
41
|
# java.util.zip.ZipInputStream is the original inspiration for this
|
41
42
|
# class.
|
42
|
-
|
43
43
|
class InputStream
|
44
|
-
CHUNK_SIZE = 32_768
|
44
|
+
CHUNK_SIZE = 32_768 # :nodoc:
|
45
45
|
|
46
46
|
include ::Zip::IOExtras::AbstractInputStream
|
47
47
|
|
@@ -60,6 +60,7 @@ module Zip
|
|
60
60
|
@complete_entry = nil
|
61
61
|
end
|
62
62
|
|
63
|
+
# Close this InputStream. All further IO will raise an IOError.
|
63
64
|
def close
|
64
65
|
@archive_io.close
|
65
66
|
end
|
@@ -78,7 +79,7 @@ module Zip
|
|
78
79
|
open_entry
|
79
80
|
end
|
80
81
|
|
81
|
-
# Rewinds the stream to the beginning of the current entry
|
82
|
+
# Rewinds the stream to the beginning of the current entry.
|
82
83
|
def rewind
|
83
84
|
return if @current_entry.nil?
|
84
85
|
|
@@ -114,16 +115,11 @@ module Zip
|
|
114
115
|
zio.close if zio
|
115
116
|
end
|
116
117
|
end
|
117
|
-
|
118
|
-
def open_buffer(filename_or_io, offset: 0)
|
119
|
-
warn 'open_buffer is deprecated!!! Use open instead!'
|
120
|
-
::Zip::InputStream.open(filename_or_io, offset: offset)
|
121
|
-
end
|
122
118
|
end
|
123
119
|
|
124
120
|
protected
|
125
121
|
|
126
|
-
def get_io(io_or_file, offset = 0)
|
122
|
+
def get_io(io_or_file, offset = 0) # :nodoc:
|
127
123
|
if io_or_file.respond_to?(:seek)
|
128
124
|
io = io_or_file.dup
|
129
125
|
io.seek(offset, ::IO::SEEK_SET)
|
@@ -135,7 +131,7 @@ module Zip
|
|
135
131
|
end
|
136
132
|
end
|
137
133
|
|
138
|
-
def open_entry
|
134
|
+
def open_entry # :nodoc:
|
139
135
|
@current_entry = ::Zip::Entry.read_local_entry(@archive_io)
|
140
136
|
return if @current_entry.nil?
|
141
137
|
|
@@ -144,8 +140,7 @@ module Zip
|
|
144
140
|
'A password is required to decode this zip file'
|
145
141
|
end
|
146
142
|
|
147
|
-
if @current_entry.incomplete? && @current_entry.compressed_size == 0
|
148
|
-
&& !@complete_entry
|
143
|
+
if @current_entry.incomplete? && @current_entry.compressed_size == 0 && !@complete_entry
|
149
144
|
raise StreamingError, @current_entry
|
150
145
|
end
|
151
146
|
|
@@ -155,19 +150,19 @@ module Zip
|
|
155
150
|
@current_entry
|
156
151
|
end
|
157
152
|
|
158
|
-
def get_decrypted_io
|
153
|
+
def get_decrypted_io # :nodoc:
|
159
154
|
header = @archive_io.read(@decrypter.header_bytesize)
|
160
155
|
@decrypter.reset!(header)
|
161
156
|
|
162
157
|
::Zip::DecryptedIo.new(@archive_io, @decrypter)
|
163
158
|
end
|
164
159
|
|
165
|
-
def get_decompressor
|
160
|
+
def get_decompressor # :nodoc:
|
166
161
|
return ::Zip::NullDecompressor if @current_entry.nil?
|
167
162
|
|
168
163
|
decompressed_size =
|
169
|
-
if @current_entry.incomplete? && @current_entry.crc == 0
|
170
|
-
|
164
|
+
if @current_entry.incomplete? && @current_entry.crc == 0 &&
|
165
|
+
@current_entry.size == 0 && @complete_entry
|
171
166
|
@complete_entry.size
|
172
167
|
else
|
173
168
|
@current_entry.size
|
@@ -183,11 +178,11 @@ module Zip
|
|
183
178
|
decompressor_class.new(@decrypted_io, decompressed_size)
|
184
179
|
end
|
185
180
|
|
186
|
-
def produce_input
|
181
|
+
def produce_input # :nodoc:
|
187
182
|
@decompressor.read(CHUNK_SIZE)
|
188
183
|
end
|
189
184
|
|
190
|
-
def input_finished?
|
185
|
+
def input_finished? # :nodoc:
|
191
186
|
@decompressor.eof
|
192
187
|
end
|
193
188
|
end
|
@@ -76,13 +76,13 @@ module Zip
|
|
76
76
|
a_sep_string = "#{$INPUT_RECORD_SEPARATOR}#{$INPUT_RECORD_SEPARATOR}" if a_sep_string.empty?
|
77
77
|
|
78
78
|
buffer_index = 0
|
79
|
-
over_limit =
|
79
|
+
over_limit = number_of_bytes && @output_buffer.bytesize >= number_of_bytes
|
80
80
|
while (match_index = @output_buffer.index(a_sep_string, buffer_index)).nil? && !over_limit
|
81
81
|
buffer_index = [buffer_index, @output_buffer.bytesize - a_sep_string.bytesize].max
|
82
82
|
return @output_buffer.empty? ? nil : flush if input_finished?
|
83
83
|
|
84
84
|
@output_buffer << produce_input
|
85
|
-
over_limit =
|
85
|
+
over_limit = number_of_bytes && @output_buffer.bytesize >= number_of_bytes
|
86
86
|
end
|
87
87
|
sep_index = [
|
88
88
|
match_index + a_sep_string.bytesize,
|
data/lib/zip/ioextras.rb
CHANGED
data/lib/zip/output_stream.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'forwardable'
|
4
4
|
|
5
|
+
##
|
5
6
|
module Zip
|
6
7
|
# ZipOutputStream is the basic class for writing zip files. It is
|
7
8
|
# possible to create a ZipOutputStream object directly, passing
|
@@ -20,7 +21,6 @@ module Zip
|
|
20
21
|
#
|
21
22
|
# java.util.zip.ZipOutputStream is the original inspiration for this
|
22
23
|
# class.
|
23
|
-
|
24
24
|
class OutputStream
|
25
25
|
extend Forwardable
|
26
26
|
include ::Zip::IOExtras::AbstractOutputStream
|
@@ -47,10 +47,10 @@ module Zip
|
|
47
47
|
@current_entry = nil
|
48
48
|
end
|
49
49
|
|
50
|
-
# Same as #initialize but if a block is passed the opened
|
51
|
-
# stream is passed to the block and closed when the block
|
52
|
-
# returns.
|
53
50
|
class << self
|
51
|
+
# Same as #initialize but if a block is passed the opened
|
52
|
+
# stream is passed to the block and closed when the block
|
53
|
+
# returns.
|
54
54
|
def open(file_name, encrypter: nil)
|
55
55
|
return new(file_name) unless block_given?
|
56
56
|
|
@@ -114,7 +114,7 @@ module Zip
|
|
114
114
|
@current_entry = new_entry
|
115
115
|
end
|
116
116
|
|
117
|
-
def copy_raw_entry(entry)
|
117
|
+
def copy_raw_entry(entry) # :nodoc:
|
118
118
|
entry = entry.dup
|
119
119
|
raise Error, 'zip stream is closed' if @closed
|
120
120
|
raise Error, 'entry is not a ZipEntry' unless entry.kind_of?(Entry)
|
@@ -139,8 +139,8 @@ module Zip
|
|
139
139
|
return unless @current_entry
|
140
140
|
|
141
141
|
finish
|
142
|
-
@current_entry.compressed_size = @output_stream.tell -
|
143
|
-
@current_entry.local_header_offset -
|
142
|
+
@current_entry.compressed_size = @output_stream.tell -
|
143
|
+
@current_entry.local_header_offset -
|
144
144
|
@current_entry.calculate_local_header_size
|
145
145
|
@current_entry.size = @compressor.size
|
146
146
|
@current_entry.crc = @compressor.crc
|
@@ -185,7 +185,7 @@ module Zip
|
|
185
185
|
|
186
186
|
protected
|
187
187
|
|
188
|
-
def finish
|
188
|
+
def finish # :nodoc:
|
189
189
|
@compressor.finish
|
190
190
|
end
|
191
191
|
|
data/lib/zip/version.rb
CHANGED
data/lib/zip.rb
CHANGED
@@ -57,15 +57,15 @@ module Zip
|
|
57
57
|
restore_ownership: false,
|
58
58
|
restore_permissions: true,
|
59
59
|
restore_times: true
|
60
|
-
}.freeze
|
60
|
+
}.freeze # :nodoc:
|
61
61
|
|
62
|
-
def reset!
|
62
|
+
def reset! # :nodoc:
|
63
63
|
@_ran_once = false
|
64
64
|
@unicode_names = false
|
65
65
|
@on_exists_proc = false
|
66
66
|
@continue_on_exists_proc = false
|
67
67
|
@sort_entries = false
|
68
|
-
@default_compression =
|
68
|
+
@default_compression = Zlib::DEFAULT_COMPRESSION
|
69
69
|
@write_zip64_support = true
|
70
70
|
@warn_invalid_date = true
|
71
71
|
@case_insensitive_match = false
|
@@ -73,6 +73,7 @@ module Zip
|
|
73
73
|
@validate_entry_sizes = true
|
74
74
|
end
|
75
75
|
|
76
|
+
# Set options for RubyZip in one block.
|
76
77
|
def setup
|
77
78
|
yield self unless @_ran_once
|
78
79
|
@_ran_once = true
|
data/rubyzip.gemspec
CHANGED
@@ -4,7 +4,7 @@ require_relative 'lib/zip/version'
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = 'rubyzip'
|
7
|
-
s.version =
|
7
|
+
s.version = Zip::VERSION
|
8
8
|
s.authors = ['Robert Haines', 'John Lees-Miller', 'Alexander Simonov']
|
9
9
|
s.email = [
|
10
10
|
'hainesr@gmail.com', 'jdleesmiller@gmail.com', 'alex@simonov.me'
|
@@ -13,26 +13,27 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.platform = Gem::Platform::RUBY
|
14
14
|
s.summary = 'rubyzip is a ruby module for reading and writing zip files'
|
15
15
|
s.files = Dir.glob('{samples,lib}/**/*.rb') +
|
16
|
-
%w[README.md Changelog.md Rakefile rubyzip.gemspec]
|
16
|
+
%w[LICENSE.md README.md Changelog.md Rakefile rubyzip.gemspec]
|
17
17
|
s.require_paths = ['lib']
|
18
18
|
s.license = 'BSD-2-Clause'
|
19
19
|
|
20
20
|
s.metadata = {
|
21
|
-
'bug_tracker_uri'
|
22
|
-
'changelog_uri'
|
23
|
-
'documentation_uri'
|
24
|
-
'source_code_uri'
|
25
|
-
'wiki_uri'
|
21
|
+
'bug_tracker_uri' => 'https://github.com/rubyzip/rubyzip/issues',
|
22
|
+
'changelog_uri' => "https://github.com/rubyzip/rubyzip/blob/v#{s.version}/Changelog.md",
|
23
|
+
'documentation_uri' => "https://www.rubydoc.info/gems/rubyzip/#{s.version}",
|
24
|
+
'source_code_uri' => "https://github.com/rubyzip/rubyzip/tree/v#{s.version}",
|
25
|
+
'wiki_uri' => 'https://github.com/rubyzip/rubyzip/wiki',
|
26
|
+
'rubygems_mfa_required' => 'true'
|
26
27
|
}
|
27
28
|
|
28
|
-
s.required_ruby_version = '>=
|
29
|
+
s.required_ruby_version = '>= 3.0'
|
29
30
|
|
30
|
-
s.add_development_dependency 'minitest', '~> 5.
|
31
|
-
s.add_development_dependency 'rake', '~>
|
32
|
-
s.add_development_dependency 'rdoc', '~> 6.
|
33
|
-
s.add_development_dependency 'rubocop', '~> 1.
|
34
|
-
s.add_development_dependency 'rubocop-performance', '~> 1.
|
35
|
-
s.add_development_dependency 'rubocop-rake', '~> 0.
|
36
|
-
s.add_development_dependency 'simplecov', '~> 0.
|
31
|
+
s.add_development_dependency 'minitest', '~> 5.25'
|
32
|
+
s.add_development_dependency 'rake', '~> 13.2'
|
33
|
+
s.add_development_dependency 'rdoc', '~> 6.11'
|
34
|
+
s.add_development_dependency 'rubocop', '~> 1.61.0'
|
35
|
+
s.add_development_dependency 'rubocop-performance', '~> 1.20.0'
|
36
|
+
s.add_development_dependency 'rubocop-rake', '~> 0.6.0'
|
37
|
+
s.add_development_dependency 'simplecov', '~> 0.22.0'
|
37
38
|
s.add_development_dependency 'simplecov-lcov', '~> 0.8'
|
38
39
|
end
|
@@ -7,7 +7,7 @@ require 'zip/filesystem'
|
|
7
7
|
|
8
8
|
EXAMPLE_ZIP = 'filesystem.zip'
|
9
9
|
|
10
|
-
|
10
|
+
FileUtils.rm_f(EXAMPLE_ZIP)
|
11
11
|
|
12
12
|
Zip::File.open(EXAMPLE_ZIP, create: true) do |zf|
|
13
13
|
zf.file.open('file1.txt', 'w') { |os| os.write 'first file1.txt' }
|
data/samples/write_simple.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyzip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.
|
4
|
+
version: 3.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Haines
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2025-01-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: minitest
|
@@ -18,98 +18,98 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '5.
|
21
|
+
version: '5.25'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: '5.
|
28
|
+
version: '5.25'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: rake
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
35
|
+
version: '13.2'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
42
|
+
version: '13.2'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rdoc
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 6.
|
49
|
+
version: '6.11'
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 6.
|
56
|
+
version: '6.11'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: rubocop
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 1.
|
63
|
+
version: 1.61.0
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
68
|
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: 1.
|
70
|
+
version: 1.61.0
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rubocop-performance
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - "~>"
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: 1.
|
77
|
+
version: 1.20.0
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
82
|
- - "~>"
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version: 1.
|
84
|
+
version: 1.20.0
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: rubocop-rake
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
89
|
- - "~>"
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version: 0.
|
91
|
+
version: 0.6.0
|
92
92
|
type: :development
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - "~>"
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: 0.
|
98
|
+
version: 0.6.0
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: simplecov
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
103
|
- - "~>"
|
104
104
|
- !ruby/object:Gem::Version
|
105
|
-
version: 0.
|
105
|
+
version: 0.22.0
|
106
106
|
type: :development
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
110
|
- - "~>"
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
version: 0.
|
112
|
+
version: 0.22.0
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: simplecov-lcov
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,6 +134,7 @@ extensions: []
|
|
134
134
|
extra_rdoc_files: []
|
135
135
|
files:
|
136
136
|
- Changelog.md
|
137
|
+
- LICENSE.md
|
137
138
|
- README.md
|
138
139
|
- Rakefile
|
139
140
|
- lib/zip.rb
|
@@ -194,10 +195,11 @@ licenses:
|
|
194
195
|
- BSD-2-Clause
|
195
196
|
metadata:
|
196
197
|
bug_tracker_uri: https://github.com/rubyzip/rubyzip/issues
|
197
|
-
changelog_uri: https://github.com/rubyzip/rubyzip/blob/v3.0.0.
|
198
|
-
documentation_uri: https://www.rubydoc.info/gems/rubyzip/3.0.0.
|
199
|
-
source_code_uri: https://github.com/rubyzip/rubyzip/tree/v3.0.0.
|
198
|
+
changelog_uri: https://github.com/rubyzip/rubyzip/blob/v3.0.0.rc1/Changelog.md
|
199
|
+
documentation_uri: https://www.rubydoc.info/gems/rubyzip/3.0.0.rc1
|
200
|
+
source_code_uri: https://github.com/rubyzip/rubyzip/tree/v3.0.0.rc1
|
200
201
|
wiki_uri: https://github.com/rubyzip/rubyzip/wiki
|
202
|
+
rubygems_mfa_required: 'true'
|
201
203
|
post_install_message:
|
202
204
|
rdoc_options: []
|
203
205
|
require_paths:
|
@@ -206,14 +208,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
206
208
|
requirements:
|
207
209
|
- - ">="
|
208
210
|
- !ruby/object:Gem::Version
|
209
|
-
version: '
|
211
|
+
version: '3.0'
|
210
212
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
211
213
|
requirements:
|
212
214
|
- - ">"
|
213
215
|
- !ruby/object:Gem::Version
|
214
216
|
version: 1.3.1
|
215
217
|
requirements: []
|
216
|
-
rubygems_version: 3.
|
218
|
+
rubygems_version: 3.4.1
|
217
219
|
signing_key:
|
218
220
|
specification_version: 4
|
219
221
|
summary: rubyzip is a ruby module for reading and writing zip files
|