rubyzip 2.4.1 → 3.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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +457 -0
  3. data/LICENSE.md +24 -0
  4. data/README.md +138 -40
  5. data/Rakefile +15 -13
  6. data/lib/zip/central_directory.rb +169 -123
  7. data/lib/zip/compressor.rb +3 -1
  8. data/lib/zip/constants.rb +29 -21
  9. data/lib/zip/crypto/aes_encryption.rb +120 -0
  10. data/lib/zip/crypto/decrypted_io.rb +20 -14
  11. data/lib/zip/crypto/encryption.rb +4 -2
  12. data/lib/zip/crypto/null_encryption.rb +5 -13
  13. data/lib/zip/crypto/traditional_encryption.rb +10 -6
  14. data/lib/zip/decompressor.rb +4 -3
  15. data/lib/zip/deflater.rb +12 -8
  16. data/lib/zip/dirtyable.rb +32 -0
  17. data/lib/zip/dos_time.rb +45 -5
  18. data/lib/zip/entry.rb +373 -249
  19. data/lib/zip/entry_set.rb +11 -9
  20. data/lib/zip/errors.rb +136 -16
  21. data/lib/zip/extra_field/aes.rb +45 -0
  22. data/lib/zip/extra_field/generic.rb +6 -13
  23. data/lib/zip/extra_field/ntfs.rb +6 -4
  24. data/lib/zip/extra_field/old_unix.rb +3 -1
  25. data/lib/zip/extra_field/universal_time.rb +3 -1
  26. data/lib/zip/extra_field/unix.rb +5 -3
  27. data/lib/zip/extra_field/unknown.rb +33 -0
  28. data/lib/zip/extra_field/zip64.rb +12 -5
  29. data/lib/zip/extra_field.rb +17 -22
  30. data/lib/zip/file.rb +166 -265
  31. data/lib/zip/file_split.rb +91 -0
  32. data/lib/zip/filesystem/dir.rb +86 -0
  33. data/lib/zip/filesystem/directory_iterator.rb +48 -0
  34. data/lib/zip/filesystem/file.rb +263 -0
  35. data/lib/zip/filesystem/file_stat.rb +110 -0
  36. data/lib/zip/filesystem/zip_file_name_mapper.rb +81 -0
  37. data/lib/zip/filesystem.rb +27 -596
  38. data/lib/zip/inflater.rb +11 -8
  39. data/lib/zip/input_stream.rb +76 -57
  40. data/lib/zip/ioextras/abstract_input_stream.rb +19 -13
  41. data/lib/zip/ioextras/abstract_output_stream.rb +13 -3
  42. data/lib/zip/ioextras.rb +7 -7
  43. data/lib/zip/null_compressor.rb +3 -1
  44. data/lib/zip/null_decompressor.rb +6 -3
  45. data/lib/zip/null_input_stream.rb +3 -1
  46. data/lib/zip/output_stream.rb +55 -56
  47. data/lib/zip/pass_thru_compressor.rb +3 -1
  48. data/lib/zip/pass_thru_decompressor.rb +8 -5
  49. data/lib/zip/streamable_directory.rb +3 -1
  50. data/lib/zip/streamable_stream.rb +4 -1
  51. data/lib/zip/version.rb +4 -1
  52. data/lib/zip.rb +25 -22
  53. data/rubyzip.gemspec +39 -0
  54. data/samples/example.rb +8 -3
  55. data/samples/example_filesystem.rb +3 -2
  56. data/samples/example_recursive.rb +3 -1
  57. data/samples/gtk_ruby_zip.rb +5 -3
  58. data/samples/qtzip.rb +7 -6
  59. data/samples/write_simple.rb +2 -1
  60. data/samples/zipfind.rb +1 -0
  61. metadata +87 -49
  62. data/TODO +0 -15
  63. data/lib/zip/extra_field/zip64_placeholder.rb +0 -15
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Zip
2
- class PassThruDecompressor < Decompressor #:nodoc:all
4
+ class PassThruDecompressor < Decompressor # :nodoc:all
3
5
  def initialize(*args)
