active_storage-send_zip 0.2.0 → 0.3.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5dbef1dda4a5236e3290d9cd38a23de7e296b5e404356bf222dfbeb0c75197b
4
- data.tar.gz: d2558817de8b496c48606c1e3af71df086480eede14b55186ea4a5e7206bfe5c
3
+ metadata.gz: 966ba7df8726b10f7eb60c06e8dcd853d83314df3f6b32864f6f664c6232bd3a
4
+ data.tar.gz: 4de295c7dbf7b745e25479dc14cb6ea7e0820de91af42624dcc0e2d2c9ba2032
5
5
  SHA512:
6
- metadata.gz: 49f3758cc21c8a66dce8f69fe231c679f0802ad8374a222f8a178557ac668b5c2cf3ce7ea4a4f1d0c1e40dcb701a65c200de7bea3e82089cc56a3e20d9495e5f
7
- data.tar.gz: 8830d24a60774f277e4576614243a077f661d08313259aaa501692ca5f58cb5bb13ef8975e6659432433d366195211e5f3c38c8bd25e2312feee1352908bf7a6
6
+ metadata.gz: b33e45e395f5afefa479cb379d415186180d8c0841eaa3eb7ac37a935e982e7ef726c1b1b1c5aa7fb789b975d78403b21028a5db9c0f6b01e238bdc2f2200737
7
+ data.tar.gz: 0afb7ed7c8b781bde6b8673e6d5d2536e6891deb6c35959b18944d5ee2f3977ea3c39720a1de1a0c93d2311e4ee2d10ddbde0d94d2292f023ff2cecda4b1446d
@@ -1,3 +1,11 @@
1
+ 0.3.4:
2
+ - add resize before download capability
3
+ 0.3.2:
4
+ - correct rubyzip dependency
5
+ 0.3.1:
6
+ - correct comportement when `ActiveStorage::Attached::Many` is given as paramter
7
+ 0.3.0:
8
+ - correct subfolders creation (and break some methods signature)
1
9
  0.2.0:
2
10
  - move some methods to avoid to polute controller methods
3
11
  - `ActiveStorage::SendZip#save_files_on_server` become `ActiveStorage::SendZipHelperSendZip#save_files_on_server`
data/Gemfile CHANGED
@@ -4,7 +4,3 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in active_storage-send_zip.gemspec
6
6
  gemspec
7
-
8
- gem "rails", "~> 5.2"
9
-
10
- gem "rubyzip", "~> 1.2"
@@ -1,130 +1,146 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_storage-send_zip (0.2.0)
4
+ active_storage-send_zip (0.3.4)
5
+ rails (> 5.2)
6
+ rubyzip (< 3.0)
5
7
 
6
8
  GEM
7
9
  remote: https://rubygems.org/
8
10
  specs:
9
- actioncable (5.2.1.1)
10
- actionpack (= 5.2.1.1)
11
+ actioncable (6.0.3.2)
12
+ actionpack (= 6.0.3.2)
11
13
  nio4r (~> 2.0)
12
14
  websocket-driver (>= 0.6.1)
13
- actionmailer (5.2.1.1)
14
- actionpack (= 5.2.1.1)
15
- actionview (= 5.2.1.1)
16
- activejob (= 5.2.1.1)
15
+ actionmailbox (6.0.3.2)
16
+ actionpack (= 6.0.3.2)
17
+ activejob (= 6.0.3.2)
18
+ activerecord (= 6.0.3.2)
19
+ activestorage (= 6.0.3.2)
20
+ activesupport (= 6.0.3.2)
21
+ mail (>= 2.7.1)
22
+ actionmailer (6.0.3.2)
23
+ actionpack (= 6.0.3.2)
24
+ actionview (= 6.0.3.2)
25
+ activejob (= 6.0.3.2)
17
26
  mail (~> 2.5, >= 2.5.4)
18
27
  rails-dom-testing (~> 2.0)
