cloudinary 1.22.0 → 1.23.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/CHANGELOG.md +18 -0
- data/lib/cloudinary/auth_token.rb +7 -2
- data/lib/cloudinary/base_api.rb +6 -3
- data/lib/cloudinary/carrier_wave/process.rb +9 -1
- data/lib/cloudinary/uploader.rb +3 -0
- data/lib/cloudinary/utils.rb +7 -3
- data/lib/cloudinary/version.rb +1 -1
- data/lib/cloudinary.rb +12 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5eb49ce85c34e632ed20f09a8600694177bf8f82c8490ff5463554c0ab4b3b2e
|
4
|
+
data.tar.gz: cf2558234f2c9c5dac2de81d2ef2060432a36297a50728f9f01df8997de2805d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33147b3fb85715a5472259c06d636a29b45df54eee79d56677b2d2eca846b999e8452e4f6f0661bc9c198ad776d0313f64fb8444075c46fbec789463a2107c22
|
7
|
+
data.tar.gz: fc33de4ab89ec6bc63be65bad25fcbd0344975e8344ef29ecb365f9dd93c9bf7d6e611f96f8f60cd3d08cc222d308e6b04c27b835d4d9672b1c529821337dee2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
1.23.0 / 2022-04-05
|
2
|
+
==================
|
3
|
+
|
4
|
+
New functionality and features
|
5
|
+
------------------------------
|
6
|
+
|
7
|
+
* Add support for multiple ACLs in `AuthToken`
|
8
|
+
* Add support for disable b-frames for video codec
|
9
|
+
* Add support for aliases in Configuration
|
10
|
+
* Add support for `filename` upload parameter
|
11
|
+
|
12
|
+
Other Changes
|
13
|
+
-------------
|
14
|
+
|
15
|
+
* Fix escaping of special characters in `public_id`
|
16
|
+
* Fix support of the lowercase response headers
|
17
|
+
* Fix CarrierWave file retrieval after store
|
18
|
+
|
1
19
|
1.22.0 / 2022-02-17
|
2
20
|
==================
|
3
21
|
|
@@ -21,7 +21,12 @@ module Cloudinary
|
|
21
21
|
start = options[:start_time]
|
22
22
|
expiration = options[:expiration]
|
23
23
|
ip = options[:ip]
|
24
|
+
|
24
25
|
acl = options[:acl]
|
26
|
+
if acl.present?
|
27
|
+
acl = acl.is_a?(String) ? [acl] : acl
|
28
|
+
end
|
29
|
+
|
25
30
|
duration = options[:duration]
|
26
31
|
url = options[:url]
|
27
32
|
start = Time.new.getgm.to_i if start == 'now'
|
@@ -41,9 +46,9 @@ module Cloudinary
|
|
41
46
|
token << "ip=#{ip}" if ip
|
42
47
|
token << "st=#{start}" if start
|
43
48
|
token << "exp=#{expiration}"
|
44
|
-
token << "acl=#{escape_to_lower(acl)}" if acl
|
49
|
+
token << "acl=#{escape_to_lower(acl.join('!'))}" if acl && acl.size > 0
|
45
50
|
to_sign = token.clone
|
46
|
-
to_sign << "url=#{escape_to_lower(url)}" if url && acl.blank?
|
51
|
+
to_sign << "url=#{escape_to_lower(url)}" if url && (acl.blank? || acl.size == 0)
|
47
52
|
auth = digest(to_sign.join(SEPARATOR), key)
|
48
53
|
token << "hmac=#{auth}"
|
49
54
|
"#{name}=#{token.join(SEPARATOR)}"
|
data/lib/cloudinary/base_api.rb
CHANGED
@@ -19,9 +19,12 @@ module Cloudinary::BaseApi
|
|
19
19
|
# This sets the instantiated self as the response Hash
|
20
20
|
update Cloudinary::Api.parse_json_response response
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
# According to RFC 2616, header names are case-insensitive.
|
23
|
+
lc_headers = response.headers.transform_keys(&:downcase)
|
24
|
+
|
25
|
+
@rate_limit_allowed = lc_headers[:x_featureratelimit_limit].to_i if lc_headers[:x_featureratelimit_limit]
|
26
|
+
@rate_limit_reset_at = Time.parse(lc_headers[:x_featureratelimit_reset]) if lc_headers[:x_featureratelimit_reset]
|
27
|
+
@rate_limit_remaining = lc_headers[:x_featureratelimit_remaining].to_i if lc_headers[:x_featureratelimit_remaining]
|
25
28
|
end
|
26
29
|
end
|
27
30
|
end
|
@@ -154,8 +154,16 @@ module Cloudinary::CarrierWave
|
|
154
154
|
format = Cloudinary::PreloadedFile.split_format(original_filename || "").last
|
155
155
|
return format || "" if resource_type == "raw"
|
156
156
|
format = requested_format || format || default_format
|
157
|
-
|
157
|
+
|
158
158
|
format = format.to_s.downcase
|
159
159
|
Cloudinary::FORMAT_ALIASES[format] || format
|
160
160
|
end
|
161
|
+
|
162
|
+
def store!(new_file=nil)
|
163
|
+
super
|
164
|
+
|
165
|
+
column = model.send(:_mounter, mounted_as).send(:serialization_column)
|
166
|
+
identifier = model.send(:attribute, column)
|
167
|
+
retrieve_from_store!(identifier) unless identifier.nil?
|
168
|
+
end
|
161
169
|
end
|
data/lib/cloudinary/uploader.rb
CHANGED
data/lib/cloudinary/utils.rb
CHANGED
@@ -885,7 +885,7 @@ class Cloudinary::Utils
|
|
885
885
|
|
886
886
|
# Based on CGI::unescape. In addition keeps '+' character as is
|
887
887
|
def self.smart_unescape(string)
|
888
|
-
CGI.unescape(string.
|
888
|
+
CGI.unescape(string.gsub('+', '%2B'))
|
889
889
|
end
|
890
890
|
|
891
891
|
def self.random_public_id
|
@@ -1185,9 +1185,10 @@ class Cloudinary::Utils
|
|
1185
1185
|
|
1186
1186
|
# A video codec parameter can be either a String or a Hash.
|
1187
1187
|
#
|
1188
|
-
# @param [Object] param <code>vc_<codec>[ : <profile> : [<level>]]</code>
|
1188
|
+
# @param [Object] param <code>vc_<codec>[ : <profile> : [<level> : [<b_frames>]]]</code>
|
1189
1189
|
# or <code>{ codec: 'h264', profile: 'basic', level: '3.1' }</code>
|
1190
|
-
#
|
1190
|
+
# or <code>{ codec: 'h265', profile: 'auto', level: 'auto', b_frames: false }</code>
|
1191
|
+
# @return [String] <code><codec> : <profile> : [<level> : [<b_frames>]]]</code> if a Hash was provided
|
1191
1192
|
# or the param if a String was provided.
|
1192
1193
|
# Returns NIL if param is not a Hash or String
|
1193
1194
|
# @private
|
@@ -1201,6 +1202,9 @@ class Cloudinary::Utils
|
|
1201
1202
|
video.concat ":" + param[:profile]
|
1202
1203
|
if param.has_key? :level
|
1203
1204
|
video.concat ":" + param[:level]
|
1205
|
+
if param.has_key?(:b_frames) && param[:b_frames] === false
|
1206
|
+
video.concat ":bframes_no"
|
1207
|
+
end
|
1204
1208
|
end
|
1205
1209
|
end
|
1206
1210
|
end
|
data/lib/cloudinary/version.rb
CHANGED
data/lib/cloudinary.rb
CHANGED
@@ -145,7 +145,18 @@ module Cloudinary
|
|
145
145
|
#
|
146
146
|
# @return [OpenStruct]
|
147
147
|
def self.import_settings_from_file
|
148
|
-
|
148
|
+
yaml_env_config = begin
|
149
|
+
yaml_source = ERB.new(IO.read(config_dir.join("cloudinary.yml"))).result
|
150
|
+
yaml_config = if YAML.respond_to?(:safe_load)
|
151
|
+
YAML.safe_load(yaml_source, aliases: true)
|
152
|
+
else
|
153
|
+
YAML.load(yaml_source)
|
154
|
+
end
|
155
|
+
yaml_config[config_env]
|
156
|
+
rescue StandardError
|
157
|
+
{}
|
158
|
+
end
|
159
|
+
OpenStruct.new(yaml_env_config)
|
149
160
|
end
|
150
161
|
|
151
162
|
private_class_method :import_settings_from_file
|
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.
|
4
|
+
version: 1.23.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: 2022-
|
13
|
+
date: 2022-04-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: aws_cf_signer
|