rubyzip 1.0.0 → 2.4.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 (52) hide show
  1. checksums.yaml +6 -14
  2. data/README.md +231 -46
  3. data/Rakefile +13 -5
  4. data/TODO +0 -1
  5. data/lib/zip/central_directory.rb +64 -29
  6. data/lib/zip/compressor.rb +1 -2
  7. data/lib/zip/constants.rb +59 -5
  8. data/lib/zip/crypto/decrypted_io.rb +40 -0
  9. data/lib/zip/crypto/encryption.rb +11 -0
  10. data/lib/zip/crypto/null_encryption.rb +43 -0
  11. data/lib/zip/crypto/traditional_encryption.rb +99 -0
  12. data/lib/zip/decompressor.rb +22 -4
  13. data/lib/zip/deflater.rb +11 -6
  14. data/lib/zip/dos_time.rb +27 -16
  15. data/lib/zip/entry.rb +299 -163
  16. data/lib/zip/entry_set.rb +22 -20
  17. data/lib/zip/errors.rb +17 -6
  18. data/lib/zip/extra_field/generic.rb +15 -14
  19. data/lib/zip/extra_field/ntfs.rb +94 -0
  20. data/lib/zip/extra_field/old_unix.rb +46 -0
  21. data/lib/zip/extra_field/universal_time.rb +46 -16
  22. data/lib/zip/extra_field/unix.rb +10 -9
  23. data/lib/zip/extra_field/zip64.rb +46 -6
  24. data/lib/zip/extra_field/zip64_placeholder.rb +15 -0
  25. data/lib/zip/extra_field.rb +32 -18
  26. data/lib/zip/file.rb +260 -160
  27. data/lib/zip/filesystem.rb +297 -276
  28. data/lib/zip/inflater.rb +23 -34
  29. data/lib/zip/input_stream.rb +130 -82
  30. data/lib/zip/ioextras/abstract_input_stream.rb +36 -22
  31. data/lib/zip/ioextras/abstract_output_stream.rb +4 -6
  32. data/lib/zip/ioextras.rb +4 -6
  33. data/lib/zip/null_compressor.rb +2 -2
  34. data/lib/zip/null_decompressor.rb +4 -12
  35. data/lib/zip/null_input_stream.rb +2 -1
  36. data/lib/zip/output_stream.rb +75 -45
  37. data/lib/zip/pass_thru_compressor.rb +6 -6
  38. data/lib/zip/pass_thru_decompressor.rb +14 -24
  39. data/lib/zip/streamable_directory.rb +3 -3
  40. data/lib/zip/streamable_stream.rb +21 -16
  41. data/lib/zip/version.rb +1 -1
  42. data/lib/zip.rb +42 -3
  43. data/samples/example.rb +30 -40
  44. data/samples/example_filesystem.rb +16 -18
  45. data/samples/example_recursive.rb +33 -28
  46. data/samples/gtk_ruby_zip.rb +84 -0
  47. data/samples/qtzip.rb +25 -34
  48. data/samples/write_simple.rb +10 -13
  49. data/samples/zipfind.rb +38 -45
  50. metadata +129 -28
  51. data/NEWS +0 -182
  52. data/samples/gtkRubyzip.rb +0 -86
@@ -1,4 +1,4 @@
1
- require 'zip/zip'
1
+ require 'zip'
2
2
 
3
3
  # This is a simple example which uses rubyzip to
4
4
  # recursively generate a zip file from the contents of
@@ -6,44 +6,49 @@ require 'zip/zip'
6
6
  # included in the archive, rather just its contents.
7
7
  #
8
8
  # Usage:
9
- # directoryToZip = "/tmp/input"
10
- # outputFile = "/tmp/out.zip"
11
- # zf = ZipFileGenerator.new(directoryToZip, outputFile)
9
+ # directory_to_zip = "/tmp/input"
10
+ # output_file = "/tmp/out.zip"
11
+ # zf = ZipFileGenerator.new(directory_to_zip, output_file)
12
12
  # zf.write()