19
- actionpack (5.2.1.1)
20
- actionview (= 5.2.1.1)
21
- activesupport (= 5.2.1.1)
22
- rack (~> 2.0)
28
+ actionpack (6.0.3.2)
29
+ actionview (= 6.0.3.2)
30
+ activesupport (= 6.0.3.2)
31
+ rack (~> 2.0, >= 2.0.8)
23
32
  rack-test (>= 0.6.3)
24
33
  rails-dom-testing (~> 2.0)
25
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
26
- actionview (5.2.1.1)
27
- activesupport (= 5.2.1.1)
34
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
35
+ actiontext (6.0.3.2)
36
+ actionpack (= 6.0.3.2)
37
+ activerecord (= 6.0.3.2)
38
+ activestorage (= 6.0.3.2)
39
+ activesupport (= 6.0.3.2)
40
+ nokogiri (>= 1.8.5)
41
+ actionview (6.0.3.2)
42
+ activesupport (= 6.0.3.2)
28
43
  builder (~> 3.1)
29
44
  erubi (~> 1.4)
30
45
  rails-dom-testing (~> 2.0)
31
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
32
- activejob (5.2.1.1)
33
- activesupport (= 5.2.1.1)
46
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
47
+ activejob (6.0.3.2)
48
+ activesupport (= 6.0.3.2)
34
49
  globalid (>= 0.3.6)
35
- activemodel (5.2.1.1)
36
- activesupport (= 5.2.1.1)
37
- activerecord (5.2.1.1)
38
- activemodel (= 5.2.1.1)
39
- activesupport (= 5.2.1.1)
40
- arel (>= 9.0)
41
- activestorage (5.2.1.1)
42
- actionpack (= 5.2.1.1)
43
- activerecord (= 5.2.1.1)
50
+ activemodel (6.0.3.2)
51
+ activesupport (= 6.0.3.2)
52
+ activerecord (6.0.3.2)
53
+ activemodel (= 6.0.3.2)
54
+ activesupport (= 6.0.3.2)
55
+ activestorage (6.0.3.2)
56
+ actionpack (= 6.0.3.2)
57
+ activejob (= 6.0.3.2)
58
+ activerecord (= 6.0.3.2)
44
59
  marcel (~> 0.3.1)
45
- activesupport (5.2.1.1)
60
+ activesupport (6.0.3.2)
46
61
  concurrent-ruby (~> 1.0, >= 1.0.2)
47
62
  i18n (>= 0.7, < 2)
48
63
  minitest (~> 5.1)
49
64
  tzinfo (~> 1.1)
50
- arel (9.0.0)
51
- builder (3.2.3)
52
- concurrent-ruby (1.1.3)
53
- crass (1.0.4)
54
- erubi (1.7.1)
55
- globalid (0.4.1)
65
+ zeitwerk (~> 2.2, >= 2.2.2)
66
+ builder (3.2.4)
67
+ concurrent-ruby (1.1.6)
68
+ crass (1.0.6)
69
+ erubi (1.9.0)
70
+ globalid (0.4.2)
56
71
  activesupport (>= 4.2.0)
57
- i18n (1.1.1)
72
+ i18n (1.8.5)
58
73
  concurrent-ruby (~> 1.0)
59
- loofah (2.2.3)
74
+ loofah (2.6.0)
60
75
  crass (~> 1.0.2)
61
76
  nokogiri (>= 1.5.9)
62
77
  mail (2.7.1)
63
78
  mini_mime (>= 0.1.1)
64
79
  marcel (0.3.3)
65
80
  mimemagic (~> 0.3.2)
66
- method_source (0.9.2)
67
- mimemagic (0.3.2)
68
- mini_mime (1.0.1)
69
- mini_portile2 (2.3.0)
70
- minitest (5.11.3)
71
- nio4r (2.3.1)
72
- nokogiri (1.8.5)
73
- mini_portile2 (~> 2.3.0)
74
- rack (2.0.6)
81
+ method_source (1.0.0)
82
+ mimemagic (0.3.5)
83
+ mini_mime (1.0.2)
84
+ mini_portile2 (2.4.0)
85
+ minitest (5.14.1)
86
+ nio4r (2.5.2)
87
+ nokogiri (1.10.10)
88
+ mini_portile2 (~> 2.4.0)
89
+ rack (2.2.3)
75
90
  rack-test (1.1.0)
76
91
  rack (>= 1.0, < 3)
77
- rails (5.2.1.1)
78
- actioncable (= 5.2.1.1)
79
- actionmailer (= 5.2.1.1)
80
- actionpack (= 5.2.1.1)
81
- actionview (= 5.2.1.1)
82
- activejob (= 5.2.1.1)
83
- activemodel (= 5.2.1.1)
84
- activerecord (= 5.2.1.1)
85
- activestorage (= 5.2.1.1)
86
- activesupport (= 5.2.1.1)
92
+ rails (6.0.3.2)
93
+ actioncable (= 6.0.3.2)
94
+ actionmailbox (= 6.0.3.2)
95
+ actionmailer (= 6.0.3.2)
96
+ actionpack (= 6.0.3.2)
97
+ actiontext (= 6.0.3.2)
98
+ actionview (= 6.0.3.2)
99
+ activejob (= 6.0.3.2)
100
+ activemodel (= 6.0.3.2)
101
+ activerecord (= 6.0.3.2)
102
+ activestorage (= 6.0.3.2)
103
+ activesupport (= 6.0.3.2)
87
104
  bundler (>= 1.3.0)
88
- railties (= 5.2.1.1)
105
+ railties (= 6.0.3.2)
89
106
  sprockets-rails (>= 2.0.0)
90
107
  rails-dom-testing (2.0.3)
91
108
  activesupport (>= 4.2.0)
92
109
  nokogiri (>= 1.6)
93
- rails-html-sanitizer (1.0.4)
94
- loofah (~> 2.2, >= 2.2.2)
95
- railties (5.2.1.1)
96
- actionpack (= 5.2.1.1)
97
- activesupport (= 5.2.1.1)
110
+ rails-html-sanitizer (1.3.0)
111
+ loofah (~> 2.3)
112
+ railties (6.0.3.2)
113
+ actionpack (= 6.0.3.2)
114
+ activesupport (= 6.0.3.2)
98
115
  method_source
99
116
  rake (>= 0.8.7)
100
- thor (>= 0.19.0, < 2.0)
101
- rake (10.5.0)
102
- rubyzip (1.2.2)
103
- sprockets (3.7.2)
117
+ thor (>= 0.20.3, < 2.0)
118
+ rake (13.0.1)
119
+ rubyzip (2.3.0)
120
+ sprockets (4.0.2)
104
121
  concurrent-ruby (~> 1.0)
105
122
  rack (> 1, < 3)
106
123
  sprockets-rails (3.2.1)
107
124
  actionpack (>= 4.0)
108
125
  activesupport (>= 4.0)
109
126
  sprockets (>= 3.0.0)
110
- thor (0.20.3)
127
+ thor (1.0.1)
111
128
  thread_safe (0.3.6)
112
- tzinfo (1.2.5)
129
+ tzinfo (1.2.7)
113
130
  thread_safe (~> 0.1)
114
- websocket-driver (0.7.0)
131
+ websocket-driver (0.7.3)
115
132
  websocket-extensions (>= 0.1.0)
116
- websocket-extensions (0.1.3)
133
+ websocket-extensions (0.1.5)
134
+ zeitwerk (2.4.0)
117
135
 
118
136
  PLATFORMS
119
137
  ruby
120
138
 
121
139
  DEPENDENCIES
122
140
  active_storage-send_zip!
123
- bundler (~> 1.17)
141
+ bundler
124
142
  minitest (~> 5.0)
125
- rails (~> 5.2)
126
- rake (~> 10.0)
127
- rubyzip (~> 1.2)
143
+ rake
128
144
 
129
145
  BUNDLED WITH
130
- 1.17.1
146
+ 2.1.4
data/README.md CHANGED
@@ -61,7 +61,10 @@ class HolidaysController < ApplicationController
61
61
  def zip
62
62
  send_zip {
63
63
  'Holidays in Lyon <3' => Holidays.where(place: 'lyon').first.pictures,
64
- 'Holidays in Paris' => Holidays.where(place: 'paris').first.pictures,
64
+ 'Holidays in Paris' => [
65
+ 'Eiffle Tower' => Holidays.where(place: 'eiffle_tower').first.pictures,
66
+ Holidays.where(place: 'paris').first.pictures
67
+ ]
65
68
  }
66
69
  end
67
70
  end
@@ -75,11 +78,43 @@ Will produce a `.zip` archive like this:
75
78
  │   ├── b.png
76
79
  │   └── c.gif
77
80
  └── Holidays in Paris
81
+ ├── Eiffle Tower
82
+ ├── d.jpg
83
+ ├── e.jpg
84
+ ├── f.jpg
78
85
  ├── a.jpg
79
86
  ├── b.png
80
87
  └── c.gif
81
88
  ~~~
82
89
 
90
+
91
+ ### Resize images before downloading
92
+
93
+ You can resize the images before zipping and downloading them :
94
+
95
+ ~~~ruby
96
+ # app/controllers/galleries_controller.rb
97
+ class GalleriesController < ApplicationController
98
+ include ActiveStorage::SendZip
99
+
100
+ # ...
101
+
102
+ # GET /galleries/1/download
103
+ def download
104
+ respond_to do |format|
105
+ if params[:format] == 'web_size'
106
+ format.zip { send_zip @gallery.photos, resize_to_limit: [1920, 1080] }
107
+ elsif params[:format] == 'tiny'
108
+ format.zip { send_zip @gallery.photos, resize_to_limit: [480, 270] }
109
+ else
110
+ format.zip { send_zip @gallery.photos }
111
+ end
112
+ end
113
+ end
114
+ end
115
+ ~~~
116
+
117
+
83
118
  ## Installation
84
119
 
85
120
  Add this line to your application's Gemfile:
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'active_storage/send_zip/version'
@@ -5,7 +7,7 @@ require 'active_storage/send_zip/version'
5
7
  Gem::Specification.new do |spec|
6
8
  spec.name = 'active_storage-send_zip'
7
9
  spec.version = ActiveStorage::SendZip::VERSION
8
- spec.authors = ['Alexandre Rousseau']
10
+ spec.authors = ['Alexandre Rousseau', 'Maxime `biximilien` Gauthier']
9
11
  spec.email = ['contact@rousseau-alexandre.fr']
10
12
 
11
13
  spec.summary = 'Create a zip from one or more Active Storage objects'
@@ -35,7 +37,9 @@ Gem::Specification.new do |spec|
35
37
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
36
38
  spec.require_paths = ['lib']
37
39
 
38
- spec.add_development_dependency 'bundler', '~> 1.17'
40
+ spec.add_development_dependency 'bundler'
39
41
  spec.add_development_dependency 'minitest', '~> 5.0'
40
- spec.add_development_dependency 'rake', '~> 10.0'
42
+ spec.add_development_dependency 'rake'
43
+ spec.add_dependency 'rails', '> 5.2'
44
+ spec.add_dependency 'rubyzip', '< 3.0'
41
45
  end
@@ -14,9 +14,10 @@ module ActiveStorage
14
14
  #
15
15
  # @param active_storages [ActiveStorage::Attached::Many] files to save
16
16
  # @param filename [ActiveStorage::Attached::Many] files to save
17
- def send_zip(active_storages, filename: 'my.zip')
17
+ # @param resize_to_limit [Array] resize to limit filter in ImageProcessing format [width, height]
18
+ def send_zip(active_storages, filename: 'my.zip', resize_to_limit: nil)
18
19
  require 'zip'
19
- files = SendZipHelper.save_files_on_server active_storages
20
+ files = SendZipHelper.save_files_on_server active_storages, resize_to_limit: resize_to_limit
20
21
  zip_data = SendZipHelper.create_temporary_zip_file files
