cloudinary 1.29.0 → 2.0.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.
@@ -4,15 +4,14 @@
4
4
  require 'digest/sha1'
5
5
  require 'zlib'
6
6
  require 'uri'
7
- require 'aws_cf_signer'
8
7
  require 'json'
9
8
  require 'cgi'
9
+ require 'faraday'
10
+ require 'faraday/multipart'
10
11
  require 'cloudinary/auth_token'
11
12
  require 'cloudinary/responsive'
12
13
 
13
14
  class Cloudinary::Utils
14
- # @deprecated Use Cloudinary::SHARED_CDN
15
- SHARED_CDN = Cloudinary::SHARED_CDN
16
15
  MODE_DOWNLOAD = "download"
17
16
  DEFAULT_RESPONSIVE_WIDTH_TRANSFORMATION = {:width => :auto, :crop => :limit}
18
17
  CONDITIONAL_OPERATORS = {
@@ -98,7 +97,6 @@ class Cloudinary::Utils
98
97
  secure_distribution
99
98
  shorten
100
99
  sign_url
101
- ssl_detected
102
100
  type
103
101
  url_suffix
104
102
  use_root_path
@@ -513,7 +511,7 @@ class Cloudinary::Utils
513
511
  end
514
512
 
515
513
  # Warning: options are being destructively updated!
516
- def self.unsigned_download_url(source, options = {})
514
+ def self.cloudinary_url(source, options = {})
517
515
 
518
516
  patch_fetch_format(options)
519
517
  type = options.delete(:type)
@@ -530,7 +528,6 @@ class Cloudinary::Utils
530
528
 
531
529
  sign_url = config_option_consume(options, :sign_url)
532
530
  secret = config_option_consume(options, :api_secret)
533
- sign_version = config_option_consume(options, :sign_version) # Deprecated behavior
534
531
  url_suffix = options.delete(:url_suffix)
535
532
  use_root_path = config_option_consume(options, :use_root_path)
536
533
  auth_token = config_option_consume(options, :auth_token)
@@ -578,7 +575,7 @@ class Cloudinary::Utils
578
575
  transformation = transformation.gsub(%r(([^:])//), '\1/')
579
576
  if sign_url && ( !auth_token || auth_token.empty?)
580
577
  raise(CloudinaryException, "Must supply api_secret") if (secret.nil? || secret.empty?)
581
- to_sign = [transformation, sign_version && version, source_to_sign].reject(&:blank?).join("/")
578
+ to_sign = [transformation, source_to_sign].reject(&:blank?).join("/")
582
579
  to_sign = fully_unescape(to_sign)
583
580
  signature_algorithm = long_url_signature ? ALGO_SHA256 : signature_algorithm
584
581
  hash = hash("#{to_sign}#{secret}", signature_algorithm)
@@ -590,12 +587,22 @@ class Cloudinary::Utils
590
587
  prefix = build_distribution_domain(options)
591
588
 
592
589
  source = [prefix, resource_type, type, signature, transformation, version, source].reject(&:blank?).join("/")
590
+
591
+ token = nil
593
592
  if sign_url && auth_token && !auth_token.empty?
594
593
  auth_token[:url] = URI.parse(source).path
595
594
  token = Cloudinary::AuthToken.generate auth_token
596
- source += "?#{token}"
597
595
  end
598
596
 
597
+ analytics = config_option_consume(options, :analytics, true)
598
+ analytics_token = nil
599
+ if analytics && ! original_source.include?("?") # Disable analytics for public IDs containing query params.
600
+ analytics_token = Cloudinary::Analytics.sdk_analytics_query_param
601
+ end
602
+
603
+ query_params = [token, analytics_token].compact.join("&")
604
+
605
+ source += "?#{query_params}" unless query_params.empty?
599
606
  source
600
607
  end
601
608
 
@@ -678,7 +685,7 @@ class Cloudinary::Utils
678
685
  shared_domain = !private_cdn
679
686
 
680
687
  if secure
681
- if secure_distribution.nil? || secure_distribution == Cloudinary::OLD_AKAMAI_SHARED_CDN
688
+ if secure_distribution.nil?
682
689
  secure_distribution = private_cdn ? "#{cloud_name}-res.cloudinary.com" : Cloudinary::SHARED_CDN
683
690
  end
684
691
  shared_domain ||= secure_distribution == Cloudinary::SHARED_CDN
@@ -705,9 +712,7 @@ class Cloudinary::Utils
705
712
  cloud_name = config_option_consume(options, :cloud_name) || raise(CloudinaryException, "Must supply cloud_name in tag or in configuration")
706
713
 
707
714
  source = options.delete(:source)
708
- secure = options.delete(:secure)
709
- ssl_detected = options.delete(:ssl_detected)
710
- secure = ssl_detected || Cloudinary.config.secure if secure.nil?
715
+ secure = config_option_consume(options, :secure, true)
711
716
  private_cdn = config_option_consume(options, :private_cdn)
712
717
  secure_distribution = config_option_consume(options, :secure_distribution)
713
718
  cname = config_option_consume(options, :cname)
@@ -726,8 +731,9 @@ class Cloudinary::Utils
726
731
  def self.base_api_url(path, options = {})
727
732
  cloudinary = options[:upload_prefix] || Cloudinary.config.upload_prefix || UPLOAD_PREFIX
728
733
  cloud_name = options[:cloud_name] || Cloudinary.config.cloud_name || raise(CloudinaryException, 'Must supply cloud_name')
734
+ api_version = options[:api_version] || Cloudinary.config.api_version || 'v1_1'
729
735
 
730
- [cloudinary, 'v1_1', cloud_name, path].join('/')
736
+ [cloudinary, api_version, cloud_name, path].join('/')
731
737
  end
732
738
 
733
739
  def self.cloudinary_api_url(action = 'upload', options = {})
@@ -796,14 +802,6 @@ class Cloudinary::Utils
796
802
  return Cloudinary::Utils.cloudinary_api_url("download", options) + "?" + hash_query_params(cloudinary_params)
797
803
  end
798
804
 
799
- # Utility method that uses the deprecated ZIP download API.
800
- # @deprecated Replaced by {download_zip_url} that uses the more advanced and robust archive generation and download API
801
- def self.zip_download_url(tag, options = {})
802
- warn "zip_download_url is deprecated. Please use download_zip_url instead."
803
- cloudinary_params = sign_request({:timestamp=>Time.now.to_i, :tag=>tag, :transformation=>generate_transformation_string(options)}, options)
804
- return Cloudinary::Utils.cloudinary_api_url("download_tag.zip", options) + "?" + hash_query_params(cloudinary_params)
805
- end
806
-
807
805
  # Returns a URL that when invokes creates an archive and returns it.
808
806
  # @param options [Hash]
809
807
  # @option options [String|Symbol] :resource_type The resource type of files to include in the archive. Must be one of :image | :video | :raw
@@ -853,31 +851,6 @@ class Cloudinary::Utils
853
851
  download_archive_url(options.merge(:resource_type => resource_type, :prefixes => folder_path))
854
852
  end
855
853
 
856
- def self.signed_download_url(public_id, options = {})
857
- aws_private_key_path = options[:aws_private_key_path] || Cloudinary.config.aws_private_key_path
858
- if aws_private_key_path
859
- aws_key_pair_id = options[:aws_key_pair_id] || Cloudinary.config.aws_key_pair_id || raise(CloudinaryException, "Must supply aws_key_pair_id")
860
- authenticated_distribution = options[:authenticated_distribution] || Cloudinary.config.authenticated_distribution || raise(CloudinaryException, "Must supply authenticated_distribution")
861
- @signers ||= Hash.new{|h,k| path, id = k; h[k] = AwsCfSigner.new(path, id)}
862
- signer = @signers[[aws_private_key_path, aws_key_pair_id]]
863
- url = Cloudinary::Utils.unsigned_download_url(public_id, {:type=>:authenticated}.merge(options).merge(:secure=>true, :secure_distribution=>authenticated_distribution, :private_cdn=>true))
864
- expires_at = options[:expires_at] || (Time.now+3600)
865
- return signer.sign(url, :ending => expires_at)
866
- else
867
- return Cloudinary::Utils.unsigned_download_url( public_id, options)
868
- end
869
-
870
- end
871
-
872
- def self.cloudinary_url(public_id, options = {})
873
- if options[:type].to_s == 'authenticated' && !options[:sign_url]
874
- result = signed_download_url(public_id, options)
875
- else
876
- result = unsigned_download_url(public_id, options)
877
- end
878
- return result
879
- end
880
-
881
854
  def self.asset_file_name(path)
882
855
  data = Cloudinary.app_root.join(path).read(:mode=>"rb")
883
856
  ext = path.extname
@@ -1305,22 +1278,26 @@ class Cloudinary::Utils
1305
1278
  # Handles file parameter.
1306
1279
  #
1307
1280
  # @param [Pathname, StringIO, File, String, int, _ToPath] file
1308
- # @return [StringIO, File] A File object.
1281
+ # @return [StringIO, File, String] A File object.
1309
1282
  #
1310
1283
  # @private
1311
1284
  def self.handle_file_param(file, options = {})
1285
+ original_filename = options[:original_filename] || "cloudinaryfile"
1286
+ content_type = options[:content_type] || "application/octet-stream"
1312
1287
  if file.is_a?(Pathname)
1313
- return File.open(file, "rb")
1288
+ return Faraday::FilePart.new(file.to_s, content_type)
1314
1289
  elsif file.is_a?(Cloudinary::Blob)
1315
- return file
1290
+ return Faraday::FilePart.new(file, file.content_type, file.original_filename)
1316
1291
  elsif file.is_a?(StringIO)
1317
1292
  file.rewind
1318
- return Cloudinary::Blob.new(file.read, options)
1319
- elsif file.respond_to?(:read) || Cloudinary::Utils.is_remote?(file)
1320
- return file
1293
+ return Faraday::FilePart.new(file, content_type, original_filename)
1294
+ elsif file.respond_to?(:read)
1295
+ return Faraday::FilePart.new(file, content_type, original_filename)
1296
+ elsif Cloudinary::Utils.is_remote?(file)
1297
+ return file.to_s
1321
1298
  end
1322
-
1323
- File.open(file, "rb")
1299
+ # we got file path
1300
+ Faraday::FilePart.new(file.to_s, content_type)
1324
1301
  end
1325
1302
 
1326
1303
  # The returned url should allow downloading the backedup asset based on the version and asset id
@@ -1,4 +1,4 @@
1
1
  # Copyright Cloudinary
2
2
  module Cloudinary
3
- VERSION = "1.29.0"
3
+ VERSION = "2.0.0"
4
4
  end
data/lib/cloudinary.rb CHANGED
@@ -1,10 +1,6 @@
1
1
  # Copyright Cloudinary
2
- if RUBY_VERSION > "2"
3
- require "ostruct"
4
- else
5
- require "cloudinary/ostruct2"
6
- end
7
2
 
3
+ require "ostruct"
8
4
  require "pathname"
9
5
  require "yaml"
10
6
  require "uri"
@@ -29,11 +25,9 @@ module Cloudinary
29
25
  autoload :CarrierWave, "cloudinary/carrier_wave"
30
26
  autoload :Search, "cloudinary/search"
31
27
  autoload :SearchFolders, "cloudinary/search_folders"
28
+ autoload :Analytics, "cloudinary/analytics"
32
29
 
33
- CF_SHARED_CDN = "d3jpl91pxevbkh.cloudfront.net"
34
- AKAMAI_SHARED_CDN = "res.cloudinary.com"
35
- OLD_AKAMAI_SHARED_CDN = "cloudinary-a.akamaihd.net"
36
- SHARED_CDN = AKAMAI_SHARED_CDN
30
+ SHARED_CDN = "res.cloudinary.com"
37
31
 
38
32
  USER_AGENT = "CloudinaryRuby/#{VERSION} (Ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL})"
39
33
  @@user_platform = defined?(Rails.version) ? "Rails/#{Rails.version}" : ""
@@ -1,7 +1,9 @@
1
1
  require 'tmpdir'
2
- require 'rest_client'
2
+ require 'faraday'
3
+ require 'faraday/follow_redirects'
3
4
  require 'json'
4
5
  require 'rubygems/package'
6
+ require 'stringio'
5
7
 
6
8
  unless Rake::Task.task_defined?('cloudinary:fetch_assets') # prevent double-loading/execution
7
9
  namespace :cloudinary do
@@ -11,7 +13,7 @@ unless Rake::Task.task_defined?('cloudinary:fetch_assets') # prevent double-load
11
13
  processing_files = %w[canvas-to-blob.min.js load-image.all.min.js jquery.fileupload-process.js jquery.fileupload-image.js jquery.fileupload-validate.js]
12
14
  files = index_files + processing_files
13
15
 
14
- release = JSON(RestClient.get("https://api.github.com/repos/cloudinary/cloudinary_js/releases/latest"))
16
+ release = JSON(Faraday.get("https://api.github.com/repos/cloudinary/cloudinary_js/releases/latest").body)
15
17
 
16
18
  FileUtils.rm_rf 'vendor/assets'
17
19
  html_folder = 'vendor/assets/html'
@@ -20,7 +22,11 @@ unless Rake::Task.task_defined?('cloudinary:fetch_assets') # prevent double-load
20
22
  FileUtils.mkdir_p js_folder
21
23
 
22
24
  puts "Fetching cloudinary_js version #{release["tag_name"]}\n\n"
23
- sio = StringIO.new(RestClient.get(release["tarball_url"]).body)
25
+ conn = Faraday.new do |faraday|
26
+ faraday.response :follow_redirects
27
+ faraday.adapter Faraday.default_adapter
28
+ end
29
+ sio = StringIO.new(conn.get(release["tarball_url"]).body)
24
30
  file = Zlib::GzipReader.new(sio)
25
31
  tar = Gem::Package::TarReader.new(file)
26
32
  tar.each_entry do |entry|
@@ -422,7 +422,7 @@ var slice = [].slice,
422
422
  * @returns {boolean} true if item is empty
423
423
  */
424
424
  isEmpty = function(item) {
425
- return (item == null) || (jQuery.isArray(item) || Util.isString(item)) && item.length === 0 || (jQuery.isPlainObject(item) && jQuery.isEmptyObject(item));
425
+ return (item == null) || (Array.isArray(item) || Util.isString(item)) && item.length === 0 || (jQuery.isPlainObject(item) && jQuery.isEmptyObject(item));
426
426
  };
427
427
 
428
428
  /**
@@ -565,7 +565,7 @@ var slice = [].slice,
565
565
  setData: setData,
566
566
  width: width,
567
567
  isString: isString,
568
- isArray: jQuery.isArray,
568
+ isArray: Array.isArray,
569
569
  isEmpty: isEmpty,
570
570
 
571
571
  /**
@@ -4728,7 +4728,7 @@ var slice = [].slice,
4728
4728
  return k + '=' + v;
4729
4729
  }).join('|');
4730
4730
  } else if (Util.isArray(value)) {
4731
- if (value.length > 0 && jQuery.isArray(value[0])) {
4731
+ if (value.length > 0 && Array.isArray(value[0])) {
4732
4732
  upload_params[key] = jQuery.map(value, function(array_value) {
4733
4733
  return array_value.join(',');
4734
4734
  }).join('|');
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: 1.29.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nadav Soferman
@@ -10,176 +10,302 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-02-26 00:00:00.000000000 Z
13
+ date: 2024-04-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: aws_cf_signer
16
+ name: faraday
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: 2.0.1
22
+ - - "<"
23
+ - !ruby/object:Gem::Version
24
+ version: 3.0.0
22
25
  type: :runtime
23
26
  prerelease: false
24
27
  version_requirements: !ruby/object:Gem::Requirement
25
28
  requirements:
26
29
  - - ">="
27
30
  - !ruby/object:Gem::Version
28
- version: '0'
31
+ version: 2.0.1
32
+ - - "<"
33
+ - !ruby/object:Gem::Version
34
+ version: 3.0.0
29
35
  - !ruby/object:Gem::Dependency
30
- name: rest-client
36
+ name: faraday-multipart
31
37
  requirement: !ruby/object:Gem::Requirement
32
38
  requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.0'
33
42
  - - ">="
34
43
  - !ruby/object:Gem::Version
35
- version: 2.0.0
44
+ version: 1.0.4
36
45
  type: :runtime
37
46
  prerelease: false
38
47
  version_requirements: !ruby/object:Gem::Requirement
39
48
  requirements:
49
+ - - "~>"
50
+ - !ruby/object:Gem::Version
51
+ version: '1.0'
40
52
  - - ">="
41
53
  - !ruby/object:Gem::Version
42
- version: 2.0.0
54
+ version: 1.0.4
55
+ - !ruby/object:Gem::Dependency
56
+ name: faraday-follow_redirects
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.3.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.3.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 6.1.7
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: 8.0.0
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 6.1.7
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: 8.0.0
89
+ - !ruby/object:Gem::Dependency
90
+ name: rexml
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 3.2.5
96
+ - - "<"
97
+ - !ruby/object:Gem::Version
98
+ version: 4.0.0
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: 3.2.5
106
+ - - "<"
107
+ - !ruby/object:Gem::Version
108
+ version: 4.0.0
43
109
  - !ruby/object:Gem::Dependency
44
110
  name: actionpack
45
111
  requirement: !ruby/object:Gem::Requirement
46
112
  requirements:
47
113
  - - ">="
48
114
  - !ruby/object:Gem::Version
49
- version: '0'
115
+ version: 6.1.7
116
+ - - "<"
117
+ - !ruby/object:Gem::Version
118
+ version: 8.0.0
50
119
  type: :development
51
120
  prerelease: false
52
121
  version_requirements: !ruby/object:Gem::Requirement
53
122
  requirements:
54
123
  - - ">="
55
124
  - !ruby/object:Gem::Version
56
- version: '0'
125
+ version: 6.1.7
126
+ - - "<"
127
+ - !ruby/object:Gem::Version
128
+ version: 8.0.0
57
129
  - !ruby/object:Gem::Dependency
58
130
  name: nokogiri
59
131
  requirement: !ruby/object:Gem::Requirement
60
132
  requirements:
61
133
  - - ">="
62
134
  - !ruby/object:Gem::Version
63
- version: '0'
135
+ version: 1.12.5
136
+ - - "<"
137
+ - !ruby/object:Gem::Version
138
+ version: 2.0.0
64
139
  type: :development
65
140
  prerelease: false
66
141
  version_requirements: !ruby/object:Gem::Requirement
67
142
  requirements:
68
143
  - - ">="
69
144
  - !ruby/object:Gem::Version
70
- version: '0'
145
+ version: 1.12.5
146
+ - - "<"
147
+ - !ruby/object:Gem::Version
148
+ version: 2.0.0
71
149
  - !ruby/object:Gem::Dependency
72
150
  name: rake
73
151
  requirement: !ruby/object:Gem::Requirement
74
152
  requirements:
75
153
  - - ">="
76
154
  - !ruby/object:Gem::Version
77
- version: 13.0.1
155
+ version: 13.0.6
156
+ - - "<"
157
+ - !ruby/object:Gem::Version
158
+ version: 14.0.0
78
159
  type: :development
79
160
  prerelease: false
80
161
  version_requirements: !ruby/object:Gem::Requirement
81
162
  requirements:
82
163
  - - ">="
83
164
  - !ruby/object:Gem::Version
84
- version: 13.0.1
165
+ version: 13.0.6
166
+ - - "<"
167
+ - !ruby/object:Gem::Version
168
+ version: 14.0.0
85
169
  - !ruby/object:Gem::Dependency
86
170
  name: sqlite3
87
171
  requirement: !ruby/object:Gem::Requirement
88
172
  requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: 1.4.2
89
176
  - - "<"
90
177
  - !ruby/object:Gem::Version
91
- version: 1.6.0
178
+ version: 2.0.0
92
179
  type: :development
93
180
  prerelease: false
94
181
  version_requirements: !ruby/object:Gem::Requirement
95
182
  requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: 1.4.2
96
186
  - - "<"
97
187
  - !ruby/object:Gem::Version
98
- version: 1.6.0
188
+ version: 2.0.0
99
189
  - !ruby/object:Gem::Dependency
100
190
  name: rspec
101
191
  requirement: !ruby/object:Gem::Requirement
102
192
  requirements:
103
193
  - - ">="
104
194
  - !ruby/object:Gem::Version
105
- version: '3.5'
195
+ version: 3.11.2
196
+ - - "<"
197
+ - !ruby/object:Gem::Version
198
+ version: 4.0.0
106
199
  type: :development
107
200
  prerelease: false
108
201
  version_requirements: !ruby/object:Gem::Requirement
109
202
  requirements:
110
203
  - - ">="
111
204
  - !ruby/object:Gem::Version
112
- version: '3.5'
205
+ version: 3.11.2
206
+ - - "<"
207
+ - !ruby/object:Gem::Version
208
+ version: 4.0.0
113
209
  - !ruby/object:Gem::Dependency
114
210
  name: rspec-retry
115
211
  requirement: !ruby/object:Gem::Requirement
116
212
  requirements:
117
213
  - - ">="
118
214
  - !ruby/object:Gem::Version
119
- version: '0'
215
+ version: 0.6.2
216
+ - - "<"
217
+ - !ruby/object:Gem::Version
218
+ version: 1.0.0
120
219
  type: :development
121
220
  prerelease: false
122
221
  version_requirements: !ruby/object:Gem::Requirement
123
222
  requirements:
124
223
  - - ">="
125
224
  - !ruby/object:Gem::Version
126
- version: '0'
225
+ version: 0.6.2
226
+ - - "<"
227
+ - !ruby/object:Gem::Version
228
+ version: 1.0.0
127
229
  - !ruby/object:Gem::Dependency
128
- name: rails
230
+ name: railties
129
231
  requirement: !ruby/object:Gem::Requirement
130
232
  requirements:
131
- - - "~>"
233
+ - - ">="
132
234
  - !ruby/object:Gem::Version
133
- version: '5.2'
235
+ version: 6.0.4
236
+ - - "<"
237
+ - !ruby/object:Gem::Version
238
+ version: 8.0.0
134
239
  type: :development
135
240
  prerelease: false
136
241
  version_requirements: !ruby/object:Gem::Requirement
137
242
  requirements:
138
- - - "~>"
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: 6.0.4
246
+ - - "<"
139
247
  - !ruby/object:Gem::Version
140
- version: '5.2'
248
+ version: 8.0.0
141
249
  - !ruby/object:Gem::Dependency
142
250
  name: rspec-rails
143
251
  requirement: !ruby/object:Gem::Requirement
144
252
  requirements:
145
253
  - - ">="
146
254
  - !ruby/object:Gem::Version
147
- version: '0'
255
+ version: 6.0.4
256
+ - - "<"
257
+ - !ruby/object:Gem::Version
258
+ version: 7.0.0
148
259
  type: :development
149
260
  prerelease: false
150
261
  version_requirements: !ruby/object:Gem::Requirement
151
262
  requirements:
152
263
  - - ">="
153
264
  - !ruby/object:Gem::Version
154
- version: '0'
265
+ version: 6.0.4
266
+ - - "<"
267
+ - !ruby/object:Gem::Version
268
+ version: 7.0.0
155
269
  - !ruby/object:Gem::Dependency
156
270
  name: rubyzip
157
271
  requirement: !ruby/object:Gem::Requirement
158
272
  requirements:
159
273
  - - ">="
160
274
  - !ruby/object:Gem::Version
161
- version: '0'
275
+ version: 2.3.0
276
+ - - "<"
277
+ - !ruby/object:Gem::Version
278
+ version: 3.0.0
162
279
  type: :development
163
280
  prerelease: false
164
281
  version_requirements: !ruby/object:Gem::Requirement
165
282
  requirements:
166
283
  - - ">="
167
284
  - !ruby/object:Gem::Version
168
- version: '0'
285
+ version: 2.3.0
286
+ - - "<"
287
+ - !ruby/object:Gem::Version
288
+ version: 3.0.0
169
289
  - !ruby/object:Gem::Dependency
170
290
  name: simplecov
171
291
  requirement: !ruby/object:Gem::Requirement
172
292
  requirements:
173
- - - ">"
293
+ - - ">="
174
294
  - !ruby/object:Gem::Version
175
- version: 0.18.0
295
+ version: 0.21.2
296
+ - - "<"
297
+ - !ruby/object:Gem::Version
298
+ version: 1.0.0
176
299
  type: :development
177
300
  prerelease: false
178
301
  version_requirements: !ruby/object:Gem::Requirement
179
302
  requirements:
180
- - - ">"
303
+ - - ">="
304
+ - !ruby/object:Gem::Version
305
+ version: 0.21.2
306
+ - - "<"
181
307
  - !ruby/object:Gem::Version
182
- version: 0.18.0
308
+ version: 1.0.0
183
309
  description: Client library for easily using the Cloudinary service
184
310
  email:
185
311
  - nadav.soferman@cloudinary.com
@@ -206,6 +332,7 @@ files:
206
332
  - lib/cloudinary.rb
207
333
  - lib/cloudinary/account_api.rb
208
334
  - lib/cloudinary/account_config.rb
335
+ - lib/cloudinary/analytics.rb
209
336
  - lib/cloudinary/api.rb
210
337
  - lib/cloudinary/auth_token.rb
211
338
  - lib/cloudinary/base_api.rb
@@ -230,7 +357,6 @@ files:
230
357
  - lib/cloudinary/helper.rb
231
358
  - lib/cloudinary/migrator.rb
232
359
  - lib/cloudinary/missing.rb
233
- - lib/cloudinary/ostruct2.rb
234
360
  - lib/cloudinary/preloaded_file.rb
235
361
  - lib/cloudinary/railtie.rb
236
362
  - lib/cloudinary/responsive.rb
@@ -258,7 +384,7 @@ files:
258
384
  - vendor/assets/javascripts/cloudinary/jquery.ui.widget.js
259
385
  - vendor/assets/javascripts/cloudinary/load-image.all.min.js
260
386
  - vendor/assets/javascripts/cloudinary/processing.js
261
- homepage: http://cloudinary.com
387
+ homepage: https://cloudinary.com
262
388
  licenses:
263
389
  - MIT
264
390
  metadata: {}
@@ -268,16 +394,16 @@ require_paths:
268
394
  - lib
269
395
  required_ruby_version: !ruby/object:Gem::Requirement
270
396
  requirements:
271
- - - ">="
397
+ - - "~>"
272
398
  - !ruby/object:Gem::Version
273
- version: '0'
399
+ version: '3'
274
400
  required_rubygems_version: !ruby/object:Gem::Requirement
275
401
  requirements:
276
402
  - - ">="
277
403
  - !ruby/object:Gem::Version
278
404
  version: '0'
279
405
  requirements: []
280
- rubygems_version: 3.4.12
406
+ rubygems_version: 3.2.3
281
407
  signing_key:
282
408
  specification_version: 4
283
409
  summary: Client library for easily using the Cloudinary service