13
13
  class ZipFileGenerator
14
-
15
14
  # Initialize with the directory to zip and the location of the output archive.
16
- def initialize(inputDir, outputFile)
17
- @inputDir = inputDir
18
- @outputFile = outputFile
15
+ def initialize(input_dir, output_file)
16
+ @input_dir = input_dir
17
+ @output_file = output_file
19
18
  end
20
19
 
21
20
  # Zip the input directory.
22
- def write()
23
- entries = Dir.entries(@inputDir); entries.delete("."); entries.delete("..")
24
- io = Zip::File.open(@outputFile, Zip::File::CREATE);
21
+ def write
22
+ entries = Dir.entries(@input_dir) - %w[. ..]
25
23
 
26
- writeEntries(entries, "", io)
27
- io.close();
24
+ ::Zip::File.open(@output_file, ::Zip::File::CREATE) do |zipfile|
25
+ write_entries entries, '', zipfile
26
+ end
28
27
  end
29
28
 
30
- # A helper method to make the recursion work.
31
29
  private
32
- def writeEntries(entries, path, io)
33
-
34
- entries.each { |e|
35
- zipFilePath = path == "" ? e : File.join(path, e)
36
- diskFilePath = File.join(@inputDir, zipFilePath)
37
- puts "Deflating " + diskFilePath
38
- if File.directory?(diskFilePath)
39
- io.mkdir(zipFilePath)
40
- subdir =Dir.entries(diskFilePath); subdir.delete("."); subdir.delete("..")
41
- writeEntries(subdir, zipFilePath, io)
30
+
31
+ # A helper method to make the recursion work.
32
+ def write_entries(entries, path, zipfile)
33
+ entries.each do |e|
34
+ zipfile_path = path == '' ? e : File.join(path, e)
35
+ disk_file_path = File.join(@input_dir, zipfile_path)
36
+
37
+ if File.directory? disk_file_path
38
+ recursively_deflate_directory(disk_file_path, zipfile, zipfile_path)
42
39
  else
43
- io.get_output_stream(zipFilePath) { |f| f.puts(File.open(diskFilePath, "rb").read())}
40
+ put_into_archive(disk_file_path, zipfile, zipfile_path)
44
41
  end
45
- }
42
+ end
43
+ end
44
+
45
+ def recursively_deflate_directory(disk_file_path, zipfile, zipfile_path)
46
+ zipfile.mkdir zipfile_path
47
+ subdir = Dir.entries(disk_file_path) - %w[. ..]
48
+ write_entries subdir, zipfile_path, zipfile
46
49
  end
47
-
48
- end
49
50
 