21
22
 
22
23
  send_data(zip_data, type: 'application/zip', filename: filename)
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveStorage
2
4
  module SendZip
3
5
  # The version of this gem
4
- VERSION = '0.2.0'.freeze
6
+ VERSION = '0.3.4'
5
7
  end
6
8
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails'
2
4
  require 'zip'
3
5
  require 'tempfile'
@@ -9,32 +11,60 @@ module ActiveStorage
9
11
  module SendZipHelper
10
12
  # Download active storage files on server in a temporary folder
11
13
  #
12
- # @param files [ActiveStorage::Attached::Many] files to save
13
- # @return [Array<String>] files paths of saved files
14
- def self.save_files_on_server(files)
14
+ # @param files [ActiveStorage::Attached::One|ActiveStorage::Attached::Many|Array|Hash] file(s) to save
15
+ # @param resize_to_limit [Array] resize to limit filter in ImageProcessing format [width, height]
16
+ # @return [String] folder path of saved files
17
+ def self.save_files_on_server(files, resize_to_limit: nil)
15
18
  require 'zip'
16
19
  # get a temporary folder and create it
17
20
  temp_folder = Dir.mktmpdir 'active_storage-send_zip'
18
21
 
19
- if files.is_a? Array
20
- return files.map { |file| save_file_on_server(file, temp_folder) }
21
- elsif files.is_a? Hash
22
- filepaths = []
22
+ if files.is_a? Hash
23
+ filepaths = construct_with_hash(files, temp_folder)
24
+ elsif files.respond_to? :each
25
+ files.each { |file| save_file_on_server(file, temp_folder, resize_to_limit: resize_to_limit) }
26
+ else
27
+ raise ArgumentError, '`files` must be an hash or an iterable object'
28
+ end
23
29
 
24
- files.each do |subfolder, filesHash|
25
- filesHash.each { |f| filepaths << save_file_on_server(f, temp_folder, subfolder: subfolder) }
26
- end
30
+ temp_folder
31
+ end
32
+
33
+ # Parses hash to build out directories where folders are key names
34
+ #
35
+ # @param files [ActiveStorage::Attached::One|ActiveStorage::Attached::Many|Array|Hash] file(s) to save
36
+ # @return [String] folder path of saved files
37
+ def self.construct_with_hash(files, temp_folder)
38
+ filepaths = []
39
+
40
+ files.each do |subfolder, filesHash|
41
+ filesHash = [filesHash] unless filesHash.is_a? Array
42
+
43
+ filesHash.each do |f|
44
+ # Build directory strucutre recursively for hashes
45
+ if f.is_a? Hash
46
+ # Build folder for hash entry
47
+ folder = File.join(temp_folder, subfolder.to_s)
48
+ Dir.mkdir(folder) unless Dir.exist?(folder)
27
49
 
28
- return filepaths
50
+ filepaths += construct_with_hash(f, folder)
51
+ # Save attachement
52
+ else
53
+ filepaths << save_file_on_server(f, temp_folder, subfolder: subfolder.to_s)
54
+ end
55
+ end
29
56
  end
57
+
58
+ filepaths
30
59
  end
31
60
 
32
61
  # Save the given file on the server
33
62
  #
34
63
  # @param file [ActiveStorage::Attached] files to save
35
64
  # @param folder [String] where to store the file
65
+ # @param resize_to_limit [Array] resize to limit filter in ImageProcessing format [width, height]
36
66
  # @return [String] the filepath of file created
37
- def self.save_file_on_server(file, folder, subfolder: nil)
67
+ def self.save_file_on_server(file, folder, subfolder: nil, resize_to_limit: nil)
38
68
  filename = file.filename.to_s
39
69
 
40
70
  folder = File.join(folder, subfolder) unless subfolder.nil?
@@ -53,16 +83,26 @@ module ActiveStorage
53
83
  filepath = File.join folder, filename
54
84
  end
55
85
 