4
6
  super
5
7
  @read_so_far = 0
6
8
  end
7
9
 
8
- def read(length = nil, outbuf = ''.b)
9
- return (length.nil? || length.zero? ? '' : nil) if eof
10
+ def read(length = nil, outbuf = +'')
11
+ return (length.nil? || length.zero? ? '' : nil) if eof?
10
12
 
11
13
  if length.nil? || (@read_so_far + length) > decompressed_size
12
14
  length = decompressed_size - @read_so_far
@@ -16,11 +18,12 @@ module Zip
16
18
  input_stream.read(length, outbuf)
17
19
  end
18
20
 
19
- def eof
21
+ def eof?
20
22
  @read_so_far >= decompressed_size
21
23
  end
22
24
 
23
- alias eof? eof
25
+ # Alias for compatibility. Remove for version 4.
26
+ alias eof eof?
24
27
  end
25
28
 
26
29
  ::Zip::Decompressor.register(::Zip::COMPRESSION_METHOD_STORE, ::Zip::PassThruDecompressor)
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Zip
2
- class StreamableDirectory < Entry
4
+ class StreamableDirectory < Entry # :nodoc:
3
5
  def initialize(zipfile, entry, src_path = nil, permission = nil)
4
6
  super(zipfile, entry)
5
7
 
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Zip
2
4
  class StreamableStream < DelegateClass(Entry) # :nodoc:all
3
5
  def initialize(entry)
4
- super(entry)
6
+ super
5
7
  @temp_file = Tempfile.new(::File.basename(name))
6
8
  @temp_file.binmode
7
9
  end
@@ -42,6 +44,7 @@ module Zip
42
44
  end
43
45
 
44
46
  def clean_up
47
+ super
45
48
  @temp_file.unlink
46
49
  end
47
50
  end
data/lib/zip/version.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Zip
2
- VERSION = '2.4.1'
4
+ # The version of the Rubyzip library.
5
+ VERSION = '3.1.1'
3
6
  end
data/lib/zip.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'English'
2
4
  require 'delegate'
3
5
  require 'singleton'
@@ -5,6 +7,7 @@ require 'tempfile'
5
7
  require 'fileutils'
6
8
  require 'stringio'
7
9
  require 'zlib'
10
+ require 'zip/version'
8
11
  require 'zip/constants'
9
12
  require 'zip/dos_time'
10
13
  require 'zip/ioextras'
@@ -27,33 +30,21 @@ require 'zip/crypto/decrypted_io'
27
30
  require 'zip/crypto/encryption'
28
31
  require 'zip/crypto/null_encryption'
29
32
  require 'zip/crypto/traditional_encryption'
33
+ require 'zip/crypto/aes_encryption'
30
34
  require 'zip/inflater'
31
35
  require 'zip/deflater'
32
36
  require 'zip/streamable_stream'
33
37
  require 'zip/streamable_directory'
34
38
  require 'zip/errors'
35
39
 
40
+ # Rubyzip is a ruby module for reading and writing zip files.
41
+ #
42
+ # The main entry points are File, InputStream and OutputStream. For a
43
+ # file/directory interface in the style of the standard ruby ::File and
44
+ # ::Dir APIs then `require 'zip/filesystem'` and see FileSystem.
36
45
  module Zip
37
- V3_API_WARNING_MSG = <<~END_MSG
38
- You have called '%s' (from %s).
39
- This method is changing or deprecated in version 3.0.0. Please see
40
- https://github.com/rubyzip/rubyzip/wiki/Updating-to-version-3.x
41
- for more information.
42
- END_MSG
43
-
44
- def self.warn_about_v3_api(method)
45
- return unless ENV['RUBYZIP_V3_API_WARN']
46
-
47
- loc = caller_locations(2, 1)[0]
48
- from = "#{loc.path.split('/').last}:#{loc.lineno}"
49
- warn format(V3_API_WARNING_MSG, method, from)
50
- end
51
-
52
- if ENV['RUBYZIP_V3_API_WARN'] && RUBY_VERSION < '3.0'
53
- warn 'RubyZip 3.0 will require Ruby 3.0 or later.'
54
- end
55
-
56
46
  extend self