51
+ def put_into_archive(disk_file_path, zipfile, zipfile_path)
52
+ zipfile.add(zipfile_path, disk_file_path)
53
+ end
54
+ end
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << '../lib'
4
+
5
+ $VERBOSE = true
6
+
7
+ require 'gtk'
8
+ require 'zip'
9
+
10
+ class MainApp < Gtk::Window
11
+ def initialize
12
+ super()
13
+ set_usize(400, 256)
14
+ set_title('rubyzip')
15
+ signal_connect(Gtk::Window::SIGNAL_DESTROY) { Gtk.main_quit }
16
+
17
+ box = Gtk::VBox.new(false, 0)
18
+ add(box)
19
+
20
+ @zipfile = nil
21
+ @button_panel = ButtonPanel.new
22
+ @button_panel.open_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
23
+ show_file_selector
24
+ end
25
+ @button_panel.extract_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
26
+ puts 'Not implemented!'
27
+ end
28
+ box.pack_start(@button_panel, false, false, 0)
29
+
30
+ sw = Gtk::ScrolledWindow.new
31
+ sw.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
32
+ box.pack_start(sw, true, true, 0)
33
+
34
+ @clist = Gtk::CList.new(%w[Name Size Compression])
35
+ @clist.set_selection_mode(Gtk::SELECTION_BROWSE)
36
+ @clist.set_column_width(0, 120)
37
+ @clist.set_column_width(1, 120)
38
+ @clist.signal_connect(Gtk::CList::SIGNAL_SELECT_ROW) do |_w, row, _column, _event|
39
+ @selected_row = row
40
+ end
41
+ sw.add(@clist)
42
+ end
43
+
44
+ class ButtonPanel < Gtk::HButtonBox
45
+ attr_reader :open_button, :extract_button
46
+ def initialize
47
+ super
48
+ set_layout(Gtk::BUTTONBOX_START)
49
+ set_spacing(0)
50
+ @open_button = Gtk::Button.new('Open archive')
51
+ @extract_button = Gtk::Button.new('Extract entry')
52
+ pack_start(@open_button)
53
+ pack_start(@extract_button)
54
+ end
55
+ end
56
+
57
+ def show_file_selector
58
+ @file_selector = Gtk::FileSelection.new('Open zip file')
59
+ @file_selector.show
60
+ @file_selector.ok_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
61
+ open_zip(@file_selector.filename)
62
+ @file_selector.destroy
63
+ end
64
+ @file_selector.cancel_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
65
+ @file_selector.destroy
66
+ end
67
+ end
68
+
69
+ def open_zip(filename)
70
+ @zipfile = Zip::File.open(filename)
71
+ @clist.clear
72
+ @zipfile.each do |entry|
73
+ @clist.append([entry.name,
74
+ entry.size.to_s,
75
+ (100.0 * entry.compressedSize / entry.size).to_s + '%'])
76
+ end
77
+ end
78
+ end
79
+
80
+ main_app = MainApp.new
81
+
82
+ main_app.show_all
83
+
84
+ Gtk.main
data/samples/qtzip.rb CHANGED
@@ -1,22 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $VERBOSE=true
3
+ $VERBOSE = true
4
4
 
5
- $: << "../lib"
5
+ $LOAD_PATH << '../lib'
6
6
 
7
7
  require 'Qt'
8
8
  system('rbuic -o zipdialogui.rb zipdialogui.ui')
9
9
  require 'zipdialogui.rb'
10
- require 'zip/zip'
11
-
12
-
10
+ require 'zip'
13
11
 
14
12
  a = Qt::Application.new(ARGV)
15
13
 
16
14
  class ZipDialog < ZipDialogUI
17
-
18
-
19
- def initialize()
15
+ def initialize
20
16
  super()
21
17
  connect(child('add_button'), SIGNAL('clicked()'),
22
18
  self, SLOT('add_files()'))
@@ -24,24 +20,22 @@ class ZipDialog < ZipDialogUI
24
20
  self, SLOT('extract_files()'))
25
21
  end
26
22
 
27
- def zipfile(&proc)
28
- Zip::File.open(@zip_filename, &proc)
23
+ def zipfile(&a_proc)
24
+ Zip::File.open(@zip_filename, &a_proc)
29
25
  end
30
26
 
31
- def each(&proc)
32
- Zip::File.foreach(@zip_filename, &proc)
27
+ def each(&a_proc)
28
+ Zip::File.foreach(@zip_filename, &a_proc)
33
29
  end
34
-
35
- def refresh()
36
- lv = child("entry_list_view")
30
+
31
+ def refresh
32
+ lv = child('entry_list_view')
37
33
  lv.clear
38
- each {
39
- |e|
34
+ each do |e|
40
35
  lv.insert_item(Qt::ListViewItem.new(lv, e.name, e.size.to_s))
41
- }
36
+ end
42
37
  end
43
38
 
44
-
45
39
  def load(zipfile)
46
40
  @zip_filename = zipfile
47
41
  refresh
@@ -49,13 +43,11 @@ class ZipDialog < ZipDialogUI
49
43
 
50
44
  def add_files
51
45
  l = Qt::FileDialog.getOpenFileNames(nil, nil, self)
