cloudinary 1.8.0 → 1.8.1
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 +7 -0
- data/lib/cloudinary/static.rb +6 -11
- data/lib/cloudinary/utils.rb +8 -12
- data/lib/cloudinary/version.rb +1 -1
- data/spec/cloudinary_helper_spec.rb +46 -0
- data/spec/rake_spec.rb +25 -6
- data/spec/sample_asset_file.tsv +4 -0
- data/spec/search_spec.rb +4 -4
- data/spec/spec_helper.rb +3 -0
- data/spec/utils_spec.rb +35 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07e321996ca2cae3a8eec12d27de1aed453853e7
|
4
|
+
data.tar.gz: 579c2b752735619c42ae516c9cbec268136ddbbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f0bdc46e84bf87fb80a1ea3a3934088b2079d910f4dfcdbe192f1318c760d386b639d66d902d5ccdfedba3a90827483c96c0c7ff6cc2ad50fd594e389b2b8e8
|
7
|
+
data.tar.gz: 1b80560e163319804899b0aa6fb378fcdedc260ae087977938a3de172d88b0ffff762dfa0b8b9688a9cbfde2facfe956ce1b67e6eada52d874ababd16ceb5176
|
data/CHANGELOG.md
CHANGED
data/lib/cloudinary/static.rb
CHANGED
@@ -77,19 +77,14 @@ class Cloudinary::Static
|
|
77
77
|
|
78
78
|
# ## Cloudinary::Utils support ###
|
79
79
|
def public_id_and_resource_type_from_path(path)
|
80
|
-
metadata
|
80
|
+
@metadata ||= build_metadata
|
81
81
|
path = path.sub(/^\//, '')
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
break
|
88
|
-
end
|
89
|
-
end
|
82
|
+
prefix = public_prefixes.find {|prefix| @metadata[File.join(prefix, path)]}
|
83
|
+
if prefix
|
84
|
+
[@metadata[File.join(prefix, path)]['public_id'], resource_type(path)]
|
85
|
+
else
|
86
|
+
nil
|
90
87
|
end
|
91
|
-
return unless data
|
92
|
-
[data['public_id'], resource_type(path)]
|
93
88
|
end
|
94
89
|
|
95
90
|
private
|
data/lib/cloudinary/utils.rb
CHANGED
@@ -375,20 +375,16 @@ class Cloudinary::Utils
|
|
375
375
|
resource_type ||= "image"
|
376
376
|
source = source.to_s
|
377
377
|
if !force_remote
|
378
|
+
static_support = Cloudinary.config.static_file_support || Cloudinary.config.static_image_support
|
379
|
+
return original_source if !static_support && type == "asset"
|
378
380
|
return original_source if (type.nil? || type == "asset") && source.match(%r(^https?:/)i)
|
381
|
+
return original_source if source.match(%r(^/(?!images/).*)) # starts with / but not /images/
|
382
|
+
|
383
|
+
source = source.sub(%r(^/images/), '') # remove /images/ prefix - backwards compatibility
|
379
384
|
if type == "asset"
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
end
|
384
|
-
return original_source unless source
|
385
|
-
source += File.extname(original_source) if !format
|
386
|
-
elsif source.start_with?("/")
|
387
|
-
if source.start_with?("/images/")
|
388
|
-
source = source.sub(%r(/images/), '')
|
389
|
-
else
|
390
|
-
return original_source
|
391
|
-
end
|
385
|
+
source, resource_type = Cloudinary::Static.public_id_and_resource_type_from_path(source)
|
386
|
+
return original_source unless source # asset not found in Static
|
387
|
+
source += File.extname(original_source) unless format
|
392
388
|
end
|
393
389
|
end
|
394
390
|
|
data/lib/cloudinary/version.rb
CHANGED
@@ -141,4 +141,50 @@ RSpec.describe CloudinaryHelper do
|
|
141
141
|
end
|
142
142
|
|
143
143
|
end
|
144
|
+
describe "image_path" do
|
145
|
+
|
146
|
+
before :all do
|
147
|
+
class Cloudinary::Static
|
148
|
+
class << self
|
149
|
+
def reset_metadata
|
150
|
+
@metadata = nil
|
151
|
+
@static_file_config = nil
|
152
|
+
@public_prefixes = nil
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
before :each do
|
159
|
+
@static_support = Cloudinary.config.static_image_support
|
160
|
+
@static_file = Cloudinary::Static::METADATA_FILE
|
161
|
+
Cloudinary::Static.reset_metadata
|
162
|
+
end
|
163
|
+
|
164
|
+
after :each do
|
165
|
+
Cloudinary.config.static_image_support = @static_support
|
166
|
+
Cloudinary::Static::METADATA_FILE = @static_file
|
167
|
+
Cloudinary::Static.reset_metadata
|
168
|
+
end
|
169
|
+
|
170
|
+
context 'type=="asset"' do
|
171
|
+
it "should not transform images staring with /" do
|
172
|
+
expect(helper.image_path('/bar')).to eq('/bar')
|
173
|
+
end
|
174
|
+
it "should not transform images staring with /images unless asset is found and static_support is true" do
|
175
|
+
Cloudinary.config.static_image_support = false
|
176
|
+
expect(helper.image_path('/images/foo.jpg')).to eq('/images/foo.jpg')
|
177
|
+
expect(helper.image_path('some-folder/foo.gif')).to eq("/images/some-folder/foo.gif")
|
178
|
+
Cloudinary::Static::METADATA_FILE = "spec/sample_asset_file.tsv"
|
179
|
+
Cloudinary::Static.reset_metadata
|
180
|
+
expect(helper.image_path('/images/foo.jpg'))
|
181
|
+
.to eq("/images/foo.jpg")
|
182
|
+
expect(helper.image_path('some-folder/foo.gif')).to eq("/images/some-folder/foo.gif")
|
183
|
+
Cloudinary.config.static_image_support = true
|
184
|
+
expect(helper.image_path('/images/foo.jpg')).to eq("http://res.cloudinary.com/sdk-test/image/asset/images-foo.jpg")
|
185
|
+
expect(helper.image_path('foo.jpg')).to eq("http://res.cloudinary.com/sdk-test/image/asset/images-foo.jpg")
|
186
|
+
expect(helper.image_path('some-folder/foo.gif')).to eq('/images/some-folder/foo.gif')
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
144
190
|
end
|
data/spec/rake_spec.rb
CHANGED
@@ -89,15 +89,31 @@ describe 'cloudinary:sync_static' do
|
|
89
89
|
|
90
90
|
context 'Cloudinary::Utils.cloudinary_url' do
|
91
91
|
def all_asset_forms_of(public_id)
|
92
|
-
[
|
92
|
+
[ "/#{public_id}", public_id.split('/').last]
|
93
93
|
end
|
94
94
|
|
95
95
|
RSpec::Matchers.define :be_asset_mapped_by_cloudinary_url_to do |expected|
|
96
96
|
match do |actual|
|
97
|
+
actual = [actual] unless actual.respond_to? :all?
|
97
98
|
actual.all? do |public_path|
|
98
|
-
|
99
|
+
@public_path = public_path
|
100
|
+
@actual = Cloudinary::Utils.cloudinary_url(public_path, :cloud_name => 'test', :type => 'asset')
|
101
|
+
@actual == expected
|
99
102
|
end
|
100
103
|
end
|
104
|
+
failure_message do |actual|
|
105
|
+
"URL for '#{@public_path}' should have been '#{expected}' but was '#{@actual}'.#{ differ.diff_as_string(@actual, expected)}"
|
106
|
+
end
|
107
|
+
failure_message_when_negated do |actual|
|
108
|
+
"URL for '#{@public_path}' should not have been '#{expected}'."
|
109
|
+
end
|
110
|
+
def differ
|
111
|
+
RSpec::Support::Differ.new(
|
112
|
+
:object_preparer => lambda { |object| RSpec::Matchers::Composable.surface_descriptions_in(object) },
|
113
|
+
:color => RSpec::Matchers.configuration.color?
|
114
|
+
)
|
115
|
+
end
|
116
|
+
|
101
117
|
end
|
102
118
|
|
103
119
|
before(:each) do
|
@@ -122,9 +138,12 @@ describe 'cloudinary:sync_static' do
|
|
122
138
|
allow(Cloudinary.config).to receive(:static_file_support).and_return(true)
|
123
139
|
subject.invoke
|
124
140
|
|
125
|
-
expect(
|
126
|
-
expect(
|
127
|
-
expect(
|
141
|
+
expect(['logo1.png', '/images/logo1.png']).to be_asset_mapped_by_cloudinary_url_to('http://res.cloudinary.com/test/image/asset/logo1-7dc60722d4653261648038b579fdb89e.png')
|
142
|
+
expect('images/logo1.png').not_to be_asset_mapped_by_cloudinary_url_to('http://res.cloudinary.com/test/image/asset/logo1-7dc60722d4653261648038b579fdb89e.png')
|
143
|
+
expect('1.js').to be_asset_mapped_by_cloudinary_url_to('http://res.cloudinary.com/test/raw/asset/1-b01de57adb485efdde843154d030644e.js')
|
144
|
+
expect(['javascripts/1.js', '/javascripts/1.js']).not_to be_asset_mapped_by_cloudinary_url_to('http://res.cloudinary.com/test/raw/asset/1-b01de57adb485efdde843154d030644e.js')
|
145
|
+
expect('1.css').to be_asset_mapped_by_cloudinary_url_to('http://res.cloudinary.com/test/raw/asset/1-f24cc6123afd401ab86d8596cabc619f.css')
|
146
|
+
expect(['stylesheets/1.css', '/stylesheets/1.css']).not_to be_asset_mapped_by_cloudinary_url_to('http://res.cloudinary.com/test/raw/asset/1-f24cc6123afd401ab86d8596cabc619f.css')
|
128
147
|
|
129
148
|
# without :type => 'asset'
|
130
149
|
expect(Cloudinary::Utils.cloudinary_url('logo1.png')).not_to include('7dc60722d4653261648038b579fdb89e')
|
@@ -134,7 +153,7 @@ describe 'cloudinary:sync_static' do
|
|
134
153
|
allow(Cloudinary.config).to receive(:static_image_support).and_return(true)
|
135
154
|
subject.invoke
|
136
155
|
|
137
|
-
expect(
|
156
|
+
expect(['logo1.png', '/images/logo1.png']).to be_asset_mapped_by_cloudinary_url_to('http://res.cloudinary.com/test/image/asset/logo1-7dc60722d4653261648038b579fdb89e.png')
|
138
157
|
end
|
139
158
|
end
|
140
159
|
|
data/spec/search_spec.rb
CHANGED
@@ -27,13 +27,13 @@ describe Cloudinary::Search do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'should add max_results to query' do
|
30
|
-
query = Cloudinary::Search.max_results(
|
31
|
-
expect(query).to eq(max_results:
|
30
|
+
query = Cloudinary::Search.max_results(10).to_h
|
31
|
+
expect(query).to eq(max_results: 10)
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'should add next_cursor to query' do
|
35
|
-
query = Cloudinary::Search.next_cursor('
|
36
|
-
expect(query).to eq(next_cursor: '
|
35
|
+
query = Cloudinary::Search.next_cursor('ASDFIUHASF9832HAFSOF').to_h
|
36
|
+
expect(query).to eq(next_cursor: 'ASDFIUHASF9832HAFSOF')
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'should add aggregations arguments as array to query' do
|
data/spec/spec_helper.rb
CHANGED
@@ -2,6 +2,9 @@ require 'rspec'
|
|
2
2
|
require 'rexml/parsers/ultralightparser'
|
3
3
|
require 'rspec/version'
|
4
4
|
require 'rest_client'
|
5
|
+
require 'cloudinary'
|
6
|
+
|
7
|
+
Cloudinary.config.enhance_image_tag = true
|
5
8
|
|
6
9
|
TEST_IMAGE_URL = "http://cloudinary.com/images/old_logo.png"
|
7
10
|
TEST_IMG = "spec/logo.png"
|
data/spec/utils_spec.rb
CHANGED
@@ -252,6 +252,40 @@ describe Cloudinary::Utils do
|
|
252
252
|
.to produce_url("#{upload_path}/c_crop,g_auto,w_0.5/test")
|
253
253
|
.and empty_options
|
254
254
|
end
|
255
|
+
|
256
|
+
describe "gravity" do
|
257
|
+
it "should support auto" do
|
258
|
+
expect(["test", {width: 100, height: 100, crop: 'crop', gravity: 'auto'}])
|
259
|
+
.to produce_url("http://res.cloudinary.com/#{cloud_name}/image/upload/c_crop,g_auto,h_100,w_100/test")
|
260
|
+
.and mutate_options_to({width: 100, height: 100})
|
261
|
+
expect(["test", {width: 100, height: 100, crop: 'crop', gravity: 'auto'}])
|
262
|
+
.to produce_url("http://res.cloudinary.com/#{cloud_name}/image/upload/c_crop,g_auto,h_100,w_100/test")
|
263
|
+
.and mutate_options_to({width: 100, height: 100})
|
264
|
+
end
|
265
|
+
it "should support focal gravity" do
|
266
|
+
["adv_face", "adv_faces", "adv_eyes", "face", "faces", "body", "no_faces"].each do |focal|
|
267
|
+
expect(["test", {width: 100, height: 100, crop: 'crop', gravity: "auto:#{focal}"}])
|
268
|
+
.to produce_url("http://res.cloudinary.com/#{cloud_name}/image/upload/c_crop,g_auto:#{focal},h_100,w_100/test")
|
269
|
+
.and mutate_options_to({width: 100, height: 100})
|
270
|
+
end
|
271
|
+
end
|
272
|
+
it "should support auto level with thumb cropping" do
|
273
|
+
[0, 10, 100].each do |level|
|
274
|
+
expect(["test", {width: 100, height: 100, crop: 'thumb', gravity: "auto:#{level}"}])
|
275
|
+
.to produce_url("http://res.cloudinary.com/#{cloud_name}/image/upload/c_thumb,g_auto:#{level},h_100,w_100/test")
|
276
|
+
.and mutate_options_to({width: 100, height: 100})
|
277
|
+
expect(["test", {width: 100, height: 100, crop: 'thumb', gravity: "auto:adv_faces:#{level}"}])
|
278
|
+
.to produce_url("http://res.cloudinary.com/#{cloud_name}/image/upload/c_thumb,g_auto:adv_faces:#{level},h_100,w_100/test")
|
279
|
+
.and mutate_options_to({width: 100, height: 100})
|
280
|
+
end
|
281
|
+
end
|
282
|
+
it "should support custom_no_override" do
|
283
|
+
expect(["test", {width: 100, height: 100, crop: 'crop', gravity: "auto:custom_no_override"}])
|
284
|
+
.to produce_url("http://res.cloudinary.com/#{cloud_name}/image/upload/c_crop,g_auto:custom_no_override,h_100,w_100/test")
|
285
|
+
.and mutate_options_to({width: 100, height: 100})
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
255
289
|
describe ":quality" do
|
256
290
|
it "support a percent value" do
|
257
291
|
expect(["test", { :x => 1, :y => 2, :radius => 3, :gravity => :center, :quality => 80, :prefix => "a" }])
|
@@ -270,6 +304,7 @@ describe Cloudinary::Utils do
|
|
270
304
|
|
271
305
|
end
|
272
306
|
end
|
307
|
+
|
273
308
|
describe ":transformation" do
|
274
309
|
it "should support named tranformation" do
|
275
310
|
expect(["test", { :transformation => "blip" }])
|
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.8.
|
4
|
+
version: 1.8.1
|
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: 2017-
|
13
|
+
date: 2017-05-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: aws_cf_signer
|
@@ -181,6 +181,7 @@ files:
|
|
181
181
|
- spec/favicon.ico
|
182
182
|
- spec/logo.png
|
183
183
|
- spec/rake_spec.rb
|
184
|
+
- spec/sample_asset_file.tsv
|
184
185
|
- spec/search_spec.rb
|
185
186
|
- spec/spec_helper.rb
|
186
187
|
- spec/streaminig_profiles_api_spec.rb
|
@@ -223,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
224
|
version: '0'
|
224
225
|
requirements: []
|
225
226
|
rubyforge_project: cloudinary
|
226
|
-
rubygems_version: 2.
|
227
|
+
rubygems_version: 2.6.10
|
227
228
|
signing_key:
|
228
229
|
specification_version: 4
|
229
230
|
summary: Client library for easily using the Cloudinary service
|
@@ -240,6 +241,7 @@ test_files:
|
|
240
241
|
- spec/favicon.ico
|
241
242
|
- spec/logo.png
|
242
243
|
- spec/rake_spec.rb
|
244
|
+
- spec/sample_asset_file.tsv
|
243
245
|
- spec/search_spec.rb
|
244
246
|
- spec/spec_helper.rb
|
245
247
|
- spec/streaminig_profiles_api_spec.rb
|