47
+
57
48
  attr_accessor :unicode_names,
58
49
  :on_exists_proc,
59
50
  :continue_on_exists_proc,
@@ -65,19 +56,31 @@ module Zip
65
56
  :force_entry_names_encoding,
66
57
  :validate_entry_sizes
67
58
 
68
- def reset!
59
+ DEFAULT_RESTORE_OPTIONS = {
60
+ restore_ownership: false,
61
+ restore_permissions: true,
62
+ restore_times: true
63
+ }.freeze # :nodoc:
64
+
65
+ # :nodoc:
66
+ # Remove this when JRuby#3962 is fixed.
67
+ ZLIB_FLUSHING_STRATEGY = defined?(JRUBY_VERSION) ? Zlib::SYNC_FLUSH : Zlib::NO_FLUSH
68
+
69
+ def reset! # :nodoc:
69
70
  @_ran_once = false
70
71
  @unicode_names = false
71
72
  @on_exists_proc = false
72
73
  @continue_on_exists_proc = false
73
74
  @sort_entries = false
74
- @default_compression = ::Zlib::DEFAULT_COMPRESSION
75
- @write_zip64_support = false
75
+ @default_compression = Zlib::DEFAULT_COMPRESSION
76
+ @write_zip64_support = true
76
77
  @warn_invalid_date = true
77
78
  @case_insensitive_match = false
79
+ @force_entry_names_encoding = nil
78
80
  @validate_entry_sizes = true
79
81
  end
80
82
 
83
+ # Set options for RubyZip in one block.
81
84
  def setup
82
85
  yield self unless @_ran_once
83
86
  @_ran_once = true
data/rubyzip.gemspec ADDED
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/zip/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'rubyzip'
7
+ s.version = Zip::VERSION
8
+ s.authors = ['Robert Haines', 'John Lees-Miller', 'Alexander Simonov']
9
+ s.email = [
10
+ 'hainesr@gmail.com', 'jdleesmiller@gmail.com', 'alex@simonov.me'
11
+ ]
12
+ s.homepage = 'http://github.com/rubyzip/rubyzip'
13
+ s.platform = Gem::Platform::RUBY
14
+ s.summary = 'rubyzip is a ruby module for reading and writing zip files'
15
+ s.files = Dir.glob('{samples,lib}/**/*.rb') +
16
+ %w[LICENSE.md README.md Changelog.md Rakefile rubyzip.gemspec]
17
+ s.require_paths = ['lib']
18
+ s.license = 'BSD-2-Clause'
19
+
20
+ s.metadata = {
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'
27
+ }
28
+
29
+ s.required_ruby_version = '>= 3.0'
30
+
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.80.2'
35
+ s.add_development_dependency 'rubocop-performance', '~> 1.26.0'
36
+ s.add_development_dependency 'rubocop-rake', '~> 0.7.1'
37
+ s.add_development_dependency 'simplecov', '~> 0.22.0'
38
+ s.add_development_dependency 'simplecov-lcov', '~> 0.8'
39
+ end
data/samples/example.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  $LOAD_PATH << '../lib'
4
5
  system('zip example.zip example.rb gtk_ruby_zip.rb')
@@ -20,7 +21,8 @@ end
20
21
 
21
22
  zf = Zip::File.new('example.zip')
22
23
  zf.each_with_index do |entry, index|
23
- puts "entry #{index} is #{entry.name}, size = #{entry.size}, compressed size = #{entry.compressed_size}"
24
+ puts "entry #{index} is #{entry.name}, size = #{entry.size}, " \
25
+ "compressed size = #{entry.compressed_size}"
24
26
  # use zf.get_input_stream(entry) to get a ZipInputStream for the entry
25
27
  # entry can be the ZipEntry object or any object which has a to_s method that
26
28
  # returns the name of the entry.
