cloudinary 2.1.2 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/cloudinary.gemspec +1 -0
- data/lib/active_storage/service/cloudinary_service.rb +51 -4
- data/lib/cloudinary/api.rb +29 -6
- data/lib/cloudinary/base_api.rb +1 -1
- data/lib/cloudinary/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1244ab3ce91f6fda0b07e5438ed79f896cde743306efb9c3ac58e5a5f1d4a6dc
|
4
|
+
data.tar.gz: a36510b3d2a2e1b788c2455e5def6f314b78b0b94def573a75a4750e96498b6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ba876181927174ec445d3abd04c79cc03af3837713c234ea9a89651131b6dd4c4be6e3ec02d155596d4f2ce821b269600adda74210408af066b04e0671169fb
|
7
|
+
data.tar.gz: 8bcbb47be56d985537d237fcd5989979555ba0d622bf8a6a3f60484e8b31ffd7d0682353ce4768e4f732edb3fe1a909e001640226fc8fe085ff35cc321b662c6
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
2.3.0 / 2025-02-20
|
2
|
+
==================
|
3
|
+
|
4
|
+
New functionality and features
|
5
|
+
------------------------------
|
6
|
+
|
7
|
+
* Add support for `429 Too Many Requests` HTTP status code
|
8
|
+
* Add support for `allow_dynamic_list_values` parameter in `MetadataField`
|
9
|
+
* Add support for `config` Admin API
|
10
|
+
|
11
|
+
2.2.0 / 2024-09-08
|
12
|
+
==================
|
13
|
+
|
14
|
+
New functionality and features
|
15
|
+
------------------------------
|
16
|
+
|
17
|
+
* Add support for ActiveStorage model service configuration
|
18
|
+
|
19
|
+
Other Changes
|
20
|
+
-------------
|
21
|
+
|
22
|
+
* Fix asset type detection in ActiveStorage
|
23
|
+
* Add explicit `ostruct` dependency
|
24
|
+
|
1
25
|
2.1.2 / 2024-08-18
|
2
26
|
==================
|
3
27
|
|
data/cloudinary.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_dependency "faraday", ">= 2.0.1", "< 3.0.0"
|
28
28
|
s.add_dependency "faraday-multipart", "~> 1.0", ">= 1.0.4"
|
29
29
|
s.add_dependency 'faraday-follow_redirects', '~> 0.3.0'
|
30
|
+
s.add_dependency "ostruct"
|
30
31
|
|
31
32
|
s.add_development_dependency "rails", ">= 6.1.7", "< 8.0.0"
|
32
33
|
s.add_development_dependency "rexml", ">= 3.2.5", "< 4.0.0"
|
@@ -17,9 +17,13 @@ module CloudinaryHelper
|
|
17
17
|
alias cloudinary_url_internal_original cloudinary_url_internal
|
18
18
|
|
19
19
|
def cloudinary_url_internal(source, options = {})
|
20
|
-
|
21
|
-
|
20
|
+
service_instance, options = ActiveStorage::Service::CloudinaryService.fetch_service_instance_and_config(source, options)
|
21
|
+
service_instance ||= ActiveStorage::Blob.service
|
22
|
+
|
23
|
+
if defined?(service_instance.public_id) && options.fetch(:type, "").to_s != "fetch"
|
24
|
+
source = service_instance.public_id(source)
|
22
25
|
end
|
26
|
+
|
23
27
|
cloudinary_url_internal_original(source, options)
|
24
28
|
end
|
25
29
|
end
|
@@ -58,6 +62,7 @@ module ActiveStorage
|
|
58
62
|
end
|
59
63
|
|
60
64
|
def url(key, filename: nil, content_type: '', **options)
|
65
|
+
key = find_blob_or_use_key(key)
|
61
66
|
instrument :url, key: key do |payload|
|
62
67
|
url = Cloudinary::Utils.cloudinary_url(
|
63
68
|
full_public_id_internal(key, options),
|
@@ -101,6 +106,7 @@ module ActiveStorage
|
|
101
106
|
end
|
102
107
|
|
103
108
|
def delete(key)
|
109
|
+
key = find_blob_or_use_key(key)
|
104
110
|
instrument :delete, key: key do
|
105
111
|
options = {
|
106
112
|
resource_type: resource_type(nil, key),
|
@@ -117,6 +123,7 @@ module ActiveStorage
|
|
117
123
|
end
|
118
124
|
|
119
125
|
def exist?(key)
|
126
|
+
key = find_blob_or_use_key(key)
|
120
127
|
instrument :exist, key: key do |payload|
|
121
128
|
begin
|
122
129
|
options = {
|
@@ -153,8 +160,7 @@ module ActiveStorage
|
|
153
160
|
|
154
161
|
# Return the partial content in the byte +range+ of the file at the +key+.
|
155
162
|
def download_chunk(key, range)
|
156
|
-
|
157
|
-
uri = URI(url)
|
163
|
+
uri = URI(url(key))
|
158
164
|
instrument :download, key: key do
|
159
165
|
req = Net::HTTP::Get.new(uri)
|
160
166
|
range_end = case
|
@@ -190,6 +196,33 @@ module ActiveStorage
|
|
190
196
|
full_public_id_internal(public_id)
|
191
197
|
end
|
192
198
|
|
199
|
+
def self.fetch_service_instance_and_config(source, options)
|
200
|
+
return [nil, options] unless defined?(ActiveStorage::BlobKey) && source.is_a?(ActiveStorage::BlobKey) &&
|
201
|
+
source.respond_to?(:attributes) && source.attributes.key?(:service_name)
|
202
|
+
|
203
|
+
service_name = source.attributes[:service_name]
|
204
|
+
|
205
|
+
begin
|
206
|
+
service_instance = ActiveStorage::Blob.services.fetch(service_name.to_sym)
|
207
|
+
|
208
|
+
unless service_instance.instance_of?(ActiveStorage::Service::CloudinaryService)
|
209
|
+
Rails.logger.error "Expected service instance #{service_instance.class.name} to be of type ActiveStorage::Service::CloudinaryService."
|
210
|
+
return [nil, options]
|
211
|
+
end
|
212
|
+
|
213
|
+
service_config = Rails.application.config.active_storage.service_configurations.fetch(service_name)
|
214
|
+
options = service_config.merge(options)
|
215
|
+
rescue NameError => e
|
216
|
+
Rails.logger.error "Failed to retrieve the service instance for #{service_name}: #{e.message}"
|
217
|
+
return [nil, options]
|
218
|
+
rescue => e
|
219
|
+
Rails.logger.error "An unexpected error occurred: #{e.message}"
|
220
|
+
return [nil, options]
|
221
|
+
end
|
222
|
+
|
223
|
+
[service_instance, options]
|
224
|
+
end
|
225
|
+
|
193
226
|
private
|
194
227
|
|
195
228
|
def api_uri(action, options)
|
@@ -278,5 +311,19 @@ module ActiveStorage
|
|
278
311
|
end
|
279
312
|
content_type_to_resource_type(content_type)
|
280
313
|
end
|
314
|
+
|
315
|
+
def find_blob_or_use_key(key)
|
316
|
+
if key.is_a?(ActiveStorage::BlobKey)
|
317
|
+
key
|
318
|
+
else
|
319
|
+
begin
|
320
|
+
blob = ActiveStorage::Blob.find_by(key: key)
|
321
|
+
blob ? ActiveStorage::BlobKey.new(blob.attributes.as_json) : key
|
322
|
+
rescue ActiveRecord::StatementInvalid => e
|
323
|
+
# Return the original key if an error occurs
|
324
|
+
key
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
281
328
|
end
|
282
329
|
end
|
data/lib/cloudinary/api.rb
CHANGED
@@ -14,6 +14,22 @@ class Cloudinary::Api
|
|
14
14
|
call_api(:get, "ping", {}, options)
|
15
15
|
end
|
16
16
|
|
17
|
+
# Retrieves account configuration details.
|
18
|
+
#
|
19
|
+
# @param [Hash] options The optional parameters.
|
20
|
+
#
|
21
|
+
# @return [Cloudinary::Api::Response]
|
22
|
+
#
|
23
|
+
# @raise [Cloudinary::Api::Error]
|
24
|
+
#
|
25
|
+
# @see https://cloudinary.com/documentation/admin_api#config
|
26
|
+
def self.config(options={})
|
27
|
+
uri = "config"
|
28
|
+
params = only(options, :settings)
|
29
|
+
|
30
|
+
call_api(:get, uri, params, options)
|
31
|
+
end
|
32
|
+
|
17
33
|
# Gets cloud usage details.
|
18
34
|
#
|
19
35
|
# Returns a report detailing your current Cloudinary cloud usage details, including
|
@@ -1021,9 +1037,7 @@ class Cloudinary::Api
|
|
1021
1037
|
#
|
1022
1038
|
# @see https://cloudinary.com/documentation/admin_api#create_a_metadata_field
|
1023
1039
|
def self.add_metadata_field(field, options = {})
|
1024
|
-
|
1025
|
-
|
1026
|
-
call_metadata_api(:post, [], params, options)
|
1040
|
+
call_metadata_api(:post, [], prepare_metadata_field_params(field), options)
|
1027
1041
|
end
|
1028
1042
|
|
1029
1043
|
# Updates a metadata field by external ID.
|
@@ -1040,10 +1054,19 @@ class Cloudinary::Api
|
|
1040
1054
|
#
|
1041
1055
|
# @see https://cloudinary.com/documentation/admin_api#update_a_metadata_field_by_external_id
|
1042
1056
|
def self.update_metadata_field(field_external_id, field, options = {})
|
1043
|
-
uri
|
1044
|
-
params = only(field, :label, :mandatory, :default_value, :validation)
|
1057
|
+
uri = [field_external_id]
|
1045
1058
|
|
1046
|
-
call_metadata_api(:put, uri,
|
1059
|
+
call_metadata_api(:put, uri, prepare_metadata_field_params(field), options)
|
1060
|
+
end
|
1061
|
+
|
1062
|
+
# Prepares optional parameters for add/update_metadata_field API calls.
|
1063
|
+
# @param [Hash] options Additional options
|
1064
|
+
# @return [Object] Optional parameters
|
1065
|
+
def self.prepare_metadata_field_params(field)
|
1066
|
+
only(field,
|
1067
|
+
:type, :external_id, :label, :mandatory, :restrictions, :default_value, :default_disabled,
|
1068
|
+
:validation, :datasource, :allow_dynamic_list_values
|
1069
|
+
)
|
1047
1070
|
end
|
1048
1071
|
|
1049
1072
|
# Deletes a metadata field definition by external ID.
|
data/lib/cloudinary/base_api.rb
CHANGED
@@ -57,7 +57,7 @@ module Cloudinary::BaseApi
|
|
57
57
|
when 403 then NotAllowed
|
58
58
|
when 404 then NotFound
|
59
59
|
when 409 then AlreadyExists
|
60
|
-
when 420 then RateLimited
|
60
|
+
when 420, 429 then RateLimited
|
61
61
|
when 500 then GeneralError
|
62
62
|
else raise GeneralError.new("Server returned unexpected status code - #{response.status} - #{response.body}")
|
63
63
|
end
|
data/lib/cloudinary/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudinary
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nadav Soferman
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2025-02-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: faraday
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.3.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: ostruct
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rails
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|