cloudinary 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -0
- data/cloudinary.gemspec +1 -0
- data/lib/cloudinary.rb +21 -2
- data/lib/cloudinary/api.rb +126 -94
- data/lib/cloudinary/helper.rb +17 -4
- data/lib/cloudinary/uploader.rb +190 -167
- data/lib/cloudinary/utils.rb +138 -14
- data/lib/cloudinary/version.rb +1 -1
- data/spec/api_spec.rb +168 -115
- data/spec/archive_spec.rb +102 -0
- data/spec/cloudinary_spec.rb +17 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/uploader_spec.rb +90 -44
- data/spec/utils_spec.rb +183 -176
- data/spec/video_tag_spec.rb +7 -2
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0434852c7adc610fb1cf86057bff3e1e4691bae2
|
4
|
+
data.tar.gz: c930430f7658ebba0eb73fc97496d2aaaff84892
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f912c8645358d41d2b69f0ddfde69915e98cfe0221a3f8ce583b83d3f2d936416c23a31f8c3951ec1776a051e13cc04a44d6500034ca8641d5d50b2e4e0bf76d
|
7
|
+
data.tar.gz: 19d6c8c6f0bde05cabbb57565a66eb0fb70a8648daa959c2602c7d012ece530af032fdb012669b1f7f8da78e70f8c69189ce17e2f5033be327d271e06d354749
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,36 @@
|
|
1
1
|
|
2
|
+
1.1.2 / 2015-12-16
|
3
|
+
==================
|
4
|
+
|
5
|
+
* Support new archive (ZIP) creation API:
|
6
|
+
* Uploader: `create_archive`, `create_zip`.
|
7
|
+
* Utils: `download_archive_url`, `download_zip_url`
|
8
|
+
* Helper: `cl_download_archive_url`, `cl_download_zip_url`.
|
9
|
+
* Use basic to_query implementation when Rails is not available.
|
10
|
+
* Allow chained transformations and eager transformations to process width & height when crop is not defined.
|
11
|
+
* Apply style and whitespaces.
|
12
|
+
* Remove redundant variable. Replace if ! with until.
|
13
|
+
* Apply style and whitespaces.
|
14
|
+
* Remove redundant variable
|
15
|
+
* Add `:invalidate` option to `Cloudinary::Uploader.rename`
|
16
|
+
* Add line spacing to text layer
|
17
|
+
* Add upload mapping
|
18
|
+
* Add `Cloudinary::Api.restore`
|
19
|
+
* Add `deep_hash_values` matcher. Add `invalidate` test to `explicit`
|
20
|
+
* Add `Cloudinary.user_platform`
|
21
|
+
* Merge branch 'feature/breakpoints_and_zip'
|
22
|
+
* Add test for `Cloudinary::Uploader.create_zip`
|
23
|
+
* Refactor `create_archive`. Rename `generate_zip_download_url`. Create `download_archive_url`. Add cleanup to spec code.
|
24
|
+
* Add condition to `image_tag` and `image_path` aliasing.
|
25
|
+
* Add `archive_spec.rb`. Add rubyzip development dependency.
|
26
|
+
* Add `Cloudinary::` to `Utils` calls
|
27
|
+
* Fix temp file name in spec. Re-enable deletion of resources after the test.
|
28
|
+
* Add deprecation warning to `zip_download_url`
|
29
|
+
* Fix rake `build` dependency to `cloudinary:fetch_assets`
|
30
|
+
* Apply `symbolize_keys`
|
31
|
+
* Support the aspect_ratio transformation parameter
|
32
|
+
* Support responsive_breakpoints JSON parameter in upload and explicit API
|
33
|
+
|
2
34
|
1.1.1 / 2015-12-04
|
3
35
|
==================
|
4
36
|
|
data/cloudinary.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency "aws_cf_signer"
|
24
24
|
s.add_development_dependency "rspec", '>=3.2'
|
25
25
|
s.add_development_dependency "rspec-rails"
|
26
|
+
s.add_development_dependency "rubyzip"
|
26
27
|
|
27
28
|
if RUBY_VERSION > "1.9"
|
28
29
|
s.add_dependency "rest-client"
|
data/lib/cloudinary.rb
CHANGED
@@ -23,8 +23,27 @@ module Cloudinary
|
|
23
23
|
OLD_AKAMAI_SHARED_CDN = "cloudinary-a.akamaihd.net"
|
24
24
|
SHARED_CDN = AKAMAI_SHARED_CDN
|
25
25
|
|
26
|
-
USER_AGENT = "
|
27
|
-
|
26
|
+
USER_AGENT = "CloudinaryRuby/" + VERSION
|
27
|
+
@@user_platform = ""
|
28
|
+
|
29
|
+
# Add platform information to the USER_AGENT header
|
30
|
+
# This is intended for platform information and not individual applications!
|
31
|
+
def self.user_platform=(value)
|
32
|
+
@@user_platform= value
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.user_platform
|
36
|
+
@@user_platform
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.USER_AGENT
|
40
|
+
if @@user_platform.empty?
|
41
|
+
"#{USER_AGENT}"
|
42
|
+
else
|
43
|
+
"#{@@user_platform} #{USER_AGENT}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
28
47
|
FORMAT_ALIASES = {
|
29
48
|
"jpeg" => "jpg",
|
30
49
|
"jpe" => "jpg",
|
data/lib/cloudinary/api.rb
CHANGED
@@ -8,165 +8,173 @@ class Cloudinary::Api
|
|
8
8
|
class RateLimited < Error; end
|
9
9
|
class BadRequest < Error; end
|
10
10
|
class GeneralError < Error; end
|
11
|
-
class AuthorizationRequired < Error; end
|
11
|
+
class AuthorizationRequired < Error; end
|
12
12
|
class Response < Hash
|
13
13
|
attr_reader :rate_limit_reset_at, :rate_limit_remaining, :rate_limit_allowed
|
14
|
+
|
14
15
|
def initialize(response)
|
15
16
|
self.update(Cloudinary::Api.send(:parse_json_response, response))
|
16
|
-
@rate_limit_allowed
|
17
|
-
@rate_limit_reset_at
|
18
|
-
@rate_limit_remaining = response.headers[:x_featureratelimit_remaining].to_i
|
17
|
+
@rate_limit_allowed = response.headers[:x_featureratelimit_limit].to_i
|
18
|
+
@rate_limit_reset_at = Time.parse(response.headers[:x_featureratelimit_reset])
|
19
|
+
@rate_limit_remaining = response.headers[:x_featureratelimit_remaining].to_i
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
22
23
|
def self.ping(options={})
|
23
24
|
call_api(:get, "ping", {}, options)
|
24
25
|
end
|
25
|
-
|
26
|
+
|
26
27
|
def self.usage(options={})
|
27
28
|
call_api(:get, "usage", {}, options)
|
28
29
|
end
|
29
|
-
|
30
|
+
|
30
31
|
def self.resource_types(options={})
|
31
32
|
call_api(:get, "resources", {}, options)
|
32
33
|
end
|
33
34
|
|
34
35
|
def self.resources(options={})
|
35
36
|
resource_type = options[:resource_type] || "image"
|
36
|
-
type
|
37
|
-
uri
|
38
|
-
uri
|
39
|
-
call_api(:get, uri, only(options, :next_cursor, :max_results, :prefix, :tags, :context, :moderations, :direction, :start_at), options)
|
37
|
+
type = options[:type]
|
38
|
+
uri = "resources/#{resource_type}"
|
39
|
+
uri += "/#{type}" unless type.blank?
|
40
|
+
call_api(:get, uri, only(options, :next_cursor, :max_results, :prefix, :tags, :context, :moderations, :direction, :start_at), options)
|
40
41
|
end
|
41
|
-
|
42
|
+
|
42
43
|
def self.resources_by_tag(tag, options={})
|
43
44
|
resource_type = options[:resource_type] || "image"
|
44
|
-
uri
|
45
|
-
call_api(:get, uri, only(options, :next_cursor, :max_results, :tags, :context, :moderations, :direction), options)
|
45
|
+
uri = "resources/#{resource_type}/tags/#{tag}"
|
46
|
+
call_api(:get, uri, only(options, :next_cursor, :max_results, :tags, :context, :moderations, :direction), options)
|
46
47
|
end
|
47
|
-
|
48
|
+
|
48
49
|
def self.resources_by_moderation(kind, status, options={})
|
49
50
|
resource_type = options[:resource_type] || "image"
|
50
|
-
uri
|
51
|
-
call_api(:get, uri, only(options, :next_cursor, :max_results, :tags, :context, :moderations, :direction), options)
|
51
|
+
uri = "resources/#{resource_type}/moderations/#{kind}/#{status}"
|
52
|
+
call_api(:get, uri, only(options, :next_cursor, :max_results, :tags, :context, :moderations, :direction), options)
|
52
53
|
end
|
53
|
-
|
54
|
+
|
54
55
|
def self.resources_by_ids(public_ids, options={})
|
55
56
|
resource_type = options[:resource_type] || "image"
|
56
|
-
type
|
57
|
-
uri
|
57
|
+
type = options[:type] || "upload"
|
58
|
+
uri = "resources/#{resource_type}/#{type}"
|
58
59
|
call_api(:get, uri, only(options, :tags, :context, :moderations).merge(:public_ids => public_ids), options)
|
59
60
|
end
|
60
|
-
|
61
|
+
|
61
62
|
def self.resource(public_id, options={})
|
62
63
|
resource_type = options[:resource_type] || "image"
|
63
|
-
type
|
64
|
-
uri
|
65
|
-
call_api(:get, uri, only(options, :colors, :exif, :faces, :image_metadata, :pages, :phash, :coordinates, :max_results), options)
|
64
|
+
type = options[:type] || "upload"
|
65
|
+
uri = "resources/#{resource_type}/#{type}/#{public_id}"
|
66
|
+
call_api(:get, uri, only(options, :colors, :exif, :faces, :image_metadata, :pages, :phash, :coordinates, :max_results), options)
|
66
67
|
end
|
67
|
-
|
68
|
-
def self.
|
68
|
+
|
69
|
+
def self.restore(public_ids, options={})
|
69
70
|
resource_type = options[:resource_type] || "image"
|
70
|
-
type
|
71
|
-
uri
|
71
|
+
type = options[:type] || "upload"
|
72
|
+
uri = "resources/#{resource_type}/#{type}/restore"
|
73
|
+
call_api(:post, uri, { :public_ids => public_ids }, options)
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.update(public_id, options={})
|
77
|
+
resource_type = options[:resource_type] || "image"
|
78
|
+
type = options[:type] || "upload"
|
79
|
+
uri = "resources/#{resource_type}/#{type}/#{public_id}"
|
72
80
|
update_options = {
|
73
|
-
:tags
|
74
|
-
:context
|
75
|
-
:face_coordinates
|
81
|
+
:tags => options[:tags] && Cloudinary::Utils.build_array(options[:tags]).join(","),
|
82
|
+
:context => Cloudinary::Utils.encode_hash(options[:context]),
|
83
|
+
:face_coordinates => Cloudinary::Utils.encode_double_array(options[:face_coordinates]),
|
76
84
|
:custom_coordinates => Cloudinary::Utils.encode_double_array(options[:custom_coordinates]),
|
77
|
-
:moderation_status
|
78
|
-
:raw_convert
|
79
|
-
:ocr
|
80
|
-
:categorization
|
81
|
-
:detection
|
82
|
-
:similarity_search
|
85
|
+
:moderation_status => options[:moderation_status],
|
86
|
+
:raw_convert => options[:raw_convert],
|
87
|
+
:ocr => options[:ocr],
|
88
|
+
:categorization => options[:categorization],
|
89
|
+
:detection => options[:detection],
|
90
|
+
:similarity_search => options[:similarity_search],
|
83
91
|
:background_removal => options[:background_removal],
|
84
|
-
:auto_tagging
|
92
|
+
:auto_tagging => options[:auto_tagging] && options[:auto_tagging].to_f
|
85
93
|
}
|
86
94
|
call_api(:post, uri, update_options, options)
|
87
95
|
end
|
88
|
-
|
96
|
+
|
89
97
|
def self.delete_resources(public_ids, options={})
|
90
98
|
resource_type = options[:resource_type] || "image"
|
91
|
-
type
|
92
|
-
uri
|
93
|
-
call_api(:delete, uri, {:public_ids=>public_ids}.merge(only(options, :keep_original, :invalidate)), options)
|
99
|
+
type = options[:type] || "upload"
|
100
|
+
uri = "resources/#{resource_type}/#{type}"
|
101
|
+
call_api(:delete, uri, { :public_ids => public_ids }.merge(only(options, :keep_original, :invalidate)), options)
|
94
102
|
end
|
95
103
|
|
96
104
|
def self.delete_resources_by_prefix(prefix, options={})
|
97
105
|
resource_type = options[:resource_type] || "image"
|
98
|
-
type
|
99
|
-
uri
|
100
|
-
call_api(:delete, uri, {:prefix=>prefix}.merge(only(options, :keep_original, :next_cursor, :invalidate)), options)
|
106
|
+
type = options[:type] || "upload"
|
107
|
+
uri = "resources/#{resource_type}/#{type}"
|
108
|
+
call_api(:delete, uri, { :prefix => prefix }.merge(only(options, :keep_original, :next_cursor, :invalidate)), options)
|
101
109
|
end
|
102
|
-
|
110
|
+
|
103
111
|
def self.delete_all_resources(options={})
|
104
112
|
resource_type = options[:resource_type] || "image"
|
105
|
-
type
|
106
|
-
uri
|
107
|
-
call_api(:delete, uri, {:all=>true}.merge(only(options, :keep_original, :next_cursor, :invalidate)), options)
|
113
|
+
type = options[:type] || "upload"
|
114
|
+
uri = "resources/#{resource_type}/#{type}"
|
115
|
+
call_api(:delete, uri, { :all => true }.merge(only(options, :keep_original, :next_cursor, :invalidate)), options)
|
108
116
|
end
|
109
|
-
|
117
|
+
|
110
118
|
def self.delete_resources_by_tag(tag, options={})
|
111
119
|
resource_type = options[:resource_type] || "image"
|
112
|
-
uri
|
113
|
-
call_api(:delete, uri, only(options, :keep_original, :next_cursor, :invalidate), options)
|
120
|
+
uri = "resources/#{resource_type}/tags/#{tag}"
|
121
|
+
call_api(:delete, uri, only(options, :keep_original, :next_cursor, :invalidate), options)
|
114
122
|
end
|
115
|
-
|
123
|
+
|
116
124
|
def self.delete_derived_resources(derived_resource_ids, options={})
|
117
125
|
uri = "derived_resources"
|
118
|
-
call_api(:delete, uri, {:derived_resource_ids=>derived_resource_ids}, options)
|
126
|
+
call_api(:delete, uri, { :derived_resource_ids => derived_resource_ids }, options)
|
119
127
|
end
|
120
128
|
|
121
129
|
def self.tags(options={})
|
122
130
|
resource_type = options[:resource_type] || "image"
|
123
|
-
uri
|
124
|
-
call_api(:get, uri, only(options, :next_cursor, :max_results, :prefix), options)
|
131
|
+
uri = "tags/#{resource_type}"
|
132
|
+
call_api(:get, uri, only(options, :next_cursor, :max_results, :prefix), options)
|
125
133
|
end
|
126
|
-
|
134
|
+
|
127
135
|
def self.transformations(options={})
|
128
|
-
call_api(:get, "transformations", only(options, :next_cursor, :max_results), options)
|
136
|
+
call_api(:get, "transformations", only(options, :next_cursor, :max_results), options)
|
129
137
|
end
|
130
138
|
|
131
139
|
def self.transformation(transformation, options={})
|
132
|
-
call_api(:get, "transformations/#{transformation_string(transformation)}", only(options, :max_results), options)
|
140
|
+
call_api(:get, "transformations/#{transformation_string(transformation)}", only(options, :max_results), options)
|
133
141
|
end
|
134
|
-
|
142
|
+
|
135
143
|
def self.delete_transformation(transformation, options={})
|
136
|
-
call_api(:delete, "transformations/#{transformation_string(transformation)}", {}, options)
|
144
|
+
call_api(:delete, "transformations/#{transformation_string(transformation)}", {}, options)
|
137
145
|
end
|
138
|
-
|
146
|
+
|
139
147
|
# updates - supports:
|
140
148
|
# "allowed_for_strict" boolean
|
141
149
|
# "unsafe_update" transformation params - updates a named transformation parameters without regenerating existing images
|
142
150
|
def self.update_transformation(transformation, updates, options={})
|
143
|
-
params
|
151
|
+
params = only(updates, :allowed_for_strict)
|
144
152
|
params[:unsafe_update] = transformation_string(updates[:unsafe_update]) if updates[:unsafe_update]
|
145
153
|
call_api(:put, "transformations/#{transformation_string(transformation)}", params, options)
|
146
154
|
end
|
147
|
-
|
155
|
+
|
148
156
|
def self.create_transformation(name, definition, options={})
|
149
|
-
call_api(:post, "transformations/#{name}", {:transformation=>transformation_string(definition)}, options)
|
157
|
+
call_api(:post, "transformations/#{name}", { :transformation => transformation_string(definition) }, options)
|
150
158
|
end
|
151
|
-
|
159
|
+
|
152
160
|
# upload presets
|
153
161
|
def self.upload_presets(options={})
|
154
|
-
call_api(:get, "upload_presets", only(options, :next_cursor, :max_results), options)
|
162
|
+
call_api(:get, "upload_presets", only(options, :next_cursor, :max_results), options)
|
155
163
|
end
|
156
164
|
|
157
165
|
def self.upload_preset(name, options={})
|
158
166
|
call_api(:get, "upload_presets/#{name}", only(options, :max_results), options)
|
159
167
|
end
|
160
|
-
|
168
|
+
|
161
169
|
def self.delete_upload_preset(name, options={})
|
162
|
-
call_api(:delete, "upload_presets/#{name}", {}, options)
|
170
|
+
call_api(:delete, "upload_presets/#{name}", {}, options)
|
163
171
|
end
|
164
|
-
|
172
|
+
|
165
173
|
def self.update_upload_preset(name, options={})
|
166
174
|
params = Cloudinary::Uploader.build_upload_params(options)
|
167
175
|
call_api(:put, "upload_presets/#{name}", params.merge(only(options, :unsigned, :disallow_public_id)), options)
|
168
176
|
end
|
169
|
-
|
177
|
+
|
170
178
|
def self.create_upload_preset(options={})
|
171
179
|
params = Cloudinary::Uploader.build_upload_params(options)
|
172
180
|
call_api(:post, "upload_presets", params.merge(only(options, :name, :unsigned, :disallow_public_id)), options)
|
@@ -179,55 +187,79 @@ class Cloudinary::Api
|
|
179
187
|
def self.subfolders(of_folder_path, options={})
|
180
188
|
call_api(:get, "folders/#{of_folder_path}", {}, options)
|
181
189
|
end
|
182
|
-
|
190
|
+
|
191
|
+
def self.upload_mappings(options={})
|
192
|
+
params = only(options, :next_cursor, :max_results)
|
193
|
+
call_api(:get, :upload_mappings, params, options)
|
194
|
+
end
|
195
|
+
|
196
|
+
def self.upload_mapping(name=nil, options={})
|
197
|
+
call_api(:get, 'upload_mappings', { :folder => name }, options)
|
198
|
+
end
|
199
|
+
|
200
|
+
def self.delete_upload_mapping(name, options={})
|
201
|
+
call_api(:delete, 'upload_mappings', { :folder => name }, options)
|
202
|
+
end
|
203
|
+
|
204
|
+
def self.update_upload_mapping(name, options={})
|
205
|
+
params = only(options, :template)
|
206
|
+
params[:folder] = name
|
207
|
+
call_api(:put, 'upload_mappings', params, options)
|
208
|
+
end
|
209
|
+
|
210
|
+
def self.create_upload_mapping(name, options={})
|
211
|
+
params = only(options, :template)
|
212
|
+
params[:folder] = name
|
213
|
+
call_api(:post, 'upload_mappings', params, options)
|
214
|
+
end
|
215
|
+
|
183
216
|
protected
|
184
|
-
|
217
|
+
|
185
218
|
def self.call_api(method, uri, params, options)
|
186
219
|
cloudinary = options[:upload_prefix] || Cloudinary.config.upload_prefix || "https://api.cloudinary.com"
|
187
220
|
cloud_name = options[:cloud_name] || Cloudinary.config.cloud_name || raise("Must supply cloud_name")
|
188
|
-
api_key
|
221
|
+
api_key = options[:api_key] || Cloudinary.config.api_key || raise("Must supply api_key")
|
189
222
|
api_secret = options[:api_secret] || Cloudinary.config.api_secret || raise("Must supply api_secret")
|
190
|
-
timeout
|
191
|
-
api_url
|
223
|
+
timeout = options[:timeout] || Cloudinary.config.timeout || 60
|
224
|
+
api_url = [cloudinary, "v1_1", cloud_name, uri].join("/")
|
192
225
|
# Add authentication
|
193
226
|
api_url.sub!(%r(^(https?://)), "\\1#{api_key}:#{api_secret}@")
|
194
|
-
|
195
|
-
RestClient::Request.execute(:method => method, :url => api_url, :payload => params.reject{|k, v| v.nil? || v==""}, :timeout=> timeout, :headers => {"User-Agent" => Cloudinary::USER_AGENT}) do
|
196
|
-
|
227
|
+
|
228
|
+
RestClient::Request.execute(:method => method, :url => api_url, :payload => params.reject { |k, v| v.nil? || v=="" }, :timeout => timeout, :headers => { "User-Agent" => Cloudinary::USER_AGENT }) do
|
229
|
+
|response, request, tmpresult|
|
197
230
|
return Response.new(response) if response.code == 200
|
198
231
|
exception_class = case response.code
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
232
|
+
when 400 then BadRequest
|
233
|
+
when 401 then AuthorizationRequired
|
234
|
+
when 403 then NotAllowed
|
235
|
+
when 404 then NotFound
|
236
|
+
when 409 then AlreadyExists
|
237
|
+
when 420 then RateLimited
|
238
|
+
when 500 then GeneralError
|
239
|
+
else raise GeneralError.new("Server returned unexpected status code - #{response.code} - #{response.body}")
|
207
240
|
end
|
208
241
|
json = parse_json_response(response)
|
209
242
|
raise exception_class.new(json["error"]["message"])
|
210
|
-
end
|
243
|
+
end
|
211
244
|
end
|
212
|
-
|
245
|
+
|
213
246
|
def self.parse_json_response(response)
|
214
247
|
return Cloudinary::Utils.json_decode(response.body)
|
215
248
|
rescue => e
|
216
249
|
# Error is parsing json
|
217
250
|
raise GeneralError.new("Error parsing server response (#{response.code}) - #{response.body}. Got - #{e}")
|
218
251
|
end
|
219
|
-
|
252
|
+
|
220
253
|
def self.only(hash, *keys)
|
221
254
|
result = {}
|
222
|
-
keys.each do
|
223
|
-
|key|
|
255
|
+
keys.each do |key|
|
224
256
|
result[key] = hash[key] if hash.include?(key)
|
225
257
|
result[key] = hash[key.to_s] if hash.include?(key.to_s)
|
226
258
|
end
|
227
259
|
result
|
228
|
-
end
|
229
|
-
|
260
|
+
end
|
261
|
+
|
230
262
|
def self.transformation_string(transformation)
|
231
|
-
transformation
|
263
|
+
transformation.is_a?(String) ? transformation : Cloudinary::Utils.generate_transformation_string(transformation.clone)
|
232
264
|
end
|
233
265
|
end
|
data/lib/cloudinary/helper.rb
CHANGED
@@ -236,10 +236,23 @@ module CloudinaryHelper
|
|
236
236
|
Cloudinary::Utils.private_download_url(public_id, format, options)
|
237
237
|
end
|
238
238
|
|
239
|
+
# Helper method that uses the deprecated ZIP download API.
|
240
|
+
# Replaced by cl_download_zip_url that uses the more advanced and robust archive generation and download API
|
241
|
+
# @deprecated
|
239
242
|
def cl_zip_download_url(tag, options = {})
|
240
243
|
Cloudinary::Utils.zip_download_url(tag, options)
|
241
244
|
end
|
242
245
|
|
246
|
+
# @see {Cloudinary::Utils.download_archive_url}
|
247
|
+
def cl_download_archive_url(options = {})
|
248
|
+
Cloudinary::Utils.download_archive_url(options)
|
249
|
+
end
|
250
|
+
|
251
|
+
# @see {Cloudinary::Utils.download_zip_url}
|
252
|
+
def cl_download_zip_url(options = {})
|
253
|
+
Cloudinary::Utils.download_zip_url(options)
|
254
|
+
end
|
255
|
+
|
243
256
|
def cl_signed_download_url(public_id, options = {})
|
244
257
|
Cloudinary::Utils.signed_download_url(public_id, options)
|
245
258
|
end
|
@@ -251,11 +264,11 @@ module CloudinaryHelper
|
|
251
264
|
include ActionView::Helpers::AssetTagHelper
|
252
265
|
end
|
253
266
|
if defined?(::Rails::VERSION::MAJOR) && ::Rails::VERSION::MAJOR > 2 && Cloudinary.config.enhance_image_tag
|
254
|
-
alias_method_chain :image_tag, :cloudinary
|
255
|
-
alias_method_chain :image_path, :cloudinary
|
267
|
+
alias_method_chain :image_tag, :cloudinary unless public_method_defined? :image_tag_without_cloudinary
|
268
|
+
alias_method_chain :image_path, :cloudinary unless public_method_defined? :image_path_without_cloudinary
|
256
269
|
else
|
257
|
-
alias_method :image_tag_without_cloudinary, :image_tag
|
258
|
-
alias_method :image_path_without_cloudinary, :image_path
|
270
|
+
alias_method :image_tag_without_cloudinary, :image_tag unless public_method_defined? :image_tag_without_cloudinary
|
271
|
+
alias_method :image_path_without_cloudinary, :image_path unless public_method_defined? :image_path_without_cloudinary
|
259
272
|
end
|
260
273
|
end
|
261
274
|
end
|