@@ -70,8 +72,11 @@ part_zips_count = Zip::File.split('large_zip_file.zip', 2_097_152, false)
70
72
  puts "Zip file splitted in #{part_zips_count} parts"
71
73
 
72
74
  # Track splitting an archive
73
- Zip::File.split('large_zip_file.zip', 1_048_576, true, 'part_zip_file') do |part_count, part_index, chunk_bytes, segment_bytes|
74
- puts "#{part_index} of #{part_count} part splitting: #{(chunk_bytes.to_f / segment_bytes * 100).to_i}%"
75
+ Zip::File.split(
76
+ 'large_zip_file.zip', 1_048_576, true, 'part_zip_file'
77
+ ) do |part_count, part_index, chunk_bytes, segment_bytes|
78
+ puts "#{part_index} of #{part_count} part splitting: " \
79
+ "#{(chunk_bytes.to_f / segment_bytes * 100).to_i}%"
75
80
  end
76
81
 
77
82
  # For other examples, look at zip.rb and ziptest.rb
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  $LOAD_PATH << '../lib'
4
5
 
@@ -6,9 +7,9 @@ require 'zip/filesystem'
6
7
 
7
8
  EXAMPLE_ZIP = 'filesystem.zip'
8
9
 
9
- File.delete(EXAMPLE_ZIP) if File.exist?(EXAMPLE_ZIP)
10
+ FileUtils.rm_f(EXAMPLE_ZIP)
10
11
 
11
- Zip::File.open(EXAMPLE_ZIP, Zip::File::CREATE) do |zf|
12
+ Zip::File.open(EXAMPLE_ZIP, create: true) do |zf|
12
13
  zf.file.open('file1.txt', 'w') { |os| os.write 'first file1.txt' }
13
14
  zf.dir.mkdir('dir1')
14
15
  zf.dir.chdir('dir1')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'zip'
2
4
 
3
5
  # This is a simple example which uses rubyzip to
@@ -21,7 +23,7 @@ class ZipFileGenerator
21
23
  def write
22
24
  entries = Dir.entries(@input_dir) - %w[. ..]
23
25
 
24
- ::Zip::File.open(@output_file, ::Zip::File::CREATE) do |zipfile|
26
+ ::Zip::File.open(@output_file, create: true) do |zipfile|
25
27
  write_entries entries, '', zipfile
26
28
  end
27
29
  end
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  $LOAD_PATH << '../lib'
4
5
 
@@ -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 }
@@ -42,7 +43,8 @@ class MainApp < Gtk::Window
42
43
  end
43
44
 
44
45
  class ButtonPanel < Gtk::HButtonBox
45
- attr_reader :open_button, :extract_button
46
+ attr_reader :extract_button, :open_button
47
+
46
48
  def initialize
47
49
  super
48
50
  set_layout(Gtk::BUTTONBOX_START)
@@ -72,7 +74,7 @@ class MainApp < Gtk::Window
72
74
  @zipfile.each do |entry|
73
75
  @clist.append([entry.name,
74
76
  entry.size.to_s,
75
- (100.0 * entry.compressedSize / entry.size).to_s + '%'])
77
+ "#{100.0 * entry.compressedSize / entry.size}%"])
76
78
  end
77
79
  end
78
80
  end
data/samples/qtzip.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  $VERBOSE = true
4
5
 
@@ -6,14 +7,14 @@ $LOAD_PATH << '../lib'
6
7
 
7
8
  require 'Qt'
8
9
  system('rbuic -o zipdialogui.rb zipdialogui.ui')
9
- require 'zipdialogui.rb'
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()'),
@@ -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 = !selected_items.empty? ? selected_items : unselected_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 !d
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
 
@@ -1,10 +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
- ::Zip::OutputStream.open('simple.zip') do |zos|
8
+ Zip::OutputStream.open('simple.zip') do |zos|
8
9
  zos.put_next_entry 'entry.txt'
9
10
  zos.puts 'Hello world'
10
11
  end
