zipline 1.1.0 → 1.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.
- checksums.yaml +4 -4
- data/README.md +44 -11
- data/lib/zipline.rb +0 -1
- data/lib/zipline/version.rb +1 -1
- data/lib/zipline/zip_generator.rb +16 -8
- data/spec/lib/zipline/zip_generator_spec.rb +9 -9
- data/zipline.gemspec +1 -1
- metadata +4 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96ac7be793e58df09d1d469bdc9caf1ebab6738d
|
4
|
+
data.tar.gz: c6b3d727ce0b40efdc152180f2d9f39a6c457154
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5f83af934fdc07acaa345d62e78ed995529b32b509ee6d828639ba61cd2c7cadc9d9df65df5e27a97293a2ca55e876215569f00aa4ae3e705250d46b7d697bf
|
7
|
+
data.tar.gz: 8f3e3cee734917325717aeb8e6ddbe5d49fa1d17409b8ebdf6a168d6fd2fae7af73d92c8b485b70a13c066087024beeadfe0181fdf3ebb068d388febd2a16150
|
data/README.md
CHANGED
@@ -32,38 +32,71 @@ You'll need to be using puma or some other server that supports streaming output
|
|
32
32
|
|
33
33
|
```Ruby
|
34
34
|
class MyController < ApplicationController
|
35
|
-
# enable streaming responses
|
36
|
-
include ActionController::Streaming
|
37
35
|
# enable zipline
|
38
36
|
include Zipline
|
39
37
|
|
40
38
|
def index
|
41
39
|
users = User.all
|
42
40
|
# you can replace user.avatar with any stream or any object that
|
43
|
-
# responds to :url.
|
41
|
+
# responds to :url, :path or :file.
|
44
42
|
# :modification_time is an optional third argument you can use.
|
45
|
-
files =
|
43
|
+
files = users.map{ |user| [user.avatar, "#{user.username}.png", modification_time: 1.day.ago] }
|
46
44
|
zipline(files, 'avatars.zip')
|
47
45
|
end
|
48
46
|
end
|
49
47
|
```
|
50
48
|
|
49
|
+
### ActiveStorage
|
50
|
+
|
51
|
+
```Ruby
|
52
|
+
users = User.all
|
53
|
+
files = users.map{ |user| [user.avatar, user.avatar.filename] }
|
54
|
+
zipline(files, 'avatars.zip')
|
55
|
+
```
|
56
|
+
|
57
|
+
### Carrierwave
|
58
|
+
|
59
|
+
```Ruby
|
60
|
+
users = User.all
|
61
|
+
files = users.map{ |user| [user.avatar, user.avatar_identifier] }
|
62
|
+
zipline(files, 'avatars.zip')
|
63
|
+
```
|
64
|
+
|
65
|
+
### Paperclip ([deprecated](https://thoughtbot.com/blog/closing-the-trombone))
|
66
|
+
|
67
|
+
```Ruby
|
68
|
+
users = User.all
|
69
|
+
files = users.map{ |user| [user.avatar, user.avatar_file_name] }
|
70
|
+
zipline(files, 'avatars.zip')
|
71
|
+
```
|
72
|
+
|
73
|
+
### Url
|
74
|
+
|
75
|
+
If you know the URL of the remote file you want to include, you can just pass in the
|
76
|
+
URL directly in place of the attachment object.
|
77
|
+
```Ruby
|
78
|
+
avatars = [
|
79
|
+
['http://www.example.com/user1.png', 'user1.png']
|
80
|
+
['http://www.example.com/user2.png', 'user2.png']
|
81
|
+
['http://www.example.com/user3.png', 'user3.png']
|
82
|
+
]
|
83
|
+
zipline(avatars, 'avatars.zip')
|
84
|
+
```
|
85
|
+
|
86
|
+
### Directories
|
87
|
+
|
51
88
|
For directories, just give the files names like "directory/file".
|
52
89
|
|
53
|
-
To stream files from a remote URL, use open-uri with a [lazy enumerator](http://ruby-doc.org/core-2.0.0/Enumerator/Lazy.html):
|
54
90
|
|
55
91
|
```Ruby
|
56
|
-
require 'open-uri'
|
57
92
|
avatars = [
|
58
|
-
# remote_url zip_path
|
93
|
+
# remote_url zip_path zip_tricks_options
|
59
94
|
[ 'http://www.example.com/user1.png', 'avatars/user1.png', modification_time: Time.now.utc ]
|
60
95
|
[ 'http://www.example.com/user2.png', 'avatars/user2.png', modification_time: 1.day.ago ]
|
61
96
|
[ 'http://www.example.com/user3.png', 'avatars/user3.png' ]
|
62
97
|
]
|
63
|
-
|
64
|
-
|
65
|
-
.map { |url, path| [open(url), path] }
|
66
|
-
zipline(file_mappings, 'avatars.zip')
|
98
|
+
|
99
|
+
zipline(avatars, 'avatars.zip')
|
67
100
|
```
|
68
101
|
|
69
102
|
## Contributing
|
data/lib/zipline.rb
CHANGED
data/lib/zipline/version.rb
CHANGED
@@ -47,15 +47,17 @@ module Zipline
|
|
47
47
|
elsif is_io?(file)
|
48
48
|
{file: file}
|
49
49
|
elsif defined?(ActiveStorage::Blob) && file.is_a?(ActiveStorage::Blob)
|
50
|
-
{
|
50
|
+
{blob: file}
|
51
51
|
elsif is_active_storage_attachment?(file) || is_active_storage_one?(file)
|
52
|
-
{
|
52
|
+
{blob: file.blob}
|
53
53
|
elsif file.respond_to? :url
|
54
54
|
{url: file.url}
|
55
55
|
elsif file.respond_to? :path
|
56
56
|
{file: File.open(file.path)}
|
57
57
|
elsif file.respond_to? :file
|
58
58
|
{file: File.open(file.file)}
|
59
|
+
elsif is_url?(file)
|
60
|
+
{url: file}
|
59
61
|
else
|
60
62
|
raise(ArgumentError, 'Bad File/Stream')
|
61
63
|
end
|
@@ -64,17 +66,18 @@ module Zipline
|
|
64
66
|
def write_file(streamer, file, name, options)
|
65
67
|
streamer.write_deflated_file(name, options) do |writer_for_file|
|
66
68
|
if file[:url]
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
69
|
+
the_remote_uri = URI(file[:url])
|
70
|
+
|
71
|
+
Net::HTTP.get_response(the_remote_uri) do |response|
|
72
|
+
response.read_body do |chunk|
|
73
|
+
writer_for_file << chunk
|
72
74
|
end
|
73
75
|
end
|
74
|
-
c.perform
|
75
76
|
elsif file[:file]
|
76
77
|
IO.copy_stream(file[:file], writer_for_file)
|
77
78
|
file[:file].close
|
79
|
+
elsif file[:blob]
|
80
|
+
file[:blob].download { |chunk| writer_for_file << chunk }
|
78
81
|
else
|
79
82
|
raise(ArgumentError, 'Bad File/Stream')
|
80
83
|
end
|
@@ -94,5 +97,10 @@ module Zipline
|
|
94
97
|
def is_active_storage_one?(file)
|
95
98
|
defined?(ActiveStorage::Attached::One) && file.is_a?(ActiveStorage::Attached::One)
|
96
99
|
end
|
100
|
+
|
101
|
+
def is_url?(url)
|
102
|
+
url = URI.parse(url) rescue false
|
103
|
+
url.kind_of?(URI::HTTP) || url.kind_of?(URI::HTTPS)
|
104
|
+
end
|
97
105
|
end
|
98
106
|
end
|
@@ -95,38 +95,38 @@ describe Zipline::ZipGenerator do
|
|
95
95
|
end
|
96
96
|
|
97
97
|
context "Attached::One" do
|
98
|
-
it "
|
98
|
+
it "get blob" do
|
99
99
|
attached = create_attached_one
|
100
100
|
allow_any_instance_of(Object).to receive(:defined?).and_return(true)
|
101
101
|
|
102
102
|
normalized = generator.normalize(attached)
|
103
103
|
|
104
|
-
expect(normalized.keys).to include(:
|
105
|
-
expect(normalized[:
|
104
|
+
expect(normalized.keys).to include(:blob)
|
105
|
+
expect(normalized[:blob]).to be_a(ActiveStorage::Blob)
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
109
|
context "Attachment" do
|
110
|
-
it "
|
110
|
+
it "get blob" do
|
111
111
|
attachment = create_attachment
|
112
112
|
allow_any_instance_of(Object).to receive(:defined?).and_return(true)
|
113
113
|
|
114
114
|
normalized = generator.normalize(attachment)
|
115
115
|
|
116
|
-
expect(normalized.keys).to include(:
|
117
|
-
expect(normalized[:
|
116
|
+
expect(normalized.keys).to include(:blob)
|
117
|
+
expect(normalized[:blob]).to be_a(ActiveStorage::Blob)
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
121
|
context "Blob" do
|
122
|
-
it "
|
122
|
+
it "get blob" do
|
123
123
|
blob = create_blob
|
124
124
|
allow_any_instance_of(Object).to receive(:defined?).and_return(true)
|
125
125
|
|
126
126
|
normalized = generator.normalize(blob)
|
127
127
|
|
128
|
-
expect(normalized.keys).to include(:
|
129
|
-
expect(normalized[:
|
128
|
+
expect(normalized.keys).to include(:blob)
|
129
|
+
expect(normalized[:blob]).to be_a(ActiveStorage::Blob)
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
data/zipline.gemspec
CHANGED
@@ -14,8 +14,8 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.name = "zipline"
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = Zipline::VERSION
|
17
|
+
gem.licenses = ['MIT']
|
17
18
|
|
18
19
|
gem.add_dependency 'zip_tricks', ['>= 4.2.1', '<= 5.0.0']
|
19
20
|
gem.add_dependency 'rails', ['>= 3.2.1', '< 6.1']
|
20
|
-
gem.add_dependency 'curb', ['>= 0.8.0', '< 0.10']
|
21
21
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zipline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ram Dobson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zip_tricks
|
@@ -50,26 +50,6 @@ dependencies:
|
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: '6.1'
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: curb
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- - ">="
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: 0.8.0
|
60
|
-
- - "<"
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0.10'
|
63
|
-
type: :runtime
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 0.8.0
|
70
|
-
- - "<"
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: '0.10'
|
73
53
|
description: a module for streaming dynamically generated zip files
|
74
54
|
email:
|
75
55
|
- ram.dobson@solsystemscompany.com
|
@@ -90,7 +70,8 @@ files:
|
|
90
70
|
- spec/spec_helper.rb
|
91
71
|
- zipline.gemspec
|
92
72
|
homepage: http://github.com/fringd/zipline
|
93
|
-
licenses:
|
73
|
+
licenses:
|
74
|
+
- MIT
|
94
75
|
metadata: {}
|
95
76
|
post_install_message:
|
96
77
|
rdoc_options: []
|