shrine-cloudinary 0.3.1 → 0.4.0

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
  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