shrine-cloudinary 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 88a038d6cf9285136e6a82d4ddf674f91e476802
4
- data.tar.gz: a62342009fd3960a2aeed8e2dd67897bc60d568f
3
+ metadata.gz: 7620a61d65d4509c6835b0ab21fc0f47d13cf39a
4
+ data.tar.gz: d414fe35b912c48e317ed361e5a1a39082c03df7
5
5
  SHA512:
6
- metadata.gz: 8804baaf7341ecabdd1592648a3ab1181e87612e2b145c05314bfd20f384b7c4d5f062fc66ae9d00961979b4a725d58cdfda2a68ba113501f7c6eba0701c332b
7
- data.tar.gz: 8bba0e77831e522c76d03616be52b04f6806c50089d8eb689bae7f8a9188cdf822973f1fd7cfed19137a4dc17f7d9bf91e4fde19e21985e462960bc3942c5dbc
6
+ metadata.gz: 1a181bb8b94a81a687c2ce4bb671799a7445e39565d558f2538d640d841dff5f61ccfbd883a223ea428d076e873587492e57ef40a997c94f73a057d74a09cc87
7
+ data.tar.gz: f81035721ad1988bbb369966a2effa215d79cf451165c90eabe5773077335493e0a15f4a90901506d90dcab8db764b97c099aaedd0a60efbbda3b135afacc191
data/README.md CHANGED
@@ -2,9 +2,8 @@
2
2
 
3
3
  Provides [Cloudinary] storage for [Shrine].
4
4
 
5
- Cloudinary provides storage with advanced on-the-fly processing (as well as
6
- processing on upload) for both images and videos, but can also store any other
7
- types of files.
5
+ Cloudinary provides storage and advanced processing for images and videos, both
6
+ on-demand and on upload.
8
7
 
9
8
  ## Installation
10
9
 
@@ -14,32 +13,62 @@ gem "shrine-cloudinary"
14
13
 
15
14
  ## Usage
16
15
 
17
- First you need to configure the Cloudinary gem:
16
+ You'll typically want to upload photos directly to Cloudinary, so your setup
17
+ might look like this:
18
18
 
19
19
  ```rb
20
20
  require "cloudinary"
21
+ require "shrine/storage/cloudinary"
21
22
 
22
23
  Cloudinary.config(
23
24
  cloud_name: "...",
24
25
  api_key: "...",
25
26
  api_secret: "...",
26
27
  )
28
+
29
+ Shrine.storages = {
30
+ cache: Shrine::Storage::Cloudinary.new(prefix: "cache"), # for direct uploads
31
+ store: Shrine::Storage::Cloudinary.new(prefix: "store"),
32
+ }
27
33
  ```
28
34
 
29
- You can now initialize your storage:
35
+ ### Direct uploads
30
36
 
31
- ```rb
32
- require "shrine/storage/cloudinary"
37
+ Cloudinary supports uploading files directly to their service, freeing your
38
+ application from accepting file uploads. There are three ways in which you
39
+ can do direct uploads:
40
+
41
+ * [unsigned uploads using the widget](http://cloudinary.com/documentation/upload_widget)
42
+ * [unsigned uploads using jQuery](http://cloudinary.com/blog/direct_upload_made_easy_from_browser_or_mobile_app_to_the_cloud)
43
+ * [signed uploads via jQuery](http://cloudinary.com/documentation/jquery_image_upload)
44
+
45
+ The first one is the simplest, you can see the [demo] app with complete
46
+ implementation using shrine-cloudinary. Unsigned uploads don't require
47
+ communicating with the server, you just need to set up an "upload preset".
33
48
 
34
- Shrine.storages[:store] = Shrine::Storage::Cloudinary.new
49
+ If you would prefer that the server controlls who is allowed to upload,
50
+ shrine-cloudinary also supports generating presigns, which works with the
51
+ direct_upload plugin in the same way that S3 does. When rendering on the server
52
+ side, you can generate a presign inline:
53
+
54
+ ```erb
55
+ <input name="file" type="file"
56
+ class="cloudinary-fileupload" data-cloudinary-field="image_id"
57
+ data-form-data="<%= Shrine.storages[:cache].presign.fields.to_json %>" ></input>
35
58
  ```
36
59
 
37
- ### Direct uploads
60
+ Alternatively you can add an endpoint to your app which can generate presigns
61
+ on request, which is suitable for apps where templates are rendered on the
62
+ client-side (see [direct_upload] documentation):
38
63
 
39
- Cloudinary supports uploading files directly to their service, thus bypassing
40
- your application. The easiest way to do that is to setup [direct unsigned
41
- uploads]. Follow the linked blog post for instructions, and see the [demo] app
42
- for a complete implementation.
64
+ ```rb
65
+ Shrine.plugin :direct_upload, presign: true
66
+ ```
67
+ ```rb
68
+ Rails.application.routes.draw do
69
+ mount ImageUploader::UploadEndpoint => "/attachments/images"
70
+ end
71
+ ```
43
72
 
44
73
  ### Copying
45
74
 
@@ -79,7 +108,7 @@ If you want some [Cloudinary options] to be applied to all uploads, you can
79
108
  specify `:upload_options`:
80
109
 
81
110
  ```rb
