cloudinary 2.1.1 → 2.2.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
  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: