shrine-cloudinary 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +39 -24
- data/lib/shrine/storage/cloudinary.rb +15 -8
- data/shrine-cloudinary.gemspec +2 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40214d8c6cb86f477773409ad1b2bd939c9cb781
|
4
|
+
data.tar.gz: e17dc751f371937e136ba2f915a6df65be6ed2e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d57b2b9cb32ae0ad2f49084039ec26bc97143b657c06236f7fd452905d440b08cb983f0c2bbd12c99cb667f65abac9cd10900fc4e4a50d5998480bfdbda4b6d
|
7
|
+
data.tar.gz: fe772efa20d956fd9c867ba511276d8ec394d774b379aaa203802a756efce23465a6cfe7f41ea106f1b6a3fd1e7c5a3ff658698f75538c709587d9dfd6039ce1
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Shrine::Cloudinary
|
1
|
+
# Shrine::Storage::Cloudinary
|
2
2
|
|
3
3
|
Provides [Cloudinary] storage for [Shrine].
|
4
4
|
|
@@ -92,27 +92,6 @@ user.avatar_url(width: 0.2, crop: :scale)
|
|
92
92
|
|
93
93
|
See [Rails image manipulation] for all URL options you can pass in.
|
94
94
|
|
95
|
-
### Large files
|
96
|
-
|
97
|
-
If you're uploading large files with Cloudinary (like videos), you can take
|
98
|
-
advantage of Cloudinary's special "chunked" upload API, by passing the filesize
|
99
|
-
threshold after which the special API will be used:
|
100
|
-
|
101
|
-
```rb
|
102
|
-
# Upload files larger than 100 MB using the "chunked" upload API
|
103
|
-
Shrine::Storage::Cloudinary.new(large: 100*1024*1024)
|
104
|
-
```
|
105
|
-
|
106
|
-
The default chunk size is 20 MB, but you can change that by passing
|
107
|
-
`:chunk_size` to `:upload_options`:
|
108
|
-
|
109
|
-
```rb
|
110
|
-
Shrine::Storage::Cloudinary.new(
|
111
|
-
large: 100*1024*1024 # 100 MB
|
112
|
-
upload_options: {chunk_size: 5*1024*1204} # 5 MB
|
113
|
-
)
|
114
|
-
```
|
115
|
-
|
116
95
|
### Metadata
|
117
96
|
|
118
97
|
If you decide to do incoming transformations (processing on upload),
|
@@ -147,8 +126,42 @@ user.avatar.metadata["cloudinary"] #=>
|
|
147
126
|
# }
|
148
127
|
```
|
149
128
|
|
150
|
-
If you're using
|
151
|
-
return this
|
129
|
+
This is especially useful for saving [responsive breakpoints]. If you're using
|
130
|
+
the storage directly, `Shrine::Storage::Cloudinary#upload` will return this
|
131
|
+
hash.
|
132
|
+
|
133
|
+
### Large files
|
134
|
+
|
135
|
+
If you're uploading large files with Cloudinary (like videos), you can take
|
136
|
+
advantage of Cloudinary's special "chunked" upload API, by passing the filesize
|
137
|
+
threshold after which the special API will be used:
|
138
|
+
|
139
|
+
```rb
|
140
|
+
# Upload files larger than 100 MB using the "chunked" upload API
|
141
|
+
Shrine::Storage::Cloudinary.new(large: 100*1024*1024)
|
142
|
+
```
|
143
|
+
|
144
|
+
The default chunk size is 20 MB, but you can change that by passing
|
145
|
+
`:chunk_size` to `:upload_options`:
|
146
|
+
|
147
|
+
```rb
|
148
|
+
Shrine::Storage::Cloudinary.new(
|
149
|
+
large: 100*1024*1024 # 100 MB
|
150
|
+
upload_options: {chunk_size: 5*1024*1204} # 5 MB
|
151
|
+
)
|
152
|
+
```
|
153
|
+
|
154
|
+
### Updating
|
155
|
+
|
156
|
+
Sometimes you may want to apply actions to already uploaded files, e.g.
|
157
|
+
regenerate tranformations. This storage provides the `#update` method which
|
158
|
+
delegates to Cloudinary's [explicit API]:
|
159
|
+
|
160
|
+
```rb
|
161
|
+
cloudinary = Shrine::Storage::Cloudinary.new
|
162
|
+
# ...
|
163
|
+
cloudinary.update("image.jpg", eager: {...})
|
164
|
+
```
|
152
165
|
|
153
166
|
### Clearing storage
|
154
167
|
|
@@ -186,3 +199,5 @@ $ bundle exec rake test
|
|
186
199
|
[Shrine]: https://github.com/janko-m/shrine
|
187
200
|
[Cloudinary options]: http://cloudinary.com/documentation/upload_images#remote_upload
|
188
201
|
[Rails image manipulation]: http://cloudinary.com/documentation/rails_image_manipulation
|
202
|
+
[responsive breakpoints]: http://cloudinary.com/blog/introducing_intelligent_responsive_image_breakpoints_solutions
|
203
|
+
[explicit API]: http://cloudinary.com/documentation/image_upload_api_reference#explicit
|
@@ -15,15 +15,15 @@ class Shrine
|
|
15
15
|
@store_data = store_data
|
16
16
|
end
|
17
17
|
|
18
|
-
def upload(io, id,
|
18
|
+
def upload(io, id, shrine_metadata: {}, **upload_options)
|
19
19
|
options = {public_id: public_id(id)}
|
20
|
+
options.update(@upload_options)
|
20
21
|
options.update(upload_options)
|
21
|
-
options.update(metadata.delete("cloudinary") || {})
|
22
22
|
|
23
23
|
result = store(io, **options)
|
24
24
|
|
25
25
|
update_id!(result, id)
|
26
|
-
update_metadata!(result,
|
26
|
+
update_metadata!(result, shrine_metadata)
|
27
27
|
|
28
28
|
result
|
29
29
|
end
|
@@ -32,6 +32,10 @@ class Shrine
|
|
32
32
|
Down.download(url(id))
|
33
33
|
end
|
34
34
|
|
35
|
+
def update(id, **options)
|
36
|
+
uploader.explicit(public_id(id), resource_type: resource_type, type: type, **options)
|
37
|
+
end
|
38
|
+
|
35
39
|
def move(io, id, metadata = {})
|
36
40
|
uploader.rename(io.storage.public_id(io.id), public_id(id), resource_type: resource_type)
|
37
41
|
end
|
@@ -66,8 +70,7 @@ class Shrine
|
|
66
70
|
utils.cloudinary_url(path(id), resource_type: resource_type, type: type, **options)
|
67
71
|
end
|
68
72
|
|
69
|
-
def clear!(
|
70
|
-
raise Shrine::Confirm unless confirm == :confirm
|
73
|
+
def clear!(**options)
|
71
74
|
if prefix
|
72
75
|
api.delete_resources_by_prefix(prefix, resource_type: resource_type, **options)
|
73
76
|
else
|
@@ -93,7 +96,7 @@ class Shrine
|
|
93
96
|
|
94
97
|
def store(io, chunk_size: nil, **options)
|
95
98
|
if remote?(io)
|
96
|
-
uploader.upload(io.
|
99
|
+
uploader.upload(io.url, **options)
|
97
100
|
else
|
98
101
|
io = io.download if io.is_a?(UploadedFile)
|
99
102
|
if large?(io)
|
@@ -109,7 +112,7 @@ class Shrine
|
|
109
112
|
end
|
110
113
|
|
111
114
|
def remote?(io)
|
112
|
-
io.is_a?(UploadedFile) && io.
|
115
|
+
io.is_a?(UploadedFile) && io.url.to_s =~ /^ftp:|^https?:/
|
113
116
|
end
|
114
117
|
|
115
118
|
def large?(io)
|
@@ -117,7 +120,11 @@ class Shrine
|
|
117
120
|
end
|
118
121
|
|
119
122
|
def update_id!(result, id)
|
120
|
-
|
123
|
+
uploaded_id = result.fetch("public_id")
|
124
|
+
uploaded_id = uploaded_id.match("#{prefix}/").post_match if prefix
|
125
|
+
uploaded_id += ".#{result["format"]}" if result["format"]
|
126
|
+
|
127
|
+
id.replace(uploaded_id)
|
121
128
|
end
|
122
129
|
|
123
130
|
def update_metadata!(result, metadata)
|
data/shrine-cloudinary.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = "shrine-cloudinary"
|
3
|
-
gem.version = "0.
|
3
|
+
gem.version = "0.3.0"
|
4
4
|
|
5
5
|
gem.required_ruby_version = ">= 2.1"
|
6
6
|
|
@@ -13,7 +13,7 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.files = Dir["README.md", "LICENSE.txt", "lib/**/*.rb", "shrine-cloudinary.gemspec"]
|
14
14
|
gem.require_path = "lib"
|
15
15
|
|
16
|
-
gem.add_dependency "shrine", "~>
|
16
|
+
gem.add_dependency "shrine", "~> 2.0"
|
17
17
|
gem.add_dependency "cloudinary"
|
18
18
|
gem.add_dependency "down", ">= 1.0.5"
|
19
19
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shrine-cloudinary
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janko Marohnić
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: shrine
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: cloudinary
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
version: '0'
|
126
126
|
requirements: []
|
127
127
|
rubyforge_project:
|
128
|
-
rubygems_version: 2.
|
128
|
+
rubygems_version: 2.5.1
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: Provides Cloudinary storage for Shrine.
|