cloudinary 1.29.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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