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.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/CHANGELOG.md +33 -0
- data/README.md +5 -3
- data/cloudinary.gemspec +21 -51
- data/lib/active_storage/service/cloudinary_service.rb +4 -2
- data/lib/cloudinary/account_api.rb +21 -8
- data/lib/cloudinary/analytics.rb +157 -0
- data/lib/cloudinary/api.rb +24 -4
- data/lib/cloudinary/auth_token.rb +1 -5
- data/lib/cloudinary/base_api.rb +36 -31
- data/lib/cloudinary/carrier_wave/storage.rb +2 -1
- data/lib/cloudinary/carrier_wave.rb +0 -5
- data/lib/cloudinary/helper.rb +2 -10
- data/lib/cloudinary/migrator.rb +70 -71
- data/lib/cloudinary/uploader.rb +70 -90
- data/lib/cloudinary/utils.rb +31 -54
- data/lib/cloudinary/version.rb +1 -1
- data/lib/cloudinary.rb +3 -9
- data/lib/tasks/cloudinary/fetch_assets.rake +9 -3
- data/vendor/assets/javascripts/cloudinary/jquery.cloudinary.js +3 -3
- metadata +164 -38
- data/lib/cloudinary/ostruct2.rb +0 -284
data/lib/cloudinary/utils.rb
CHANGED
@@ -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.
|
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,
|
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?
|
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
|
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,
|
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
|
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
|
1319
|
-
elsif file.respond_to?(:read)
|
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
|
-
|
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
|
data/lib/cloudinary/version.rb
CHANGED
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
|
-
|
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 '
|
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(
|
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
|
-
|
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) || (
|
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:
|
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 &&
|
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:
|
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-
|
13
|
+
date: 2024-04-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: faraday
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
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:
|
31
|
+
version: 2.0.1
|
32
|
+
- - "<"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 3.0.0
|
29
35
|
- !ruby/object:Gem::Dependency
|
30
|
-
name:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
225
|
+
version: 0.6.2
|
226
|
+
- - "<"
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: 1.0.0
|
127
229
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
230
|
+
name: railties
|
129
231
|
requirement: !ruby/object:Gem::Requirement
|
130
232
|
requirements:
|
131
|
-
- - "
|
233
|
+
- - ">="
|
132
234
|
- !ruby/object:Gem::Version
|
133
|
-
version:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
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:
|
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: '
|
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.
|
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
|