82
- Shrine::Storage::Cloudinary.new(upload_options: {type: "authenticated"})
111
+ Shrine::Storage::Cloudinary.new(upload_options: {backup: true})
83
112
  ```
84
113
 
85
114
  You can also apply upload options dynamically per upload using the
@@ -233,7 +262,7 @@ $ bundle exec rake test
233
262
 
234
263
  ## Inspiration
235
264
 
236
- This gem has been inspired by [cloudinary]'s CarrierWave integration.
265
+ This gem has been inspired by Cloudinary's [CarrierWave integration].
237
266
 
238
267
  ## License
239
268
 
@@ -241,11 +270,11 @@ This gem has been inspired by [cloudinary]'s CarrierWave integration.
241
270
 
242
271
  [Cloudinary]: http://cloudinary.com/
243
272
  [Shrine]: https://github.com/janko-m/shrine
244
- [cloudinary]: https://github.com/cloudinary/cloudinary_gem
273
+ [CarrierWave integration]: https://github.com/cloudinary/cloudinary_gem
245
274
  [Cloudinary options]: http://cloudinary.com/documentation/upload_images#remote_upload
246
275
  [Rails image manipulation]: http://cloudinary.com/documentation/rails_image_manipulation
247
276
  [responsive breakpoints]: http://cloudinary.com/blog/introducing_intelligent_responsive_image_breakpoints_solutions
248
277
  [explicit API]: http://cloudinary.com/documentation/image_upload_api_reference#explicit
249
- [direct unsigned uploads]: http://cloudinary.com/blog/direct_upload_made_easy_from_browser_or_mobile_app_to_the_cloud
250
278
  [demo]: /demo
251
279
  [control access]: http://cloudinary.com/documentation/upload_images#control_access_to_images
280
+ [direct_upload]: http://shrinerb.com/rdoc/classes/Shrine/Plugins/DirectUpload.html
@@ -69,7 +69,7 @@ class Shrine
69
69
  end
70
70
 
71
71
  def url(id, **options)
72
- ::Cloudinary::Utils.cloudinary_url(path(id), default_options.merge(options))
72
+ ::Cloudinary::Utils.cloudinary_url(path(id), default_options.merge(secure: true, **options))
73
73
  end
74
74
 
75
75
  def clear!(**options)
@@ -80,6 +80,20 @@ class Shrine
80
80
  end
81
81
  end
82
82
 
83
+ def presign(id = nil, **options)
84
+ upload_options.update(@upload_options)
85
+ upload_options.update(id ? {public_id: public_id(id)} : {folder: prefix})
86
+
87
+ fields = ::Cloudinary::Uploader.build_upload_params(upload_options.merge(options))
88
+ fields.reject! { |key, value| value.nil? || value == "" }
89
+ fields[:signature] = ::Cloudinary::Utils.api_sign_request(fields, ::Cloudinary.config.api_secret)
90
+ fields[:api_key] = ::Cloudinary.config.api_key
91
+
92
+ url = ::Cloudinary::Utils.cloudinary_api_url("upload", default_options)
93
+
94
+ Struct.new(:url, :fields).new(url, fields)
95
+ end
96
+
83
97
  protected
84
98
 
85
99
  def public_id(id)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "shrine-cloudinary"
3
- gem.version = "0.3.1"
3
+ gem.version = "0.4.0"
4
4
 
5
5
  gem.required_ruby_version = ">= 2.1"
6
6
 
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.3.1
4
+ version: 0.4.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: 2016-06-02 00:00:00.000000000 Z
11
+ date: 2016-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shrine