56
- File.open(filepath, 'wb') { |f| f.write(file.download) }
86
+ # resize images if needed
87
+ unless resize_to_limit.nil?
88
+ file = file.variant(resize_to_limit: resize_to_limit).processed
89
+ end
90
+
91
+ # write the file on disk
92
+ File.open(filepath, 'wb') { |f| f.write(file.service.download(file.key)) }
93
+
57
94
  filepath
58
95
  end
59
96
 
60
97
  # Create a temporary zip file & return the content as bytes
61
98
  #
62
- # @param filepaths [Array<String>] files paths
99
+ # @param folderpath [String] folder path
63
100
  # @return [String] as content of zip
64
- def self.create_temporary_zip_file(filepaths)
101
+ def self.create_temporary_zip_file(folderpath)
65
102
  temp_file = Tempfile.new('user.zip')
103
+ folderpath_glob = File.join folderpath, '**', '*'
104
+
105
+ files = Dir.glob(folderpath_glob).reject { |e| File.directory? e }
66
106
 
67
107
  begin
68
108
  # Initialize the temp file as a zip file
@@ -70,19 +110,18 @@ module ActiveStorage
70
110
 
71
111
  # open the zip
72
112
  Zip::File.open(temp_file.path, Zip::File::CREATE) do |zip|
73
- filepaths.each do |filepath|
74
- filename = File.basename filepath
75
- # add file into the zip
76
- zip.add filename, filepath
113
+ files.each do |filepath|
114
+ filepath_zip = filepath.sub(folderpath, '').sub(File::SEPARATOR, '')
115
+ zip.add filepath_zip, filepath
77
116
  end
78
117
  end
79
118
 
80
- return File.read(temp_file.path)
119
+ File.read(temp_file.path)
81
120
  ensure
82
121
  # close all ressources & remove temporary files
83
- temp_file.close
84
- temp_file.unlink
85
- filepaths.each { |filepath| FileUtils.rm(filepath) }
122
+ # temp_file.close
123
+ # temp_file.unlink
124
+ # FileUtils.rm_rf(folderpath)
86
125
  end
87
126
  end
88
127
  end
metadata CHANGED
@@ -1,29 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_storage-send_zip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Rousseau
8
+ - Maxime `biximilien` Gauthier
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2018-12-04 00:00:00.000000000 Z
12
+ date: 2020-07-30 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
- - - "~>"
18
+ - - ">="
18
19
  - !ruby/object:Gem::Version
19
- version: '1.17'
20
+ version: '0'
20
21
  type: :development
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
- - - "~>"
25
+ - - ">="
25
26
  - !ruby/object:Gem::Version
26
- version: '1.17'
27
+ version: '0'
27
28
  - !ruby/object:Gem::Dependency
28
29
  name: minitest
29
30
  requirement: !ruby/object:Gem::Requirement
@@ -42,16 +43,44 @@ dependencies:
42
43
  name: rake
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
- - - "~>"
46
+ - - ">="
46
47
  - !ruby/object:Gem::Version
47
- version: '10.0'
48
+ version: '0'
48
49
  type: :development
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
- - - "~>"
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rails
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">"
61
+ - !ruby/object:Gem::Version
62
+ version: '5.2'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">"
68
+ - !ruby/object:Gem::Version
69
+ version: '5.2'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rubyzip
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "<"
75
+ - !ruby/object:Gem::Version
76
+ version: '3.0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "<"
53
82
  - !ruby/object:Gem::Version
54
- version: '10.0'
83
+ version: '3.0'
55
84
  description: Add a `send_zip` method in your Rails controller to send a `.zip` file
56
85
  containing one (or many) ActiveStorage object(s)
57
86
  email:
@@ -97,8 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
126
  - !ruby/object:Gem::Version
98
127
  version: '0'
99
128
  requirements: []
100
- rubyforge_project:
101
- rubygems_version: 2.7.7
129
+ rubygems_version: 3.0.8
102
130
  signing_key:
103
131
  specification_version: 4
104
132
  summary: Create a zip from one or more Active Storage objects