cloudinary 2.1.1 → 2.2.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
  SHA256:
3
- metadata.gz: 7c9fd54c62a8ad7408044ceb1be3178c98a250a3d874fc9b8f6f47f4e24b676c
4
- data.tar.gz: 5b8b38c41734a1250c23f312e9afff293acddddc2ee86d506b1c0d0a16391520
3
+ metadata.gz: 4f827756d17fc0b871d277a5bbdc6bc1ab3edeb30cf8765f29dd9fda17f6870d
4
+ data.tar.gz: 91e533b452f021f65255e26caed2271d5a96387a5c5728f5268720c9a2306fb6
5
5
  SHA512:
6
- metadata.gz: a4d6c84719bb67ab74ce7575374bfcfee1e3364fa86df4734a7a4146777b05b0f233aa8b3962b6ef86222bf2e91ee1b59be16ba8b7c00166c54da16c875669d0
7
- data.tar.gz: a3af6962c29d2112425b55170a90b63309b1d11418f380b8151988e96f0a8d895fc44a6d1615f4eb0b3eab1d0dfdd47f5fcf6e3d1e2adcd06f7be261e7634d39
6
+ metadata.gz: 837eb7160f55eed0b1df45d041c2a8deb18ccd0acd6ee405cf70f151ee7926bf5715bd9852f7da21ef393a28e8ad630d40770d47ed7b296c915a98dd5fb8f417
7
+ data.tar.gz: a724d55a25e2b09a33d2c722021ad3c335a034e822961f86312916b6296902d1b65417ae0f630537fa10f603cf7ff28f98b291f648777d371d578524a0062ba9
data/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ 2.2.0 / 2024-09-08
2
+ ==================
3
+
4
+ New functionality and features
5
+ ------------------------------
6
+
7
+ * Add support for ActiveStorage model service configuration
8
+
9
+ Other Changes
10
+ -------------
11
+
12
+ * Fix asset type detection in ActiveStorage
13
+ * Add explicit `ostruct` dependency
14
+
15
+ 2.1.2 / 2024-08-18
16
+ ==================
17
+
18
+ * Fix ActiveStorage type detection for email files
19
+ * Add `changelog_uri` to `gemspec`
20
+
1
21
  2.1.1 / 2024-05-28
2
22
  ==================
3
23
 
data/cloudinary.gemspec CHANGED
@@ -13,6 +13,10 @@ Gem::Specification.new do |s|
13
13
  s.summary = %q{Client library for easily using the Cloudinary service}
14
14
  s.description = %q{Client library for easily using the Cloudinary service}
15
15
 
16
+ s.metadata = {
17
+ "changelog_uri" => "https://github.com/cloudinary/cloudinary_gem/blob/master/CHANGELOG.md"
18
+ }
19
+
16
20
  s.files = `git ls-files`.split("\n").select { |f| !f.start_with?("test", "spec", "features", "samples") } +
17
21
  Dir.glob("vendor/assets/javascripts/*/*") + Dir.glob("vendor/assets/html/*")
18
22
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
@@ -23,6 +27,7 @@ Gem::Specification.new do |s|
23
27
  s.add_dependency "faraday", ">= 2.0.1", "< 3.0.0"
24
28
  s.add_dependency "faraday-multipart", "~> 1.0", ">= 1.0.4"
25
29
  s.add_dependency 'faraday-follow_redirects', '~> 0.3.0'
30
+ s.add_dependency "ostruct"
26
31
 
27
32
  s.add_development_dependency "rails", ">= 6.1.7", "< 8.0.0"
28
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
- if defined?(ActiveStorage::Blob.service.public_id) && options.fetch(:type, "").to_s != "fetch"
21
- source = ActiveStorage::Blob.service.public_id(source)
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
- url = Cloudinary::Utils.cloudinary_url(public_id(key), resource_type: resource_type(nil, key))
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)
@@ -255,7 +288,7 @@ module ActiveStorage
255
288
  case type
256
289
  when 'video', 'audio'
257
290
  'video'
258
- when 'text'
291
+ when 'text', 'message'
259
292
  'raw'
260
293
  when 'application'
261
294
  case subtype
@@ -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
@@ -1,4 +1,4 @@
1
1
  # Copyright Cloudinary
2
2
  module Cloudinary
3
- VERSION = "2.1.1"
3
+ VERSION = "2.2.0"
4
4
  end
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.1.1
4
+ version: 2.2.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: 2024-05-28 00:00:00.000000000 Z
13
+ date: 2024-09-08 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
@@ -387,7 +401,8 @@ files:
387
401
  homepage: https://cloudinary.com
388
402
  licenses:
389
403
  - MIT
390
- metadata: {}
404
+ metadata:
405
+ changelog_uri: https://github.com/cloudinary/cloudinary_gem/blob/master/CHANGELOG.md
391
406
  post_install_message:
392
407
  rdoc_options: []
393
408
  require_paths: