rubyzip 2.1.0 → 3.6.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 +4 -4
- data/Changelog.md +538 -0
- data/LICENSE.md +24 -0
- data/README.md +235 -48
- data/Rakefile +17 -12
- data/lib/rubyzip.rb +3 -0
- data/lib/zip/central_directory.rb +196 -123
- data/lib/zip/compressor.rb +3 -1
- data/lib/zip/constants.rb +81 -21
- data/lib/zip/crypto/aes_encryption.rb +123 -0
- data/lib/zip/crypto/decrypted_io.rb +52 -0
- data/lib/zip/crypto/encryption.rb +4 -2
- data/lib/zip/crypto/null_encryption.rb +5 -13
- data/lib/zip/crypto/traditional_encryption.rb +22 -16
- data/lib/zip/decompressor.rb +21 -2
- data/lib/zip/deflater.rb +12 -8
- data/lib/zip/dirtyable.rb +32 -0
- data/lib/zip/dos_time.rb +79 -14
- data/lib/zip/entry.rb +430 -249
- data/lib/zip/entry_set.rb +13 -9
- data/lib/zip/errors.rb +152 -15
- data/lib/zip/extra_field/aes.rb +50 -0
- data/lib/zip/extra_field/generic.rb +17 -17
- data/lib/zip/extra_field/ntfs.rb +10 -4
- data/lib/zip/extra_field/old_unix.rb +8 -4
- data/lib/zip/extra_field/universal_time.rb +6 -1
- data/lib/zip/extra_field/unix.rb +9 -5
- data/lib/zip/extra_field/unknown.rb +35 -0
- data/lib/zip/extra_field/zip64.rb +23 -7
- data/lib/zip/extra_field.rb +31 -27
- data/lib/zip/file.rb +211 -241
- data/lib/zip/file_split.rb +91 -0
- data/lib/zip/filesystem/dir.rb +86 -0
- data/lib/zip/filesystem/directory_iterator.rb +48 -0
- data/lib/zip/filesystem/file.rb +263 -0
- data/lib/zip/filesystem/file_stat.rb +110 -0
- data/lib/zip/filesystem/zip_file_name_mapper.rb +81 -0
- data/lib/zip/filesystem.rb +32 -585
- data/lib/zip/inflater.rb +28 -37
- data/lib/zip/input_stream.rb +113 -54
- data/lib/zip/ioextras/abstract_input_stream.rb +154 -55
- data/lib/zip/ioextras/abstract_output_stream.rb +13 -3
- data/lib/zip/ioextras.rb +12 -9
- data/lib/zip/null_compressor.rb +3 -1
- data/lib/zip/null_decompressor.rb +7 -12
- data/lib/zip/null_input_stream.rb +3 -1
- data/lib/zip/output_stream.rb +76 -51
- data/lib/zip/pass_thru_compressor.rb +5 -3
- data/lib/zip/pass_thru_decompressor.rb +17 -23
- data/lib/zip/streamable_directory.rb +6 -4
- data/lib/zip/streamable_stream.rb +9 -5
- data/lib/zip/version.rb +4 -1
- data/lib/zip.rb +31 -5
- data/rubyzip.gemspec +39 -0
- data/samples/example.rb +9 -4
- data/samples/example_filesystem.rb +4 -3
- data/samples/example_recursive.rb +3 -1
- data/samples/gtk_ruby_zip.rb +23 -21
- data/samples/qtzip.rb +13 -12
- data/samples/write_simple.rb +3 -4
- data/samples/zipfind.rb +24 -22
- metadata +84 -28
- data/TODO +0 -15
- data/lib/zip/extra_field/zip64_placeholder.rb +0 -15
data/samples/gtk_ruby_zip.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
$LOAD_PATH << '../lib'
|
|
4
5
|
|
|
5
6
|
$VERBOSE = true
|
|
6
7
|
|
|
@@ -9,7 +10,7 @@ require 'zip'
|
|
|
9
10
|
|
|
10
11
|
class MainApp < Gtk::Window
|
|
11
12
|
def initialize
|
|
12
|
-
super
|
|
13
|
+
super
|
|
13
14
|
set_usize(400, 256)
|
|
14
15
|
set_title('rubyzip')
|
|
15
16
|
signal_connect(Gtk::Window::SIGNAL_DESTROY) { Gtk.main_quit }
|
|
@@ -18,14 +19,14 @@ class MainApp < Gtk::Window
|
|
|
18
19
|
add(box)
|
|
19
20
|
|
|
20
21
|
@zipfile = nil
|
|
21
|
-
@
|
|
22
|
-
@
|
|
22
|
+
@button_panel = ButtonPanel.new
|
|
23
|
+
@button_panel.open_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
|
|
23
24
|
show_file_selector
|
|
24
25
|
end
|
|
25
|
-
@
|
|
26
|
+
@button_panel.extract_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
|
|
26
27
|
puts 'Not implemented!'
|
|
27
28
|
end
|
|
28
|
-
box.pack_start(@
|
|
29
|
+
box.pack_start(@button_panel, false, false, 0)
|
|
29
30
|
|
|
30
31
|
sw = Gtk::ScrolledWindow.new
|
|
31
32
|
sw.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
|
|
@@ -42,27 +43,28 @@ class MainApp < Gtk::Window
|
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
class ButtonPanel < Gtk::HButtonBox
|
|
45
|
-
attr_reader :
|
|
46
|
+
attr_reader :extract_button, :open_button
|
|
47
|
+
|
|
46
48
|
def initialize
|
|
47
49
|
super
|
|
48
50
|
set_layout(Gtk::BUTTONBOX_START)
|
|
49
51
|
set_spacing(0)
|
|
50
|
-
@
|
|
51
|
-
@
|
|
52
|
-
pack_start(@
|
|
53
|
-
pack_start(@
|
|
52
|
+
@open_button = Gtk::Button.new('Open archive')
|
|
53
|
+
@extract_button = Gtk::Button.new('Extract entry')
|
|
54
|
+
pack_start(@open_button)
|
|
55
|
+
pack_start(@extract_button)
|
|
54
56
|
end
|
|
55
57
|
end
|
|
56
58
|
|
|
57
59
|
def show_file_selector
|
|
58
|
-
@
|
|
59
|
-
@
|
|
60
|
-
@
|
|
61
|
-
open_zip(@
|
|
62
|
-
@
|
|
60
|
+
@file_selector = Gtk::FileSelection.new('Open zip file')
|
|
61
|
+
@file_selector.show
|
|
62
|
+
@file_selector.ok_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
|
|
63
|
+
open_zip(@file_selector.filename)
|
|
64
|
+
@file_selector.destroy
|
|
63
65
|
end
|
|
64
|
-
@
|
|
65
|
-
@
|
|
66
|
+
@file_selector.cancel_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
|
|
67
|
+
@file_selector.destroy
|
|
66
68
|
end
|
|
67
69
|
end
|
|
68
70
|
|
|
@@ -72,13 +74,13 @@ class MainApp < Gtk::Window
|
|
|
72
74
|
@zipfile.each do |entry|
|
|
73
75
|
@clist.append([entry.name,
|
|
74
76
|
entry.size.to_s,
|
|
75
|
-
|
|
77
|
+
"#{100.0 * entry.compressedSize / entry.size}%"])
|
|
76
78
|
end
|
|
77
79
|
end
|
|
78
80
|
end
|
|
79
81
|
|
|
80
|
-
|
|
82
|
+
main_app = MainApp.new
|
|
81
83
|
|
|
82
|
-
|
|
84
|
+
main_app.show_all
|
|
83
85
|
|
|
84
86
|
Gtk.main
|
data/samples/qtzip.rb
CHANGED
|
@@ -1,31 +1,32 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
$VERBOSE = true
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
$LOAD_PATH << '../lib'
|
|
6
7
|
|
|
7
8
|
require 'Qt'
|
|
8
9
|
system('rbuic -o zipdialogui.rb zipdialogui.ui')
|
|
9
|
-
require 'zipdialogui
|
|
10
|
+
require 'zipdialogui'
|
|
10
11
|
require 'zip'
|
|
11
12
|
|
|
12
13
|
a = Qt::Application.new(ARGV)
|
|
13
14
|
|
|
14
15
|
class ZipDialog < ZipDialogUI
|
|
15
16
|
def initialize
|
|
16
|
-
super
|
|
17
|
+
super
|
|
17
18
|
connect(child('add_button'), SIGNAL('clicked()'),
|
|
18
19
|
self, SLOT('add_files()'))
|
|
19
20
|
connect(child('extract_button'), SIGNAL('clicked()'),
|
|
20
21
|
self, SLOT('extract_files()'))
|
|
21
22
|
end
|
|
22
23
|
|
|
23
|
-
def zipfile(&
|
|
24
|
-
Zip::File.open(@zip_filename, &
|
|
24
|
+
def zipfile(&a_proc)
|
|
25
|
+
Zip::File.open(@zip_filename, &a_proc)
|
|
25
26
|
end
|
|
26
27
|
|
|
27
|
-
def each(&
|
|
28
|
-
Zip::File.foreach(@zip_filename, &
|
|
28
|
+
def each(&a_proc)
|
|
29
|
+
Zip::File.foreach(@zip_filename, &a_proc)
|
|
29
30
|
end
|
|
30
31
|
|
|
31
32
|
def refresh
|
|
@@ -65,14 +66,14 @@ class ZipDialog < ZipDialogUI
|
|
|
65
66
|
end
|
|
66
67
|
puts "selected_items.size = #{selected_items.size}"
|
|
67
68
|
puts "unselected_items.size = #{unselected_items.size}"
|
|
68
|
-
items =
|
|
69
|
+
items = selected_items.empty? ? unselected_items : selected_items
|
|
69
70
|
puts "items.size = #{items.size}"
|
|
70
71
|
|
|
71
72
|
d = Qt::FileDialog.get_existing_directory(nil, self)
|
|
72
|
-
if
|
|
73
|
-
puts 'No directory chosen'
|
|
74
|
-
else
|
|
73
|
+
if d
|
|
75
74
|
zipfile { |zf| items.each { |e| zf.extract(e, File.join(d, e)) } }
|
|
75
|
+
else
|
|
76
|
+
puts 'No directory chosen'
|
|
76
77
|
end
|
|
77
78
|
end
|
|
78
79
|
|
|
@@ -80,7 +81,7 @@ class ZipDialog < ZipDialogUI
|
|
|
80
81
|
end
|
|
81
82
|
|
|
82
83
|
unless ARGV[0]
|
|
83
|
-
puts "usage: #{$
|
|
84
|
+
puts "usage: #{$PROGRAM_NAME} zipname"
|
|
84
85
|
exit
|
|
85
86
|
end
|
|
86
87
|
|
data/samples/write_simple.rb
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
$LOAD_PATH << '../lib'
|
|
4
5
|
|
|
5
6
|
require 'zip'
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
OutputStream.open('simple.zip') do |zos|
|
|
8
|
+
Zip::OutputStream.open('simple.zip') do |zos|
|
|
10
9
|
zos.put_next_entry 'entry.txt'
|
|
11
10
|
zos.puts 'Hello world'
|
|
12
11
|
end
|
data/samples/zipfind.rb
CHANGED
|
@@ -1,37 +1,39 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
$VERBOSE = true
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
$LOAD_PATH << '../lib'
|
|
6
7
|
|
|
7
8
|
require 'zip'
|
|
8
9
|
require 'find'
|
|
9
10
|
|
|
10
11
|
module Zip
|
|
11
12
|
module ZipFind
|
|
12
|
-
def self.find(path,
|
|
13
|
-
Find.find(path) do |
|
|
14
|
-
yield(
|
|
15
|
-
next unless
|
|
13
|
+
def self.find(path, zip_file_pattern = /\.zip$/i)
|
|
14
|
+
Find.find(path) do |filename|
|
|
15
|
+
yield(filename)
|
|
16
|
+
next unless zip_file_pattern.match(filename) && File.file?(filename)
|
|
17
|
+
|
|
16
18
|
begin
|
|
17
|
-
Zip::File.foreach(
|
|
18
|
-
yield(
|
|
19
|
+
Zip::File.foreach(filename) do |entry|
|
|
20
|
+
yield(filename + File::SEPARATOR + entry.to_s)
|
|
19
21
|
end
|
|
20
|
-
rescue Errno::EACCES =>
|
|
21
|
-
puts
|
|
22
|
+
rescue Errno::EACCES => e
|
|
23
|
+
puts e
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
26
|
end
|
|
25
27
|
|
|
26
|
-
def self.find_file(path,
|
|
27
|
-
find(path,
|
|
28
|
-
yield(
|
|
28
|
+
def self.find_file(path, filename_pattern, zip_file_pattern = /\.zip$/i)
|
|
29
|
+
find(path, zip_file_pattern) do |filename|
|
|
30
|
+
yield(filename) if filename_pattern.match(filename)
|
|
29
31
|
end
|
|
30
32
|
end
|
|
31
33
|
end
|
|
32
34
|
end
|
|
33
35
|
|
|
34
|
-
if $
|
|
36
|
+
if $PROGRAM_NAME == __FILE__
|
|
35
37
|
module ZipFindConsoleRunner
|
|
36
38
|
PATH_ARG_INDEX = 0
|
|
37
39
|
FILENAME_PATTERN_ARG_INDEX = 1
|
|
@@ -41,24 +43,24 @@ if $0 == __FILE__
|
|
|
41
43
|
check_args(args)
|
|
42
44
|
Zip::ZipFind.find_file(args[PATH_ARG_INDEX],
|
|
43
45
|
args[FILENAME_PATTERN_ARG_INDEX],
|
|
44
|
-
args[ZIPFILE_PATTERN_ARG_INDEX]) do |
|
|
45
|
-
report_entry_found
|
|
46
|
+
args[ZIPFILE_PATTERN_ARG_INDEX]) do |filename|
|
|
47
|
+
report_entry_found filename
|
|
46
48
|
end
|
|
47
49
|
end
|
|
48
50
|
|
|
49
51
|
def self.check_args(args)
|
|
50
|
-
if args.size
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
return if args.size == 3
|
|
53
|
+
|
|
54
|
+
usage
|
|
55
|
+
exit
|
|
54
56
|
end
|
|
55
57
|
|
|
56
58
|
def self.usage
|
|
57
|
-
puts "Usage: #{$
|
|
59
|
+
puts "Usage: #{$PROGRAM_NAME} PATH ZIPFILENAME_PATTERN FILNAME_PATTERN"
|
|
58
60
|
end
|
|
59
61
|
|
|
60
|
-
def self.report_entry_found(
|
|
61
|
-
puts
|
|
62
|
+
def self.report_entry_found(filename)
|
|
63
|
+
puts filename
|
|
62
64
|
end
|
|
63
65
|
end
|
|
64
66
|
|
metadata
CHANGED
|
@@ -1,118 +1,174 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rubyzip
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
+
- Robert Haines
|
|
8
|
+
- John Lees-Miller
|
|
7
9
|
- Alexander Simonov
|
|
8
|
-
autorequire:
|
|
9
10
|
bindir: bin
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: minitest
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
requirements:
|
|
18
|
+
- - "~>"
|
|
19
|
+
- !ruby/object:Gem::Version
|
|
20
|
+
version: '5.25'
|
|
21
|
+
type: :development
|
|
22
|
+
prerelease: false
|
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
24
|
+
requirements:
|
|
25
|
+
- - "~>"
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
version: '5.25'
|
|
13
28
|
- !ruby/object:Gem::Dependency
|
|
14
29
|
name: rake
|
|
15
30
|
requirement: !ruby/object:Gem::Requirement
|
|
16
31
|
requirements:
|
|
17
32
|
- - "~>"
|
|
18
33
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
34
|
+
version: '13.2'
|
|
20
35
|
type: :development
|
|
21
36
|
prerelease: false
|
|
22
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
38
|
requirements:
|
|
24
39
|
- - "~>"
|
|
25
40
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
41
|
+
version: '13.2'
|
|
27
42
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
43
|
+
name: rdoc
|
|
29
44
|
requirement: !ruby/object:Gem::Requirement
|
|
30
45
|
requirements:
|
|
31
46
|
- - "~>"
|
|
32
47
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
48
|
+
version: '6.11'
|
|
34
49
|
type: :development
|
|
35
50
|
prerelease: false
|
|
36
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
52
|
requirements:
|
|
38
53
|
- - "~>"
|
|
39
54
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
55
|
+
version: '6.11'
|
|
41
56
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
57
|
+
name: rubocop
|
|
43
58
|
requirement: !ruby/object:Gem::Requirement
|
|
44
59
|
requirements:
|
|
45
60
|
- - "~>"
|
|
46
61
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
62
|
+
version: 1.80.2
|
|
48
63
|
type: :development
|
|
49
64
|
prerelease: false
|
|
50
65
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
66
|
requirements:
|
|
52
67
|
- - "~>"
|
|
53
68
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
69
|
+
version: 1.80.2
|
|
55
70
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
71
|
+
name: rubocop-performance
|
|
57
72
|
requirement: !ruby/object:Gem::Requirement
|
|
58
73
|
requirements:
|
|
59
74
|
- - "~>"
|
|
60
75
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
76
|
+
version: 1.26.0
|
|
62
77
|
type: :development
|
|
63
78
|
prerelease: false
|
|
64
79
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
80
|
requirements:
|
|
66
81
|
- - "~>"
|
|
67
82
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
83
|
+
version: 1.26.0
|
|
69
84
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rubocop
|
|
85
|
+
name: rubocop-rake
|
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - "~>"
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: 0.7.1
|
|
91
|
+
type: :development
|
|
92
|
+
prerelease: false
|
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - "~>"
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: 0.7.1
|
|
98
|
+
- !ruby/object:Gem::Dependency
|
|
99
|
+
name: simplecov
|
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - "~>"
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: 0.22.0
|
|
105
|
+
type: :development
|
|
106
|
+
prerelease: false
|
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
108
|
+
requirements:
|
|
109
|
+
- - "~>"
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: 0.22.0
|
|
112
|
+
- !ruby/object:Gem::Dependency
|
|
113
|
+
name: simplecov-lcov
|
|
71
114
|
requirement: !ruby/object:Gem::Requirement
|
|
72
115
|
requirements:
|
|
73
116
|
- - "~>"
|
|
74
117
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 0.
|
|
118
|
+
version: '0.8'
|
|
76
119
|
type: :development
|
|
77
120
|
prerelease: false
|
|
78
121
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
122
|
requirements:
|
|
80
123
|
- - "~>"
|
|
81
124
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 0.
|
|
83
|
-
description:
|
|
125
|
+
version: '0.8'
|
|
84
126
|
email:
|
|
127
|
+
- hainesr@gmail.com
|
|
128
|
+
- jdleesmiller@gmail.com
|
|
85
129
|
- alex@simonov.me
|
|
86
130
|
executables: []
|
|
87
131
|
extensions: []
|
|
88
132
|
extra_rdoc_files: []
|
|
89
133
|
files:
|
|
134
|
+
- Changelog.md
|
|
135
|
+
- LICENSE.md
|
|
90
136
|
- README.md
|
|
91
137
|
- Rakefile
|
|
92
|
-
-
|
|
138
|
+
- lib/rubyzip.rb
|
|
93
139
|
- lib/zip.rb
|
|
94
140
|
- lib/zip/central_directory.rb
|
|
95
141
|
- lib/zip/compressor.rb
|
|
96
142
|
- lib/zip/constants.rb
|
|
143
|
+
- lib/zip/crypto/aes_encryption.rb
|
|
144
|
+
- lib/zip/crypto/decrypted_io.rb
|
|
97
145
|
- lib/zip/crypto/encryption.rb
|
|
98
146
|
- lib/zip/crypto/null_encryption.rb
|
|
99
147
|
- lib/zip/crypto/traditional_encryption.rb
|
|
100
148
|
- lib/zip/decompressor.rb
|
|
101
149
|
- lib/zip/deflater.rb
|
|
150
|
+
- lib/zip/dirtyable.rb
|
|
102
151
|
- lib/zip/dos_time.rb
|
|
103
152
|
- lib/zip/entry.rb
|
|
104
153
|
- lib/zip/entry_set.rb
|
|
105
154
|
- lib/zip/errors.rb
|
|
106
155
|
- lib/zip/extra_field.rb
|
|
156
|
+
- lib/zip/extra_field/aes.rb
|
|
107
157
|
- lib/zip/extra_field/generic.rb
|
|
108
158
|
- lib/zip/extra_field/ntfs.rb
|
|
109
159
|
- lib/zip/extra_field/old_unix.rb
|
|
110
160
|
- lib/zip/extra_field/universal_time.rb
|
|
111
161
|
- lib/zip/extra_field/unix.rb
|
|
162
|
+
- lib/zip/extra_field/unknown.rb
|
|
112
163
|
- lib/zip/extra_field/zip64.rb
|
|
113
|
-
- lib/zip/extra_field/zip64_placeholder.rb
|
|
114
164
|
- lib/zip/file.rb
|
|
165
|
+
- lib/zip/file_split.rb
|
|
115
166
|
- lib/zip/filesystem.rb
|
|
167
|
+
- lib/zip/filesystem/dir.rb
|
|
168
|
+
- lib/zip/filesystem/directory_iterator.rb
|
|
169
|
+
- lib/zip/filesystem/file.rb
|
|
170
|
+
- lib/zip/filesystem/file_stat.rb
|
|
171
|
+
- lib/zip/filesystem/zip_file_name_mapper.rb
|
|
116
172
|
- lib/zip/inflater.rb
|
|
117
173
|
- lib/zip/input_stream.rb
|
|
118
174
|
- lib/zip/ioextras.rb
|
|
@@ -127,6 +183,7 @@ files:
|
|
|
127
183
|
- lib/zip/streamable_directory.rb
|
|
128
184
|
- lib/zip/streamable_stream.rb
|
|
129
185
|
- lib/zip/version.rb
|
|
186
|
+
- rubyzip.gemspec
|
|
130
187
|
- samples/example.rb
|
|
131
188
|
- samples/example_filesystem.rb
|
|
132
189
|
- samples/example_recursive.rb
|
|
@@ -136,14 +193,14 @@ files:
|
|
|
136
193
|
- samples/zipfind.rb
|
|
137
194
|
homepage: http://github.com/rubyzip/rubyzip
|
|
138
195
|
licenses:
|
|
139
|
-
- BSD
|
|
196
|
+
- BSD-2-Clause
|
|
140
197
|
metadata:
|
|
141
198
|
bug_tracker_uri: https://github.com/rubyzip/rubyzip/issues
|
|
142
|
-
changelog_uri: https://github.com/rubyzip/rubyzip/blob/
|
|
143
|
-
documentation_uri: https://www.rubydoc.info/gems/rubyzip/
|
|
144
|
-
source_code_uri: https://github.com/rubyzip/rubyzip/tree/
|
|
199
|
+
changelog_uri: https://github.com/rubyzip/rubyzip/blob/v3.6.0/Changelog.md
|
|
200
|
+
documentation_uri: https://www.rubydoc.info/gems/rubyzip/3.6.0
|
|
201
|
+
source_code_uri: https://github.com/rubyzip/rubyzip/tree/v3.6.0
|
|
145
202
|
wiki_uri: https://github.com/rubyzip/rubyzip/wiki
|
|
146
|
-
|
|
203
|
+
rubygems_mfa_required: 'true'
|
|
147
204
|
rdoc_options: []
|
|
148
205
|
require_paths:
|
|
149
206
|
- lib
|
|
@@ -151,15 +208,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
151
208
|
requirements:
|
|
152
209
|
- - ">="
|
|
153
210
|
- !ruby/object:Gem::Version
|
|
154
|
-
version: '
|
|
211
|
+
version: '3.0'
|
|
155
212
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
213
|
requirements:
|
|
157
214
|
- - ">="
|
|
158
215
|
- !ruby/object:Gem::Version
|
|
159
216
|
version: '0'
|
|
160
217
|
requirements: []
|
|
161
|
-
rubygems_version:
|
|
162
|
-
signing_key:
|
|
218
|
+
rubygems_version: 4.0.17
|
|
163
219
|
specification_version: 4
|
|
164
220
|
summary: rubyzip is a ruby module for reading and writing zip files
|
|
165
221
|
test_files: []
|
data/TODO
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
* ZipInputStream: Support zip-files with trailing data descriptors
|
|
3
|
-
* Adjust rdoc stylesheet to advertise inherited methods if possible
|
|
4
|
-
* Suggestion: Add ZipFile/ZipInputStream example that demonstrates extracting all entries.
|
|
5
|
-
* Suggestion: ZipFile#extract destination should default to "."
|
|
6
|
-
* Suggestion: ZipEntry should have extract(), get_input_stream() methods etc
|
|
7
|
-
* (is buffering used anywhere with write?)
|
|
8
|
-
* Inflater.sysread should pass the buffer to produce_input.
|
|
9
|
-
* Implement ZipFsDir.glob
|
|
10
|
-
* ZipFile.checkIntegrity method
|
|
11
|
-
* non-MSDOS permission attributes
|
|
12
|
-
** See mail from Ned Konz to ruby-talk subj. "Re: SV: [ANN] Archive 0.2"
|
|
13
|
-
* Packager version, required unpacker version in zip headers
|
|
14
|
-
** See mail from Ned Konz to ruby-talk subj. "Re: SV: [ANN] Archive 0.2"
|
|
15
|
-
* implement storing attributes and ownership information
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Zip
|
|
2
|
-
# placeholder to reserve space for a Zip64 extra information record, for the
|
|
3
|
-
# local file header only, that we won't know if we'll need until after
|
|
4
|
-
# we write the file data
|
|
5
|
-
class ExtraField::Zip64Placeholder < ExtraField::Generic
|
|
6
|
-
HEADER_ID = ['9999'].pack('H*') # this ID is used by other libraries such as .NET's Ionic.zip
|
|
7
|
-
register_map
|
|
8
|
-
|
|
9
|
-
def initialize(_binstr = nil); end
|
|
10
|
-
|
|
11
|
-
def pack_for_local
|
|
12
|
-
"\x00" * 16
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|