data/samples/zipfind.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  $VERBOSE = true
4
5
 
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: 2.4.1
4
+ version: 3.1.1
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: 2025-01-05 00:00:00.000000000 Z
13
+ date: 2025-09-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: minitest
@@ -18,62 +18,112 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '5.4'
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.4'
28
+ version: '5.25'
29
29
  - !ruby/object:Gem::Dependency
30
- name: pry
30
+ name: rake
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: '0.10'
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: '0.10'
42
+ version: '13.2'
43
43
  - !ruby/object:Gem::Dependency
44
- name: rake
44
+ name: rdoc
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '6.11'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '6.11'
57
+ - !ruby/object:Gem::Dependency
58
+ name: rubocop
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: 1.80.2
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: 1.80.2
71
+ - !ruby/object:Gem::Dependency
72
+ name: rubocop-performance
45
73
  requirement: !ruby/object:Gem::Requirement
46
74
  requirements:
47
75
  - - "~>"
48
76
  - !ruby/object:Gem::Version
49
- version: '12.3'
50
- - - ">="
77
+ version: 1.26.0
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: 1.26.0
85
+ - !ruby/object:Gem::Dependency
86
+ name: rubocop-rake
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
51
90
  - !ruby/object:Gem::Version
52
- version: 12.3.3
91
+ version: 0.7.1
53
92
  type: :development
54
93
  prerelease: false
55
94
  version_requirements: !ruby/object:Gem::Requirement
56
95
  requirements:
57
96
  - - "~>"
58
97
  - !ruby/object:Gem::Version
59
- version: '12.3'
60
- - - ">="
98
+ version: 0.7.1
99
+ - !ruby/object:Gem::Dependency
100
+ name: simplecov
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
61
104
  - !ruby/object:Gem::Version
62
- version: 12.3.3
105
+ version: 0.22.0
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: 0.22.0
63
113
  - !ruby/object:Gem::Dependency
64
- name: rubocop
114
+ name: simplecov-lcov
65
115
  requirement: !ruby/object:Gem::Requirement
66
116
  requirements:
67
117
  - - "~>"
68
118
  - !ruby/object:Gem::Version
69
- version: '0.79'
119
+ version: '0.8'
70
120
  type: :development
71
121
  prerelease: false
72
122
  version_requirements: !ruby/object:Gem::Requirement
73
123
  requirements:
74
124
  - - "~>"
75
125
  - !ruby/object:Gem::Version
76
- version: '0.79'
126
+ version: '0.8'
77
127
  description:
78
128
  email:
79
129
  - hainesr@gmail.com
@@ -83,33 +133,43 @@ executables: []
83
133
  extensions: []
84
134
  extra_rdoc_files: []
85
135
  files:
136
+ - Changelog.md
137
+ - LICENSE.md
86
138
  - README.md
87
139
  - Rakefile
88
- - TODO
89
140
  - lib/zip.rb
90
141
  - lib/zip/central_directory.rb
91
142
  - lib/zip/compressor.rb
92
143
  - lib/zip/constants.rb
144
+ - lib/zip/crypto/aes_encryption.rb
93
145
  - lib/zip/crypto/decrypted_io.rb
94
146
  - lib/zip/crypto/encryption.rb
95
147
  - lib/zip/crypto/null_encryption.rb
96
148
  - lib/zip/crypto/traditional_encryption.rb
97
149
  - lib/zip/decompressor.rb
98
150
  - lib/zip/deflater.rb
151
+ - lib/zip/dirtyable.rb
99
152
  - lib/zip/dos_time.rb
100
153
  - lib/zip/entry.rb
101
154
  - lib/zip/entry_set.rb
102
155
  - lib/zip/errors.rb
103
156
  - lib/zip/extra_field.rb
157
+ - lib/zip/extra_field/aes.rb
104
158
  - lib/zip/extra_field/generic.rb
105
159
  - lib/zip/extra_field/ntfs.rb
106
160
  - lib/zip/extra_field/old_unix.rb
107
161
  - lib/zip/extra_field/universal_time.rb
108
162
  - lib/zip/extra_field/unix.rb
163
+ - lib/zip/extra_field/unknown.rb
109
164
  - lib/zip/extra_field/zip64.rb