52
- zipfile {
53
- |zf|
54
- l.each {
55
- |path|
46
+ zipfile do |zf|
47
+ l.each do |path|
56
48
  zf.add(File.basename(path), path)
57
- }
58
- }
49
+ end
50
+ end
59
51
  refresh
60
52
  end
61
53
 
@@ -63,7 +55,7 @@ class ZipDialog < ZipDialogUI
63
55
  selected_items = []
64
56
  unselected_items = []
65
57
  lv_item = entry_list_view.first_child
66
- while (lv_item)
58
+ while lv_item
67
59
  if entry_list_view.is_selected(lv_item)
68
60
  selected_items << lv_item.text(0)
69
61
  else
@@ -73,23 +65,22 @@ class ZipDialog < ZipDialogUI
73
65
  end
74
66
  puts "selected_items.size = #{selected_items.size}"
75
67
  puts "unselected_items.size = #{unselected_items.size}"
76
- items = selected_items.size > 0 ? selected_items : unselected_items
68
+ items = !selected_items.empty? ? selected_items : unselected_items
77
69
  puts "items.size = #{items.size}"
78
70
 
79
71
  d = Qt::FileDialog.get_existing_directory(nil, self)
80
- if (!d)
81
- puts "No directory chosen"
72
+ if !d
73
+ puts 'No directory chosen'
82
74
  else
83
75
  zipfile { |zf| items.each { |e| zf.extract(e, File.join(d, e)) } }
84
76
  end
85
-
86
77
  end
87
78
 
88
79
  slots 'add_files()', 'extract_files()'
89
80
  end
90
81
 
91
- if !ARGV[0]
92
- puts "usage: #{$0} zipname"
82
+ unless ARGV[0]
83
+ puts "usage: #{$PROGRAM_NAME} zipname"
93
84
  exit
94
85
  end
95
86
 
@@ -97,5 +88,5 @@ zd = ZipDialog.new
97
88
  zd.load(ARGV[0])
98
89
 
99
90
  a.mainWidget = zd
100
- zd.show()
101
- a.exec()
91
+ zd.show
92
+ a.exec
@@ -1,13 +1,10 @@
1
- #!/usr/bin/env ruby
2
-
3
- $: << "../lib"
4
-
5
- require 'zip/zip'
6
-
7
- include Zip
8
-
9
- OutputStream.open('simple.zip') {
10
- |zos|
11
- ze = zos.put_next_entry 'entry.txt'
12
- zos.puts "Hello world"
13
- }
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << '../lib'
4
+
5
+ require 'zip'
6
+
7
+ ::Zip::OutputStream.open('simple.zip') do |zos|
8
+ zos.put_next_entry 'entry.txt'
9
+ zos.puts 'Hello world'
10
+ end
data/samples/zipfind.rb CHANGED
@@ -2,72 +2,65 @@
2
2
 
3
3
  $VERBOSE = true
4
4
 
5
- $: << "../lib"
5
+ $LOAD_PATH << '../lib'
6
6
 
7
- require 'zip/zip'
7
+ require 'zip'
8
8
  require 'find'
9
9
 
10
10
  module Zip
11
11
  module ZipFind
12
- def self.find(path, zipFilePattern = /\.zip$/i)
13
- Find.find(path) {
14
- |fileName|
15
- yield(fileName)
16
- if zipFilePattern.match(fileName) && File.file?(fileName)
17
- begin
18
- Zip::File.foreach(fileName) {
19
- |zipEntry|
20
- yield(fileName + File::SEPARATOR + zipEntry.to_s)
21
- }
22
- rescue Errno::EACCES => ex
23
- puts ex
24
- end
25
- end
26
- }
27
- end
12
+ def self.find(path, zip_file_pattern = /\.zip$/i)
13
+ Find.find(path) do |filename|
14
+ yield(filename)
15
+ next unless zip_file_pattern.match(filename) && File.file?(filename)
28
16
 