110
- - lib/zip/extra_field/zip64_placeholder.rb
111
165
  - lib/zip/file.rb
166
+ - lib/zip/file_split.rb
112
167
  - lib/zip/filesystem.rb
168
+ - lib/zip/filesystem/dir.rb
169
+ - lib/zip/filesystem/directory_iterator.rb
170
+ - lib/zip/filesystem/file.rb
171
+ - lib/zip/filesystem/file_stat.rb
172
+ - lib/zip/filesystem/zip_file_name_mapper.rb
113
173
  - lib/zip/inflater.rb
114
174
  - lib/zip/input_stream.rb
115
175
  - lib/zip/ioextras.rb
@@ -124,6 +184,7 @@ files:
124
184
  - lib/zip/streamable_directory.rb
125
185
  - lib/zip/streamable_stream.rb
126
186
  - lib/zip/version.rb
187
+ - rubyzip.gemspec
127
188
  - samples/example.rb
128
189
  - samples/example_filesystem.rb
129
190
  - samples/example_recursive.rb
@@ -133,38 +194,15 @@ files:
133
194
  - samples/zipfind.rb
134
195
  homepage: http://github.com/rubyzip/rubyzip
135
196
  licenses:
136
- - BSD 2-Clause
197
+ - BSD-2-Clause
137
198
  metadata:
138
199
  bug_tracker_uri: https://github.com/rubyzip/rubyzip/issues
139
- changelog_uri: https://github.com/rubyzip/rubyzip/blob/v2.4.1/Changelog.md
140
- documentation_uri: https://www.rubydoc.info/gems/rubyzip/2.4.1
141
- source_code_uri: https://github.com/rubyzip/rubyzip/tree/v2.4.1
200
+ changelog_uri: https://github.com/rubyzip/rubyzip/blob/v3.1.1/Changelog.md
201
+ documentation_uri: https://www.rubydoc.info/gems/rubyzip/3.1.1
202
+ source_code_uri: https://github.com/rubyzip/rubyzip/tree/v3.1.1
142
203
  wiki_uri: https://github.com/rubyzip/rubyzip/wiki
143
204
  rubygems_mfa_required: 'true'
144
- post_install_message: |
145
- RubyZip 3.0 is coming!
146
- **********************
147
-
148
- The public API of some Rubyzip classes has been modernized to use named
149
- parameters for optional arguments. Please check your usage of the
150
- following classes:
151
- * `Zip::File`
152
- * `Zip::Entry`
153
- * `Zip::InputStream`
154
- * `Zip::OutputStream`
155
- * `Zip::DOSTime`
156
-
157
- Run your test suite with the `RUBYZIP_V3_API_WARN` environment
158
- variable set to see warnings about usage of the old API. This will
159
- help you to identify any changes that you need to make to your code.
160
- See https://github.com/rubyzip/rubyzip/wiki/Updating-to-version-3.x for
161
- more information.
162
-
163
- Please ensure that your Gemfiles and .gemspecs are suitably restrictive
164
- to avoid an unexpected breakage when 3.0 is released (e.g. ~> 2.3.0).
165
- See https://github.com/rubyzip/rubyzip for details. The Changelog also
166
- lists other enhancements and bugfixes that have been implemented since
167
- version 2.3.0.
205
+ post_install_message:
168
206
  rdoc_options: []
169
207
  require_paths:
170
208
  - lib
@@ -172,14 +210,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
172
210
  requirements:
173
211
  - - ">="
174
212
  - !ruby/object:Gem::Version
175
- version: '2.4'
213
+ version: '3.0'
176
214
  required_rubygems_version: !ruby/object:Gem::Requirement
177
215
  requirements:
178
216
  - - ">="
179
217
  - !ruby/object:Gem::Version
180
218
  version: '0'
181
219
  requirements: []
182
- rubygems_version: 3.1.6
220
+ rubygems_version: 3.4.19
183
221
  signing_key:
184
222
  specification_version: 4
185
223
  summary: rubyzip is a ruby module for reading and writing zip 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