29
- def self.find_file(path, fileNamePattern, zipFilePattern = /\.zip$/i)
30
- self.find(path, zipFilePattern) {
31
- |fileName|
32
- yield(fileName) if fileNamePattern.match(fileName)
33
- }
17
+ begin
18
+ Zip::File.foreach(filename) do |entry|
19
+ yield(filename + File::SEPARATOR + entry.to_s)
20
+ end
21
+ rescue Errno::EACCES => e
22
+ puts e
23
+ end
24
+ end
34
25
  end
35
26
 
27
+ def self.find_file(path, filename_pattern, zip_file_pattern = /\.zip$/i)
28
+ find(path, zip_file_pattern) do |filename|
29
+ yield(filename) if filename_pattern.match(filename)
30
+ end
31
+ end
36
32
  end
37
33
  end
38
34
 
39
- if __FILE__ == $0
35
+ if $PROGRAM_NAME == __FILE__
40
36
  module ZipFindConsoleRunner
41
-
42
- PATH_ARG_INDEX = 0;
43
- FILENAME_PATTERN_ARG_INDEX = 1;
44
- ZIPFILE_PATTERN_ARG_INDEX = 2;
45
-
37
+ PATH_ARG_INDEX = 0
38
+ FILENAME_PATTERN_ARG_INDEX = 1
39
+ ZIPFILE_PATTERN_ARG_INDEX = 2
40
+
46
41
  def self.run(args)
47
42
  check_args(args)
48
- Zip::ZipFind.find_file(args[PATH_ARG_INDEX],
49
- args[FILENAME_PATTERN_ARG_INDEX],
50
- args[ZIPFILE_PATTERN_ARG_INDEX]) {
51
- |fileName|
52
- report_entry_found fileName
53
- }
43
+ Zip::ZipFind.find_file(args[PATH_ARG_INDEX],
44
+ args[FILENAME_PATTERN_ARG_INDEX],
45
+ args[ZIPFILE_PATTERN_ARG_INDEX]) do |filename|
46
+ report_entry_found filename
47
+ end
54
48
  end
55
-
49
+
56
50
  def self.check_args(args)
57
- if (args.size != 3)
58
- usage
59
- exit
60
- end
51
+ return if args.size == 3
52
+
53
+ usage
54
+ exit
61
55
  end
62
56
 
63
57
  def self.usage
64
- puts "Usage: #{$0} PATH ZIPFILENAME_PATTERN FILNAME_PATTERN"
58
+ puts "Usage: #{$PROGRAM_NAME} PATH ZIPFILENAME_PATTERN FILNAME_PATTERN"
65
59
  end
66
-
67
- def self.report_entry_found(fileName)
68
- puts fileName
60
+
61
+ def self.report_entry_found(filename)
62
+ puts filename
69
63
  end
70
-
71
64
  end
72
65
 
73
66
  ZipFindConsoleRunner.run(ARGV)
metadata CHANGED
@@ -1,50 +1,120 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyzip
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.4.1
5
5
  platform: ruby
6
6
  authors:
7
+ - Robert Haines
8
+ - John Lees-Miller
7
9
  - Alexander Simonov
8
- autorequire:
10
+ autorequire:
9
11
  bindir: bin
10
12
  cert_chain: []
11
- date: 2013-08-29 00:00:00.000000000 Z
12
- dependencies: []
13
- description:
13
+ date: 2025-01-05 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: minitest
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '5.4'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '5.4'
29
+ - !ruby/object:Gem::Dependency
30
+ name: pry
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '0.10'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.10'
43
+ - !ruby/object:Gem::Dependency
44
+ name: rake
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '12.3'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 12.3.3
53
+ type: :development
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '12.3'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 12.3.3
63
+ - !ruby/object:Gem::Dependency
64
+ name: rubocop
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.79'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '0.79'
77
+ description:
14
78
  email:
79
+ - hainesr@gmail.com
80
+ - jdleesmiller@gmail.com
15
81
  - alex@simonov.me
16
82
  executables: []
17
83
  extensions: []
18
84
  extra_rdoc_files: []
19
85
  files:
20
- - samples/example.rb
21
- - samples/example_filesystem.rb
22
- - samples/example_recursive.rb
23
- - samples/gtkRubyzip.rb
24
- - samples/qtzip.rb
25
- - samples/write_simple.rb
26
- - samples/zipfind.rb
86
+ - README.md
87
+ - Rakefile
88
+ - TODO
89
+ - lib/zip.rb
27
90
  - lib/zip/central_directory.rb
28
91
  - lib/zip/compressor.rb
29
92
  - lib/zip/constants.rb
93
+ - lib/zip/crypto/decrypted_io.rb
94
+ - lib/zip/crypto/encryption.rb
95
+ - lib/zip/crypto/null_encryption.rb
96
+ - lib/zip/crypto/traditional_encryption.rb
30
97
  - lib/zip/decompressor.rb
31
98
  - lib/zip/deflater.rb
32
99
  - lib/zip/dos_time.rb
33
100
  - lib/zip/entry.rb
34
101
  - lib/zip/entry_set.rb
35
102
  - lib/zip/errors.rb
103
+ - lib/zip/extra_field.rb
36
104
  - lib/zip/extra_field/generic.rb
105
+ - lib/zip/extra_field/ntfs.rb
106
+ - lib/zip/extra_field/old_unix.rb
37
107
  - lib/zip/extra_field/universal_time.rb
38
108
  - lib/zip/extra_field/unix.rb
39
109
  - lib/zip/extra_field/zip64.rb
40
- - lib/zip/extra_field.rb
110
+ - lib/zip/extra_field/zip64_placeholder.rb
41
111
  - lib/zip/file.rb
42
112
  - lib/zip/filesystem.rb
43
113
  - lib/zip/inflater.rb
44
114
  - lib/zip/input_stream.rb
115
+ - lib/zip/ioextras.rb
45
116
  - lib/zip/ioextras/abstract_input_stream.rb
46
117
  - lib/zip/ioextras/abstract_output_stream.rb
47
- - lib/zip/ioextras.rb
48
118
  - lib/zip/null_compressor.rb
49
119
  - lib/zip/null_decompressor.rb
50
120
  - lib/zip/null_input_stream.rb
@@ -54,32 +124,63 @@ files:
54
124
  - lib/zip/streamable_directory.rb
55
125
  - lib/zip/streamable_stream.rb
56
126
  - lib/zip/version.rb
57
- - lib/zip.rb
58
- - README.md
59
- - NEWS
60
- - TODO
61
- - Rakefile
127
+ - samples/example.rb
128
+ - samples/example_filesystem.rb
129
+ - samples/example_recursive.rb
130
+ - samples/gtk_ruby_zip.rb
131
+ - samples/qtzip.rb
132
+ - samples/write_simple.rb
133
+ - samples/zipfind.rb
62
134
  homepage: http://github.com/rubyzip/rubyzip
63
- licenses: []
64
- metadata: {}
65
- post_install_message:
135
+ licenses:
136
+ - BSD 2-Clause
137
+ metadata:
138
+ 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
142
+ wiki_uri: https://github.com/rubyzip/rubyzip/wiki
143
+ 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.
66
168
  rdoc_options: []
67
169
  require_paths:
68
170
  - lib
69
171
  required_ruby_version: !ruby/object:Gem::Requirement
70
172
  requirements:
71
- - - ! '>='
173
+ - - ">="
72
174
  - !ruby/object:Gem::Version
73
- version: 1.9.2
175
+ version: '2.4'
74
176
  required_rubygems_version: !ruby/object:Gem::Requirement
75
177
  requirements:
76
- - - ! '>='
178
+ - - ">="
77
179
  - !ruby/object:Gem::Version
78
180
  version: '0'
79
181
  requirements: []
80
- rubyforge_project:
81
- rubygems_version: 2.0.3
82
- signing_key:
182
+ rubygems_version: 3.1.6
183
+ signing_key:
83
184
  specification_version: 4
84
185
  summary: rubyzip is a ruby module for reading and writing zip files
85
186
  test_files: []