cloudinary 1.0.81 → 1.0.82

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 22f7163efe3beefab6b2653a0c3e440f45907eee
4
- data.tar.gz: 4a446807c4be6d7769384adebc9a2b08fe910d1c
5
- SHA512:
6
- metadata.gz: 70ea68172f8e246e74049e87ce49e49af856dc7428fdc68b635a3fa6f886c32c656fe625fa31051665da3c2037e7bac85f17e710d973bdbcb586e9969235b433
7
- data.tar.gz: 3663bde9f91c9d51b6760e1383f200d731425c63aad59520b508f6cd333f4793875bd79a361e5f1be126a65291c57833539054302fc6991cc56be6275a391109
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3a6cbd0bda5b871cca87e23ee5b64e551c68c17f
4
+ data.tar.gz: ebd64c74b999914e26ece99aa312b1e40a91dcec
5
+ SHA512:
6
+ metadata.gz: 1166188baf03ded5949a7f55c13d778e2a78aeeb731999a21978ce4bef2dc420a10b58e7e4eae2ad45b776f37535d6c20f493f147004c5e504f24d5116578c05
7
+ data.tar.gz: dafa9aede45cb6b996fb718adb7d438e3212b070722ec6930d3db53a2dabf528c8582fc9521946bb6ad74f5dde5b1dd32d28de519f938a4a5c0a01530b4ed042
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ = Version 1.0.82 - 2015-02-05
2
+ * Solve problem with CarrierWave integration to newer versions on the mongoid and carrierwave-mongoid gems.
3
+ * Enable root path for shared CDN:
4
+ * Modified restriction in utils so that it doesn't fail for root path with shared CDN.
5
+ * Added Object::present? predicate. Check if Object::present doesn't exist before defining it.
6
+ * Checking for `defined?(Rails)` is not enough if we want to invoke `Rails.version` etc. It was changed to `defined? Rails::version`.
7
+
1
8
  = Version 1.0.81 - 2015-01-08
2
9
  * CarrierWave - support default_format if format is unknown, support arbitrary format for resource_type raw.
3
10
 
data/lib/cloudinary.rb CHANGED
@@ -77,7 +77,7 @@ module Cloudinary
77
77
  end
78
78
 
79
79
  def self.app_root
80
- if (defined?(Rails) && Rails.root)
80
+ if defined? Rails::root
81
81
  # Rails 2.2 return String for Rails.root
82
82
  Rails.root.is_a?(Pathname) ? Rails.root : Pathname.new(Rails.root)
83
83
  else
@@ -89,7 +89,7 @@ module Cloudinary
89
89
 
90
90
  def self.config_env
91
91
  return ENV["CLOUDINARY_ENV"] if ENV["CLOUDINARY_ENV"]
92
- return Rails.env if defined?(Rails)
92
+ return Rails.env if defined? Rails::env
93
93
  nil
94
94
  end
95
95
 
@@ -83,7 +83,9 @@ class Cloudinary::CarrierWave::Storage < ::CarrierWave::Storage::Abstract
83
83
  elsif defined?(Mongoid::Document) && uploader.model.is_a?(Mongoid::Document)
84
84
  # Mongoid support
85
85
  if Mongoid::VERSION.split(".").first.to_i >= 4
86
- uploader.model.set(:"#{column}" => name)
86
+ column = column.to_sym
87
+ uploader.model.write_attribute(column, name)
88
+ uploader.model.set(column => name)
87
89
  else
88
90
  uploader.model.set(column, name)
89
91
  end
@@ -235,7 +235,7 @@ module CloudinaryHelper
235
235
  if !method_defined?(:image_tag)
236
236
  include ActionView::Helpers::AssetTagHelper
237
237
  end
238
- if defined?(Rails) && !Rails.version.start_with?("2") && Cloudinary.config.enhance_image_tag
238
+ if defined?(Rails::version) && !Rails.version.start_with?('2') && Cloudinary.config.enhance_image_tag
239
239
  alias_method_chain :image_tag, :cloudinary
240
240
  alias_method_chain :image_path, :cloudinary
241
241
  else
@@ -299,7 +299,7 @@ if defined? ActionView::Helpers::AssetUrlHelper
299
299
  end
300
300
  end
301
301
 
302
- if defined?(Rails) && Rails.version.start_with?("2")
302
+ if defined?(Rails::version) && Rails.version.start_with?('2')
303
303
  ActionView::Base.send :include, ActionView::Helpers::AssetTagHelper
304
304
  ActionView::Base.send :include, CloudinaryHelper
305
305
  end
@@ -3,6 +3,16 @@ if !nil.respond_to?(:blank?)
3
3
  def blank?
4
4
  respond_to?(:empty?) ? empty? : !self
5
5
  end
6
+
7
+ if not defined? Object::present?
8
+ # An object is present if it's not blank.
9
+ #
10
+ # @return [true, false]
11
+ def present?
12
+ !blank?
13
+ end
14
+ end
15
+
6
16
  end
7
17
 
8
18
  class NilClass #:nodoc:
@@ -130,11 +130,9 @@ class Cloudinary::Utils
130
130
  sign_version = config_option_consume(options, :sign_version) # Deprecated behavior
131
131
  url_suffix = options.delete(:url_suffix)
132
132
  use_root_path = config_option_consume(options, :use_root_path)
133
- if !private_cdn
134
- raise(CloudinaryException, "URL Suffix only supported in private CDN") unless url_suffix.blank?
135
- raise(CloudinaryException, "Root path only supported in private CDN") if use_root_path
136
- end
137
-
133
+
134
+ raise(CloudinaryException, "URL Suffix only supported in private CDN") if url_suffix.present? and not private_cdn
135
+
138
136
  original_source = source
139
137
  return original_source if source.blank?
140
138
  if defined?(CarrierWave::Uploader::Base) && source.is_a?(CarrierWave::Uploader::Base)
@@ -1,4 +1,4 @@
1
1
  # Copyright Cloudinary
2
2
  module Cloudinary
3
- VERSION = "1.0.81"
3
+ VERSION = "1.0.82"
4
4
  end
@@ -1,3 +1,4 @@
1
+ require 'rspec'
1
2
  require 'spec_helper'
2
3
  require 'cloudinary'
3
4
  require 'action_view'
@@ -7,7 +8,7 @@ helper_class = Class.new do
7
8
  include CloudinaryHelper
8
9
  end
9
10
 
10
- describe CloudinaryHelper do
11
+ RSpec.describe CloudinaryHelper do
11
12
  let(:helper) { helper_class.new }
12
13
 
13
14
 
@@ -16,9 +17,14 @@ describe CloudinaryHelper do
16
17
  subject(:input) { helper.cl_image_upload_tag(:image_id, options) }
17
18
 
18
19
  before do
19
- Cloudinary::Utils.stub(:cloudinary_api_url)
20
- Cloudinary::Utils.stub(:sign_request)
21
- helper.stub(:build_callback_url)
20
+ if defined? allow
21
+ allow(Cloudinary::Utils).to receive_messages :cloudinary_api_url => '', :sign_request => Hash.new
22
+ allow(helper).to receive(:build_callback_url).and_return('')
23
+ else
24
+ Cloudinary::Utils.should_receive(:cloudinary_api_url).and_return('')
25
+ Cloudinary::Utils.should_receive(:sign_request).and_return(Hash.new)
26
+ helper.should_receive(:build_callback_url).and_return('')
27
+ end
22
28
  end
23
29
 
24
30
  it "allow multiple upload" do
@@ -29,19 +35,25 @@ describe CloudinaryHelper do
29
35
  end
30
36
 
31
37
  context "#cl_image_tag" do
32
- subject(:input) { helper.cl_image_tag("sample.jpg", options) }
38
+ subject(:input) { helper.cl_image_tag('sample.jpg', options) }
33
39
 
34
40
  context "responsive_width" do
35
41
  let(:options) { {responsive_width: true, cloud_name: "test"} }
36
42
  it "should use data-src for responsive_width" do
37
- expect(input).to eq("<img class=\"cld-responsive\" data-src=\"http://res.cloudinary.com/test/image/upload/c_limit,w_auto/sample.jpg\"></img>")
43
+ img_tag = html_tag_matcher 'img'
44
+ expect(input).to match img_tag
45
+ expect(input).to include('class="cld-responsive"')
46
+ expect(input).to include( 'data-src="http://res.cloudinary.com/test/image/upload/c_limit,w_auto/sample.jpg"')
38
47
  end
39
48
  end
40
49
 
41
50
  context "dpr_auto" do
42
51
  let(:options) { {dpr: :auto, cloud_name: "test"} }
43
52
  it "should use data-src for dpr auto" do
44
- expect(input).to eq("<img class=\"cld-hidpi\" data-src=\"http://res.cloudinary.com/test/image/upload/dpr_auto/sample.jpg\"></img>")
53
+ img_tag = html_tag_matcher 'img'
54
+ expect(input).to match(img_tag)
55
+ expect(input).to include('data-src="http://res.cloudinary.com/test/image/upload/dpr_auto/sample.jpg"')
56
+ expect(input).to include('class="cld-hidpi"')
45
57
  end
46
58
  end
47
59
  end
data/spec/spec_helper.rb CHANGED
@@ -4,3 +4,10 @@ RSpec.configure do |config|
4
4
  config.run_all_when_everything_filtered = true
5
5
  config.filter_run_excluding :delete_all => true
6
6
  end
7
+
8
+ # Create a regexp with the given tag name.
9
+ # @param [String or Symbol] tag tag name (e.g. `img`)
10
+ # @return [Regexp] the regular expression to match the tag
11
+ def html_tag_matcher( tag)
12
+ /<#{tag}([\s]+[-[:word:]]+[\s]*\=\s*\"[^\"]*\")*\s*>.*<\s*\/#{tag}\s*>/
13
+ end
@@ -18,7 +18,7 @@ describe Cloudinary::Uploader do
18
18
  end
19
19
 
20
20
  it "should successfully upload file by url" do
21
- result = Cloudinary::Uploader.upload("http://cloudinary.com/images/logo.png")
21
+ result = Cloudinary::Uploader.upload("http://cloudinary.com/images/old_logo.png")
22
22
  expect(result["width"]).to eq(241)
23
23
  expect(result["height"]).to eq(51)
24
24
  expected_signature = Cloudinary::Utils.api_sign_request({:public_id=>result["public_id"], :version=>result["version"]}, Cloudinary.config.api_secret)
data/spec/utils_spec.rb CHANGED
@@ -1,378 +1,384 @@
1
- require 'spec_helper'
2
- require 'cloudinary'
3
-
4
- describe Cloudinary::Utils do
5
- before(:each) do
6
- Cloudinary.config do
7
- |config|
8
- config.cloud_name = "test123"
9
- config.secure_distribution = nil
10
- config.private_cdn = false
11
- config.secure = false
12
- config.cname = nil
13
- config.cdn_subdomain = false
14
- config.api_key = "1234"
15
- config.api_secret = "b"
16
- end
17
- end
18
-
19
- def test_cloudinary_url(public_id, options, expected_url, expected_options)
20
- url = Cloudinary::Utils.cloudinary_url(public_id, options)
21
- expect(url).to eq(expected_url)
22
- expect(options).to eq(expected_options)
23
- url
24
- end
25
-
26
- it "should use cloud_name from config" do
27
- test_cloudinary_url("test", {}, "http://res.cloudinary.com/test123/image/upload/test", {})
28
- end
29
-
30
- it "should allow overriding cloud_name in options" do
31
- test_cloudinary_url("test", {:cloud_name=>"test321"}, "http://res.cloudinary.com/test321/image/upload/test", {})
32
- end
33
-
34
- it "should use default secure distribution if secure=true" do
35
- test_cloudinary_url("test", {:secure=>true}, "https://res.cloudinary.com/test123/image/upload/test", {})
36
- end
37
-
38
- it "should allow overriding secure distribution if secure=true" do
39
- test_cloudinary_url("test", {:secure=>true, :secure_distribution=>"something.else.com"}, "https://something.else.com/test123/image/upload/test", {})
40
- end
41
-
42
- it "should take secure distribution from config if secure=true" do
43
- Cloudinary.config.secure_distribution = "config.secure.distribution.com"
44
- test_cloudinary_url("test", {:secure=>true}, "https://config.secure.distribution.com/test123/image/upload/test", {})
45
- end
46
-
47
- it "should default to akamai if secure is given with private_cdn and no secure_distribution" do
48
- test_cloudinary_url("test", {:secure=>true, :private_cdn=>true}, "https://test123-res.cloudinary.com/image/upload/test", {})
49
- end
50
-
51
- it "should not add cloud_name if secure private_cdn and secure non akamai secure_distribution" do
52
- test_cloudinary_url("test", {:secure=>true, :private_cdn=>true, :secure_distribution=>"something.cloudfront.net"}, "https://something.cloudfront.net/image/upload/test", {})
53
- end
54
-
55
- it "should allow overriding private_cdn if private_cdn=true" do
56
- test_cloudinary_url("test", {:private_cdn => true}, "http://test123-res.cloudinary.com/image/upload/test", {})
57
- end
58
-
59
- it "should allow overriding private_cdn if private_cdn=false" do
60
- Cloudinary.config.private_cdn = true
61
- test_cloudinary_url("test", {:private_cdn => false}, "http://res.cloudinary.com/test123/image/upload/test", {})
62
- end
63
-
64
- it "should allow overriding cname if cname=example.com" do
65
- test_cloudinary_url("test", {:cname => "example.com"}, "http://example.com/test123/image/upload/test", {})
66
- end
67
-
68
- it "should allow overriding cname if cname=false" do
69
- Cloudinary.config.cname = "example.com"
70
- test_cloudinary_url("test", {:cname => nil}, "http://res.cloudinary.com/test123/image/upload/test", {})
71
- end
72
-
73
- it "should use format from options" do
74
- test_cloudinary_url("test", {:format=>:jpg}, "http://res.cloudinary.com/test123/image/upload/test.jpg", {})
75
- end
76
-
77
- it "should disallow url_suffix in shared distribution" do
78
- expect{Cloudinary::Utils.cloudinary_url("test", {:url_suffix=>"hello"})}.to raise_error(CloudinaryException)
79
- end
80
-
81
- it "should disallow url_suffix in non upload types" do
82
- expect{Cloudinary::Utils.cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true, :type=>:facebook})}.to raise_error(CloudinaryException)
83
- end
84
-
85
- it "should disallow url_suffix with / or ." do
86
- expect{Cloudinary::Utils.cloudinary_url("test", {:url_suffix=>"hello/world", :private_cdn=>true})}.to raise_error(CloudinaryException)
87
- expect{Cloudinary::Utils.cloudinary_url("test", {:url_suffix=>"hello.world", :private_cdn=>true})}.to raise_error(CloudinaryException)
88
- end
89
-
90
- it "should support url_suffix for private_cdn" do
91
- test_cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true}, "http://test123-res.cloudinary.com/images/test/hello", {})
92
- test_cloudinary_url("test", {:url_suffix=>"hello", :angle=>0, :private_cdn=>true}, "http://test123-res.cloudinary.com/images/a_0/test/hello", {})
93
- end
94
-
95
- it "should put format after url_suffix" do
96
- test_cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true, :format=>"jpg"}, "http://test123-res.cloudinary.com/images/test/hello.jpg", {})
97
- end
98
-
99
- it "should not sign the url_suffix" do
100
- expected_signture = Cloudinary::Utils.cloudinary_url("test", :format=>"jpg", :sign_url=>true).match(/s--[0-9A-Za-z_-]{8}--/).to_s
101
- test_cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true, :format=>"jpg", :sign_url=>true}, "http://test123-res.cloudinary.com/images/#{expected_signture}/test/hello.jpg", {})
102
-
103
- expected_signture = Cloudinary::Utils.cloudinary_url("test", :format=>"jpg", :angle=>0, :sign_url=>true).match(/s--[0-9A-Za-z_-]{8}--/).to_s
104
- test_cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true, :format=>"jpg", :angle=>0, :sign_url=>true}, "http://test123-res.cloudinary.com/images/#{expected_signture}/a_0/test/hello.jpg", {})
105
- end
106
-
107
- it "should support url_suffix for raw uploads" do
108
- test_cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true, :resource_type=>:raw}, "http://test123-res.cloudinary.com/files/test/hello", {})
109
- end
110
-
111
- it "should disllow use_root_path in shared distribution" do
112
- expect{Cloudinary::Utils.cloudinary_url("test", {:use_root_path=>true})}.to raise_error(CloudinaryException)
113
- end
114
-
115
- it "should support use_root_path for private_cdn" do
116
- test_cloudinary_url("test", {:use_root_path=>true, :private_cdn=>true}, "http://test123-res.cloudinary.com/test", {})
117
- test_cloudinary_url("test", {:use_root_path=>true, :private_cdn=>true, :angle=>0}, "http://test123-res.cloudinary.com/a_0/test", {})
118
- end
119
-
120
- it "should support use_root_path together with url_suffix for private_cdn" do
121
- test_cloudinary_url("test", {:use_root_path=>true, :url_suffix=>"hello", :private_cdn=>true}, "http://test123-res.cloudinary.com/test/hello", {})
122
- end
123
-
124
- it "should disllow use_root_path if not image/upload" do
125
- expect{Cloudinary::Utils.cloudinary_url("test", {:use_root_path=>true, :private_cdn=>true, :type=>:facebook})}.to raise_error(CloudinaryException)
126
- expect{Cloudinary::Utils.cloudinary_url("test", {:use_root_path=>true, :private_cdn=>true, :resource_type=>:raw})}.to raise_error(CloudinaryException)
127
- end
128
-
129
- it "should use width and height from options only if crop is given" do
130
- test_cloudinary_url("test", {:width=>100, :height=>100}, "http://res.cloudinary.com/test123/image/upload/test", {:width=>100, :height=>100})
131
- test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:crop}, "http://res.cloudinary.com/test123/image/upload/c_crop,h_100,w_100/test", {:width=>100, :height=>100})
132
- end
133
-
134
- it "should not pass width and height to html in case of fit, lfill or limit crop" do
135
- test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:limit}, "http://res.cloudinary.com/test123/image/upload/c_limit,h_100,w_100/test", {})
136
- test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:lfill}, "http://res.cloudinary.com/test123/image/upload/c_lfill,h_100,w_100/test", {})
137
- test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:fit}, "http://res.cloudinary.com/test123/image/upload/c_fit,h_100,w_100/test", {})
138
- end
139
-
140
- it "should not pass width and height to html in case angle was used" do
141
- test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:scale, :angle=>:auto}, "http://res.cloudinary.com/test123/image/upload/a_auto,c_scale,h_100,w_100/test", {})
142
- end
143
-
144
- it "should use x, y, radius, prefix, gravity and quality from options" do
145
- test_cloudinary_url("test", {:x=>1, :y=>2, :radius=>3, :gravity=>:center, :quality=>0.4, :prefix=>"a"}, "http://res.cloudinary.com/test123/image/upload/g_center,p_a,q_0.4,r_3,x_1,y_2/test", {})
146
- end
147
-
148
- it "should support named tranformation" do
149
- test_cloudinary_url("test", {:transformation=>"blip"}, "http://res.cloudinary.com/test123/image/upload/t_blip/test", {})
150
- end
151
-
152
- it "should support array of named tranformations" do
153
- test_cloudinary_url("test", {:transformation=>["blip", "blop"]}, "http://res.cloudinary.com/test123/image/upload/t_blip.blop/test", {})
154
- end
155
-
156
- it "should support base tranformation" do
157
- test_cloudinary_url("test", {:transformation=>{:x=>100, :y=>100, :crop=>:fill}, :crop=>:crop, :width=>100}, "http://res.cloudinary.com/test123/image/upload/c_fill,x_100,y_100/c_crop,w_100/test", {:width=>100})
158
- end
159
-
160
- it "should support array of base tranformations" do
161
- test_cloudinary_url("test", {:transformation=>[{:x=>100, :y=>100, :width=>200, :crop=>:fill}, {:radius=>10}], :crop=>:crop, :width=>100}, "http://res.cloudinary.com/test123/image/upload/c_fill,w_200,x_100,y_100/r_10/c_crop,w_100/test", {:width=>100})
162
- end
163
-
164
- it "should support array of tranformations" do
165
- result = Cloudinary::Utils.generate_transformation_string([{:x=>100, :y=>100, :width=>200, :crop=>:fill}, {:radius=>10}])
166
- expect(result).to eq("c_fill,w_200,x_100,y_100/r_10")
167
- end
168
-
169
- it "should not include empty tranformations" do
170
- test_cloudinary_url("test", {:transformation=>[{}, {:x=>100, :y=>100, :crop=>:fill}, {}]}, "http://res.cloudinary.com/test123/image/upload/c_fill,x_100,y_100/test", {})
171
- end
172
-
173
- it "should support size" do
174
- test_cloudinary_url("test", {:size=>"10x10", :crop=>:crop}, "http://res.cloudinary.com/test123/image/upload/c_crop,h_10,w_10/test", {:width=>"10", :height=>"10"})
175
- end
176
-
177
- it "should use type from options" do
178
- test_cloudinary_url("test", {:type=>:facebook}, "http://res.cloudinary.com/test123/image/facebook/test", {})
179
- end
180
-
181
- it "should use resource_type from options" do
182
- test_cloudinary_url("test", {:resource_type=>:raw}, "http://res.cloudinary.com/test123/raw/upload/test", {})
183
- end
184
-
185
- it "should ignore http links only if type is not given or is asset" do
186
- test_cloudinary_url("http://test", {:type=>nil}, "http://test", {})
187
- test_cloudinary_url("http://test", {:type=>:asset}, "http://test", {})
188
- test_cloudinary_url("http://test", {:type=>:fetch}, "http://res.cloudinary.com/test123/image/fetch/http://test" , {})
189
- end
190
-
191
- it "should use allow absolute links to /images" do
192
- test_cloudinary_url("/images/test", {}, "http://res.cloudinary.com/test123/image/upload/test", {})
193
- end
194
-
195
- it "should use ignore absolute links not to /images" do
196
- test_cloudinary_url("/js/test", {}, "/js/test", {})
197
- end
198
-
199
- it "should escape fetch urls" do
200
- test_cloudinary_url("http://blah.com/hello?a=b", {:type=>:fetch}, "http://res.cloudinary.com/test123/image/fetch/http://blah.com/hello%3Fa%3Db", {})
201
- end
202
-
203
- it "should should escape http urls" do
204
- test_cloudinary_url("http://www.youtube.com/watch?v=d9NF2edxy-M", {:type=>:youtube}, "http://res.cloudinary.com/test123/image/youtube/http://www.youtube.com/watch%3Fv%3Dd9NF2edxy-M", {})
205
- end
206
-
207
- it "should support background" do
208
- test_cloudinary_url("test", {:background=>"red"}, "http://res.cloudinary.com/test123/image/upload/b_red/test", {})
209
- test_cloudinary_url("test", {:background=>"#112233"}, "http://res.cloudinary.com/test123/image/upload/b_rgb:112233/test", {})
210
- end
211
-
212
- it "should support default_image" do
213
- test_cloudinary_url("test", {:default_image=>"default"}, "http://res.cloudinary.com/test123/image/upload/d_default/test", {})
214
- end
215
-
216
- it "should support angle" do
217
- test_cloudinary_url("test", {:angle=>"55"}, "http://res.cloudinary.com/test123/image/upload/a_55/test", {})
218
- test_cloudinary_url("test", {:angle=>["auto", "55"]}, "http://res.cloudinary.com/test123/image/upload/a_auto.55/test", {})
219
- end
220
-
221
- it "should support format for fetch urls" do
222
- test_cloudinary_url("http://cloudinary.com/images/logo.png", {:format=>"jpg", :type=>:fetch}, "http://res.cloudinary.com/test123/image/fetch/f_jpg/http://cloudinary.com/images/logo.png", {})
223
- end
224
-
225
- it "should support effect" do
226
- test_cloudinary_url("test", {:effect=>"sepia"}, "http://res.cloudinary.com/test123/image/upload/e_sepia/test", {})
227
- end
228
-
229
- it "should support effect with hash param" do
230
- test_cloudinary_url("test", {:effect=>{"sepia"=>10}}, "http://res.cloudinary.com/test123/image/upload/e_sepia:10/test", {})
231
- end
232
-
233
- it "should support effect with array param" do
234
- test_cloudinary_url("test", {:effect=>["sepia", 10]}, "http://res.cloudinary.com/test123/image/upload/e_sepia:10/test", {})
235
- end
236
-
237
- {:overlay=>:l, :underlay=>:u}.each do |param, letter|
238
- it "should support #{param}" do
239
- test_cloudinary_url("test", {param=>"text:hello"}, "http://res.cloudinary.com/test123/image/upload/#{letter}_text:hello/test", {})
240
- end
241
-
242
- it "should not pass width/height to html for #{param}" do
243
- test_cloudinary_url("test", {param=>"text:hello", :height=>100, :width=>100}, "http://res.cloudinary.com/test123/image/upload/h_100,#{letter}_text:hello,w_100/test", {})
244
- end
245
- end
246
-
247
- it "should use ssl_detected if secure is not given as parameter and not set to true in configuration" do
248
- test_cloudinary_url("test", {:ssl_detected=>true}, "https://res.cloudinary.com/test123/image/upload/test", {})
249
- end
250
-
251
- it "should use secure if given over ssl_detected and configuration" do
252
- Cloudinary.config.secure = true
253
- test_cloudinary_url("test", {:ssl_detected=>true, :secure=>false}, "http://res.cloudinary.com/test123/image/upload/test", {})
254
- end
255
-
256
- it "should use secure: true from configuration over ssl_detected" do
257
- Cloudinary.config.secure = true
258
- test_cloudinary_url("test", {:ssl_detected=>false}, "https://res.cloudinary.com/test123/image/upload/test", {})
259
- end
260
-
261
- it "should support extenal cname" do
262
- test_cloudinary_url("test", {:cname=>"hello.com"}, "http://hello.com/test123/image/upload/test", {})
263
- end
264
-
265
- it "should support extenal cname with cdn_subdomain on" do
266
- test_cloudinary_url("test", {:cname=>"hello.com", :cdn_subdomain=>true}, "http://a2.hello.com/test123/image/upload/test", {})
267
- end
268
-
269
- it "should support cdn_subdomain with secure on if using shared_domain" do
270
- test_cloudinary_url("test", {:secure=>true, :cdn_subdomain=>true}, "https://res-2.cloudinary.com/test123/image/upload/test", {})
271
- end
272
-
273
- it "should support secure_cdn_subdomain false override with secure" do
274
- test_cloudinary_url("test", {:secure=>true, :cdn_subdomain=>true, :secure_cdn_subdomain=>false}, "https://res.cloudinary.com/test123/image/upload/test", {})
275
- end
276
-
277
- it "should support secure_cdn_subdomain true override with secure" do
278
- test_cloudinary_url("test", {:secure=>true, :cdn_subdomain=>true, :secure_cdn_subdomain=>true, :private_cdn=>true}, "https://test123-res-2.cloudinary.com/image/upload/test", {})
279
- end
280
-
281
- it "should support string param" do
282
- test_cloudinary_url("test", {"effect"=>{"sepia"=>10}}, "http://res.cloudinary.com/test123/image/upload/e_sepia:10/test", {})
283
- end
284
-
285
- it "should support border" do
286
- test_cloudinary_url("test", {"border"=>{:width=>5}}, "http://res.cloudinary.com/test123/image/upload/bo_5px_solid_black/test", {})
287
- test_cloudinary_url("test", {"border"=>{:width=>5, :color=>"#ffaabbdd"}}, "http://res.cloudinary.com/test123/image/upload/bo_5px_solid_rgb:ffaabbdd/test", {})
288
- test_cloudinary_url("test", {"border"=>"1px_solid_blue"}, "http://res.cloudinary.com/test123/image/upload/bo_1px_solid_blue/test", {})
289
- test_cloudinary_url("test", {"border"=>"2"}, "http://res.cloudinary.com/test123/image/upload/test", {:border=>"2"})
290
- end
291
-
292
- it "should support flags" do
293
- test_cloudinary_url("test", {"flags"=>"abc"}, "http://res.cloudinary.com/test123/image/upload/fl_abc/test", {})
294
- test_cloudinary_url("test", {"flags"=>["abc", "def"]}, "http://res.cloudinary.com/test123/image/upload/fl_abc.def/test", {})
295
- end
296
-
297
- it "build_upload_params should not destroy options" do
298
- options = {:width=>100, :crop=>:scale}
299
- expect(Cloudinary::Uploader.build_upload_params(options)[:transformation]).to eq("c_scale,w_100")
300
- expect(options.length).to eq(2)
301
- end
302
-
303
- it "build_upload_params canonize booleans" do
304
- options = {:backup=>true, :use_filename=>false, :colors=>"true", :exif=>"false", :colors=>:true,
305
- :image_metadata=>:false, :invalidate=>1, :eager_async=>"1"}
306
- params = Cloudinary::Uploader.build_upload_params(options)
307
- expect(Cloudinary::Api.only(params, *options.keys)).to eq(
308
- :backup=>1, :use_filename=>0, :colors=>1, :exif=>0, :colors=>1,
309
- :image_metadata=>0, :invalidate=>1, :eager_async=>1
310
- )
311
- expect(Cloudinary::Uploader.build_upload_params(:backup=>nil)[:backup]).to be_nil
312
- expect(Cloudinary::Uploader.build_upload_params({})[:backup]).to be_nil
313
- end
314
-
315
- it "should add version if public_id contains /" do
316
- test_cloudinary_url("folder/test", {}, "http://res.cloudinary.com/test123/image/upload/v1/folder/test", {})
317
- test_cloudinary_url("folder/test", {:version=>123}, "http://res.cloudinary.com/test123/image/upload/v123/folder/test", {})
318
- end
319
-
320
- it "should not add version if public_id contains version already" do
321
- test_cloudinary_url("v1234/test", {}, "http://res.cloudinary.com/test123/image/upload/v1234/test", {})
322
- end
323
-
324
- it "should allow to shorted image/upload urls" do
325
- test_cloudinary_url("test", {:shorten=>true}, "http://res.cloudinary.com/test123/iu/test", {})
326
- end
327
-
328
- it "should allow to use folders in PreloadedFile" do
329
- signature = Cloudinary::Utils.api_sign_request({:public_id=>"folder/file", :version=>"1234"}, Cloudinary.config.api_secret)
330
- preloaded = Cloudinary::PreloadedFile.new("image/upload/v1234/folder/file.jpg#" + signature)
331
- expect(preloaded).to be_valid
332
- end
333
-
334
- it "should escape public_ids" do
335
- [
336
- ["a b", "a%20b"],
337
- ["a+b", "a%2Bb"],
338
- ["a%20b", "a%20b"],
339
- ["a-b", "a-b"],
340
- ["a??b", "a%3F%3Fb"],
341
- ["parentheses(interject)", "parentheses%28interject%29"]
342
- ].each do
343
- |source, target|
344
- expect(Cloudinary::Utils.cloudinary_url(source)).to eq("http://res.cloudinary.com/test123/image/upload/#{target}")
345
- end
346
- end
347
-
348
- it "should correctly sign URLs", :signed => true do
349
- test_cloudinary_url("image.jpg", {:version => 1234, :transformation => {:crop => "crop", :width => 10, :height => 20}, :sign_url => true}, "http://res.cloudinary.com/test123/image/upload/s--Ai4Znfl3--/c_crop,h_20,w_10/v1234/image.jpg", {})
350
- test_cloudinary_url("image.jpg", {:version => 1234, :sign_url => true}, "http://res.cloudinary.com/test123/image/upload/s----SjmNDA--/v1234/image.jpg", {})
351
- test_cloudinary_url("image.jpg", {:transformation => {:crop => "crop", :width => 10, :height => 20}, :sign_url => true}, "http://res.cloudinary.com/test123/image/upload/s--Ai4Znfl3--/c_crop,h_20,w_10/image.jpg", {})
352
- test_cloudinary_url("image.jpg", {:transformation => {:crop => "crop", :width => 10, :height => 20}, :type => :authenticated, :sign_url => true}, "http://res.cloudinary.com/test123/image/authenticated/s--Ai4Znfl3--/c_crop,h_20,w_10/image.jpg", {})
353
- test_cloudinary_url("http://google.com/path/to/image.png", {:type => "fetch", :version => 1234, :sign_url => true}, "http://res.cloudinary.com/test123/image/fetch/s--hH_YcbiS--/v1234/http://google.com/path/to/image.png", {})
354
- end
355
-
356
- it "should correctly sign URLs in deprecated sign_version mode", :signed => true do
357
- test_cloudinary_url("image.jpg", {:version => 1234, :transformation => {:crop => "crop", :width => 10, :height => 20}, :sign_url => true, :sign_version => true}, "http://res.cloudinary.com/test123/image/upload/s--MaRXzoEC--/c_crop,h_20,w_10/v1234/image.jpg", {})
358
- test_cloudinary_url("image.jpg", {:version => 1234, :sign_url => true, :sign_version => true}, "http://res.cloudinary.com/test123/image/upload/s--ZlgFLQcO--/v1234/image.jpg", {})
359
- test_cloudinary_url("image.jpg", {:transformation => {:crop => "crop", :width => 10, :height => 20}, :sign_url => true, :sign_version => true}, "http://res.cloudinary.com/test123/image/upload/s--Ai4Znfl3--/c_crop,h_20,w_10/image.jpg", {})
360
- test_cloudinary_url("http://google.com/path/to/image.png", {:type => "fetch", :version => 1234, :sign_url => true, :sign_version => true}, "http://res.cloudinary.com/test123/image/fetch/s--_GAUclyB--/v1234/http://google.com/path/to/image.png", {})
361
- end
362
-
363
- it "should correctly sign_request" do
364
- params = Cloudinary::Utils.sign_request({:public_id=>"folder/file", :version=>"1234"})
365
- expect(params).to eq(:public_id=>"folder/file", :version=>"1234", :signature=>"7a3349cbb373e4812118d625047ede50b90e7b67", :api_key=>"1234")
366
- end
367
-
368
- it "should support responsive width" do
369
- test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:crop, :responsive_width=>true}, "http://res.cloudinary.com/test123/image/upload/c_crop,h_100,w_100/c_limit,w_auto/test", {responsive: true})
370
- Cloudinary.config.responsive_width_transformation = {:width => :auto, :crop => :pad}
371
- test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:crop, :responsive_width=>true}, "http://res.cloudinary.com/test123/image/upload/c_crop,h_100,w_100/c_pad,w_auto/test", {responsive: true})
372
- end
373
-
374
- it "should correctly encode double arrays" do
375
- expect(Cloudinary::Utils.encode_double_array([1,2,3,4])).to eq("1,2,3,4")
376
- expect(Cloudinary::Utils.encode_double_array([[1,2,3,4],[5,6,7,8]])).to eq("1,2,3,4|5,6,7,8")
377
- end
378
- end
1
+ require 'spec_helper'
2
+ require 'cloudinary'
3
+
4
+ describe Cloudinary::Utils do
5
+ before(:each) do
6
+ Cloudinary.config do
7
+ |config|
8
+ config.cloud_name = "test123"
9
+ config.secure_distribution = nil
10
+ config.private_cdn = false
11
+ config.secure = false
12
+ config.cname = nil
13
+ config.cdn_subdomain = false
14
+ config.api_key = "1234"
15
+ config.api_secret = "b"
16
+ end
17
+ end
18
+
19
+ def test_cloudinary_url(public_id, options, expected_url, expected_options)
20
+ url = Cloudinary::Utils.cloudinary_url(public_id, options)
21
+ expect(url).to eq(expected_url)
22
+ expect(options).to eq(expected_options)
23
+ url
24
+ end
25
+
26
+ it "should use cloud_name from config" do
27
+ test_cloudinary_url("test", {}, "http://res.cloudinary.com/test123/image/upload/test", {})
28
+ end
29
+
30
+ it "should allow overriding cloud_name in options" do
31
+ test_cloudinary_url("test", {:cloud_name=>"test321"}, "http://res.cloudinary.com/test321/image/upload/test", {})
32
+ end
33
+
34
+ it "should use default secure distribution if secure=true" do
35
+ test_cloudinary_url("test", {:secure=>true}, "https://res.cloudinary.com/test123/image/upload/test", {})
36
+ end
37
+
38
+ it "should allow overriding secure distribution if secure=true" do
39
+ test_cloudinary_url("test", {:secure=>true, :secure_distribution=>"something.else.com"}, "https://something.else.com/test123/image/upload/test", {})
40
+ end
41
+
42
+ it "should take secure distribution from config if secure=true" do
43
+ Cloudinary.config.secure_distribution = "config.secure.distribution.com"
44
+ test_cloudinary_url("test", {:secure=>true}, "https://config.secure.distribution.com/test123/image/upload/test", {})
45
+ end
46
+
47
+ it "should default to akamai if secure is given with private_cdn and no secure_distribution" do
48
+ test_cloudinary_url("test", {:secure=>true, :private_cdn=>true}, "https://test123-res.cloudinary.com/image/upload/test", {})
49
+ end
50
+
51
+ it "should not add cloud_name if secure private_cdn and secure non akamai secure_distribution" do
52
+ test_cloudinary_url("test", {:secure=>true, :private_cdn=>true, :secure_distribution=>"something.cloudfront.net"}, "https://something.cloudfront.net/image/upload/test", {})
53
+ end
54
+
55
+ it "should allow overriding private_cdn if private_cdn=true" do
56
+ test_cloudinary_url("test", {:private_cdn => true}, "http://test123-res.cloudinary.com/image/upload/test", {})
57
+ end
58
+
59
+ it "should allow overriding private_cdn if private_cdn=false" do
60
+ Cloudinary.config.private_cdn = true
61
+ test_cloudinary_url("test", {:private_cdn => false}, "http://res.cloudinary.com/test123/image/upload/test", {})
62
+ end
63
+
64
+ it "should allow overriding cname if cname=example.com" do
65
+ test_cloudinary_url("test", {:cname => "example.com"}, "http://example.com/test123/image/upload/test", {})
66
+ end
67
+
68
+ it "should allow overriding cname if cname=false" do
69
+ Cloudinary.config.cname = "example.com"
70
+ test_cloudinary_url("test", {:cname => nil}, "http://res.cloudinary.com/test123/image/upload/test", {})
71
+ end
72
+
73
+ it "should use format from options" do
74
+ test_cloudinary_url("test", {:format=>:jpg}, "http://res.cloudinary.com/test123/image/upload/test.jpg", {})
75
+ end
76
+
77
+ it "should disallow url_suffix in shared distribution" do
78
+ expect{Cloudinary::Utils.cloudinary_url("test", {:url_suffix=>"hello"})}.to raise_error(CloudinaryException)
79
+ end
80
+
81
+ it "should disallow url_suffix in non upload types" do
82
+ expect{Cloudinary::Utils.cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true, :type=>:facebook})}.to raise_error(CloudinaryException)
83
+ end
84
+
85
+ it "should disallow url_suffix with / or ." do
86
+ expect{Cloudinary::Utils.cloudinary_url("test", {:url_suffix=>"hello/world", :private_cdn=>true})}.to raise_error(CloudinaryException)
87
+ expect{Cloudinary::Utils.cloudinary_url("test", {:url_suffix=>"hello.world", :private_cdn=>true})}.to raise_error(CloudinaryException)
88
+ end
89
+
90
+ it "should support url_suffix for private_cdn" do
91
+ test_cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true}, "http://test123-res.cloudinary.com/images/test/hello", {})
92
+ test_cloudinary_url("test", {:url_suffix=>"hello", :angle=>0, :private_cdn=>true}, "http://test123-res.cloudinary.com/images/a_0/test/hello", {})
93
+ end
94
+
95
+ it "should put format after url_suffix" do
96
+ test_cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true, :format=>"jpg"}, "http://test123-res.cloudinary.com/images/test/hello.jpg", {})
97
+ end
98
+
99
+ it "should not sign the url_suffix" do
100
+ expected_signture = Cloudinary::Utils.cloudinary_url("test", :format=>"jpg", :sign_url=>true).match(/s--[0-9A-Za-z_-]{8}--/).to_s
101
+ test_cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true, :format=>"jpg", :sign_url=>true}, "http://test123-res.cloudinary.com/images/#{expected_signture}/test/hello.jpg", {})
102
+
103
+ expected_signture = Cloudinary::Utils.cloudinary_url("test", :format=>"jpg", :angle=>0, :sign_url=>true).match(/s--[0-9A-Za-z_-]{8}--/).to_s
104
+ test_cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true, :format=>"jpg", :angle=>0, :sign_url=>true}, "http://test123-res.cloudinary.com/images/#{expected_signture}/a_0/test/hello.jpg", {})
105
+ end
106
+
107
+ it "should support url_suffix for raw uploads" do
108
+ test_cloudinary_url("test", {:url_suffix=>"hello", :private_cdn=>true, :resource_type=>:raw}, "http://test123-res.cloudinary.com/files/test/hello", {})
109
+ end
110
+
111
+ describe 'root_path support' do
112
+
113
+ it "should allow use_root_path in shared distribution" do
114
+ # expect{Cloudinary::Utils.cloudinary_url("test", {:use_root_path=>true})}.to raise_error(CloudinaryException)
115
+ test_cloudinary_url("test", {:use_root_path=>true, :private_cdn=>false}, "http://res.cloudinary.com/test123/test", {})
116
+ test_cloudinary_url("test", {:use_root_path=>true, :private_cdn=>false, :angle=>0}, "http://res.cloudinary.com/test123/a_0/test", {})
117
+ end
118
+
119
+ it "should support use_root_path for private_cdn" do
120
+ test_cloudinary_url("test", {:use_root_path=>true, :private_cdn=>true}, "http://test123-res.cloudinary.com/test", {})
121
+ test_cloudinary_url("test", {:use_root_path=>true, :private_cdn=>true, :angle=>0}, "http://test123-res.cloudinary.com/a_0/test", {})
122
+ end
123
+
124
+ it "should support use_root_path together with url_suffix for private_cdn" do
125
+ test_cloudinary_url("test", {:use_root_path=>true, :url_suffix=>"hello", :private_cdn=>true}, "http://test123-res.cloudinary.com/test/hello", {})
126
+ end
127
+
128
+ it "should disallow use_root_path if not image/upload" do
129
+ expect{Cloudinary::Utils.cloudinary_url("test", {:use_root_path=>true, :private_cdn=>true, :type=>:facebook})}.to raise_error(CloudinaryException)
130
+ expect{Cloudinary::Utils.cloudinary_url("test", {:use_root_path=>true, :private_cdn=>true, :resource_type=>:raw})}.to raise_error(CloudinaryException)
131
+ end
132
+
133
+ end
134
+
135
+ it "should use width and height from options only if crop is given" do
136
+ test_cloudinary_url("test", {:width=>100, :height=>100}, "http://res.cloudinary.com/test123/image/upload/test", {:width=>100, :height=>100})
137
+ test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:crop}, "http://res.cloudinary.com/test123/image/upload/c_crop,h_100,w_100/test", {:width=>100, :height=>100})
138
+ end
139
+
140
+ it "should not pass width and height to html in case of fit, lfill or limit crop" do
141
+ test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:limit}, "http://res.cloudinary.com/test123/image/upload/c_limit,h_100,w_100/test", {})
142
+ test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:lfill}, "http://res.cloudinary.com/test123/image/upload/c_lfill,h_100,w_100/test", {})
143
+ test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:fit}, "http://res.cloudinary.com/test123/image/upload/c_fit,h_100,w_100/test", {})
144
+ end
145
+
146
+ it "should not pass width and height to html in case angle was used" do
147
+ test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:scale, :angle=>:auto}, "http://res.cloudinary.com/test123/image/upload/a_auto,c_scale,h_100,w_100/test", {})
148
+ end
149
+
150
+ it "should use x, y, radius, prefix, gravity and quality from options" do
151
+ test_cloudinary_url("test", {:x=>1, :y=>2, :radius=>3, :gravity=>:center, :quality=>0.4, :prefix=>"a"}, "http://res.cloudinary.com/test123/image/upload/g_center,p_a,q_0.4,r_3,x_1,y_2/test", {})
152
+ end
153
+
154
+ it "should support named tranformation" do
155
+ test_cloudinary_url("test", {:transformation=>"blip"}, "http://res.cloudinary.com/test123/image/upload/t_blip/test", {})
156
+ end
157
+
158
+ it "should support array of named tranformations" do
159
+ test_cloudinary_url("test", {:transformation=>["blip", "blop"]}, "http://res.cloudinary.com/test123/image/upload/t_blip.blop/test", {})
160
+ end
161
+
162
+ it "should support base tranformation" do
163
+ test_cloudinary_url("test", {:transformation=>{:x=>100, :y=>100, :crop=>:fill}, :crop=>:crop, :width=>100}, "http://res.cloudinary.com/test123/image/upload/c_fill,x_100,y_100/c_crop,w_100/test", {:width=>100})
164
+ end
165
+
166
+ it "should support array of base tranformations" do
167
+ test_cloudinary_url("test", {:transformation=>[{:x=>100, :y=>100, :width=>200, :crop=>:fill}, {:radius=>10}], :crop=>:crop, :width=>100}, "http://res.cloudinary.com/test123/image/upload/c_fill,w_200,x_100,y_100/r_10/c_crop,w_100/test", {:width=>100})
168
+ end
169
+
170
+ it "should support array of tranformations" do
171
+ result = Cloudinary::Utils.generate_transformation_string([{:x=>100, :y=>100, :width=>200, :crop=>:fill}, {:radius=>10}])
172
+ expect(result).to eq("c_fill,w_200,x_100,y_100/r_10")
173
+ end
174
+
175
+ it "should not include empty tranformations" do
176
+ test_cloudinary_url("test", {:transformation=>[{}, {:x=>100, :y=>100, :crop=>:fill}, {}]}, "http://res.cloudinary.com/test123/image/upload/c_fill,x_100,y_100/test", {})
177
+ end
178
+
179
+ it "should support size" do
180
+ test_cloudinary_url("test", {:size=>"10x10", :crop=>:crop}, "http://res.cloudinary.com/test123/image/upload/c_crop,h_10,w_10/test", {:width=>"10", :height=>"10"})
181
+ end
182
+
183
+ it "should use type from options" do
184
+ test_cloudinary_url("test", {:type=>:facebook}, "http://res.cloudinary.com/test123/image/facebook/test", {})
185
+ end
186
+
187
+ it "should use resource_type from options" do
188
+ test_cloudinary_url("test", {:resource_type=>:raw}, "http://res.cloudinary.com/test123/raw/upload/test", {})
189
+ end
190
+
191
+ it "should ignore http links only if type is not given or is asset" do
192
+ test_cloudinary_url("http://test", {:type=>nil}, "http://test", {})
193
+ test_cloudinary_url("http://test", {:type=>:asset}, "http://test", {})
194
+ test_cloudinary_url("http://test", {:type=>:fetch}, "http://res.cloudinary.com/test123/image/fetch/http://test" , {})
195
+ end
196
+
197
+ it "should use allow absolute links to /images" do
198
+ test_cloudinary_url("/images/test", {}, "http://res.cloudinary.com/test123/image/upload/test", {})
199
+ end
200
+
201
+ it "should use ignore absolute links not to /images" do
202
+ test_cloudinary_url("/js/test", {}, "/js/test", {})
203
+ end
204
+
205
+ it "should escape fetch urls" do
206
+ test_cloudinary_url("http://blah.com/hello?a=b", {:type=>:fetch}, "http://res.cloudinary.com/test123/image/fetch/http://blah.com/hello%3Fa%3Db", {})
207
+ end
208
+
209
+ it "should should escape http urls" do
210
+ test_cloudinary_url("http://www.youtube.com/watch?v=d9NF2edxy-M", {:type=>:youtube}, "http://res.cloudinary.com/test123/image/youtube/http://www.youtube.com/watch%3Fv%3Dd9NF2edxy-M", {})
211
+ end
212
+
213
+ it "should support background" do
214
+ test_cloudinary_url("test", {:background=>"red"}, "http://res.cloudinary.com/test123/image/upload/b_red/test", {})
215
+ test_cloudinary_url("test", {:background=>"#112233"}, "http://res.cloudinary.com/test123/image/upload/b_rgb:112233/test", {})
216
+ end
217
+
218
+ it "should support default_image" do
219
+ test_cloudinary_url("test", {:default_image=>"default"}, "http://res.cloudinary.com/test123/image/upload/d_default/test", {})
220
+ end
221
+
222
+ it "should support angle" do
223
+ test_cloudinary_url("test", {:angle=>"55"}, "http://res.cloudinary.com/test123/image/upload/a_55/test", {})
224
+ test_cloudinary_url("test", {:angle=>["auto", "55"]}, "http://res.cloudinary.com/test123/image/upload/a_auto.55/test", {})
225
+ end
226
+
227
+ it "should support format for fetch urls" do
228
+ test_cloudinary_url("http://cloudinary.com/images/logo.png", {:format=>"jpg", :type=>:fetch}, "http://res.cloudinary.com/test123/image/fetch/f_jpg/http://cloudinary.com/images/logo.png", {})
229
+ end
230
+
231
+ it "should support effect" do
232
+ test_cloudinary_url("test", {:effect=>"sepia"}, "http://res.cloudinary.com/test123/image/upload/e_sepia/test", {})
233
+ end
234
+
235
+ it "should support effect with hash param" do
236
+ test_cloudinary_url("test", {:effect=>{"sepia"=>10}}, "http://res.cloudinary.com/test123/image/upload/e_sepia:10/test", {})
237
+ end
238
+
239
+ it "should support effect with array param" do
240
+ test_cloudinary_url("test", {:effect=>["sepia", 10]}, "http://res.cloudinary.com/test123/image/upload/e_sepia:10/test", {})
241
+ end
242
+
243
+ {:overlay=>:l, :underlay=>:u}.each do |param, letter|
244
+ it "should support #{param}" do
245
+ test_cloudinary_url("test", {param=>"text:hello"}, "http://res.cloudinary.com/test123/image/upload/#{letter}_text:hello/test", {})
246
+ end
247
+
248
+ it "should not pass width/height to html for #{param}" do
249
+ test_cloudinary_url("test", {param=>"text:hello", :height=>100, :width=>100}, "http://res.cloudinary.com/test123/image/upload/h_100,#{letter}_text:hello,w_100/test", {})
250
+ end
251
+ end
252
+
253
+ it "should use ssl_detected if secure is not given as parameter and not set to true in configuration" do
254
+ test_cloudinary_url("test", {:ssl_detected=>true}, "https://res.cloudinary.com/test123/image/upload/test", {})
255
+ end
256
+
257
+ it "should use secure if given over ssl_detected and configuration" do
258
+ Cloudinary.config.secure = true
259
+ test_cloudinary_url("test", {:ssl_detected=>true, :secure=>false}, "http://res.cloudinary.com/test123/image/upload/test", {})
260
+ end
261
+
262
+ it "should use secure: true from configuration over ssl_detected" do
263
+ Cloudinary.config.secure = true
264
+ test_cloudinary_url("test", {:ssl_detected=>false}, "https://res.cloudinary.com/test123/image/upload/test", {})
265
+ end
266
+
267
+ it "should support extenal cname" do
268
+ test_cloudinary_url("test", {:cname=>"hello.com"}, "http://hello.com/test123/image/upload/test", {})
269
+ end
270
+
271
+ it "should support extenal cname with cdn_subdomain on" do
272
+ test_cloudinary_url("test", {:cname=>"hello.com", :cdn_subdomain=>true}, "http://a2.hello.com/test123/image/upload/test", {})
273
+ end
274
+
275
+ it "should support cdn_subdomain with secure on if using shared_domain" do
276
+ test_cloudinary_url("test", {:secure=>true, :cdn_subdomain=>true}, "https://res-2.cloudinary.com/test123/image/upload/test", {})
277
+ end
278
+
279
+ it "should support secure_cdn_subdomain false override with secure" do
280
+ test_cloudinary_url("test", {:secure=>true, :cdn_subdomain=>true, :secure_cdn_subdomain=>false}, "https://res.cloudinary.com/test123/image/upload/test", {})
281
+ end
282
+
283
+ it "should support secure_cdn_subdomain true override with secure" do
284
+ test_cloudinary_url("test", {:secure=>true, :cdn_subdomain=>true, :secure_cdn_subdomain=>true, :private_cdn=>true}, "https://test123-res-2.cloudinary.com/image/upload/test", {})
285
+ end
286
+
287
+ it "should support string param" do
288
+ test_cloudinary_url("test", {"effect"=>{"sepia"=>10}}, "http://res.cloudinary.com/test123/image/upload/e_sepia:10/test", {})
289
+ end
290
+
291
+ it "should support border" do
292
+ test_cloudinary_url("test", {"border"=>{:width=>5}}, "http://res.cloudinary.com/test123/image/upload/bo_5px_solid_black/test", {})
293
+ test_cloudinary_url("test", {"border"=>{:width=>5, :color=>"#ffaabbdd"}}, "http://res.cloudinary.com/test123/image/upload/bo_5px_solid_rgb:ffaabbdd/test", {})
294
+ test_cloudinary_url("test", {"border"=>"1px_solid_blue"}, "http://res.cloudinary.com/test123/image/upload/bo_1px_solid_blue/test", {})
295
+ test_cloudinary_url("test", {"border"=>"2"}, "http://res.cloudinary.com/test123/image/upload/test", {:border=>"2"})
296
+ end
297
+
298
+ it "should support flags" do
299
+ test_cloudinary_url("test", {"flags"=>"abc"}, "http://res.cloudinary.com/test123/image/upload/fl_abc/test", {})
300
+ test_cloudinary_url("test", {"flags"=>["abc", "def"]}, "http://res.cloudinary.com/test123/image/upload/fl_abc.def/test", {})
301
+ end
302
+
303
+ it "build_upload_params should not destroy options" do
304
+ options = {:width=>100, :crop=>:scale}
305
+ expect(Cloudinary::Uploader.build_upload_params(options)[:transformation]).to eq("c_scale,w_100")
306
+ expect(options.length).to eq(2)
307
+ end
308
+
309
+ it "build_upload_params canonize booleans" do
310
+ options = {:backup=>true, :use_filename=>false, :colors=>"true", :exif=>"false", :colors=>:true,
311
+ :image_metadata=>:false, :invalidate=>1, :eager_async=>"1"}
312
+ params = Cloudinary::Uploader.build_upload_params(options)
313
+ expect(Cloudinary::Api.only(params, *options.keys)).to eq(
314
+ :backup=>1, :use_filename=>0, :colors=>1, :exif=>0, :colors=>1,
315
+ :image_metadata=>0, :invalidate=>1, :eager_async=>1
316
+ )
317
+ expect(Cloudinary::Uploader.build_upload_params(:backup=>nil)[:backup]).to be_nil
318
+ expect(Cloudinary::Uploader.build_upload_params({})[:backup]).to be_nil
319
+ end
320
+
321
+ it "should add version if public_id contains /" do
322
+ test_cloudinary_url("folder/test", {}, "http://res.cloudinary.com/test123/image/upload/v1/folder/test", {})
323
+ test_cloudinary_url("folder/test", {:version=>123}, "http://res.cloudinary.com/test123/image/upload/v123/folder/test", {})
324
+ end
325
+
326
+ it "should not add version if public_id contains version already" do
327
+ test_cloudinary_url("v1234/test", {}, "http://res.cloudinary.com/test123/image/upload/v1234/test", {})
328
+ end
329
+
330
+ it "should allow to shorted image/upload urls" do
331
+ test_cloudinary_url("test", {:shorten=>true}, "http://res.cloudinary.com/test123/iu/test", {})
332
+ end
333
+
334
+ it "should allow to use folders in PreloadedFile" do
335
+ signature = Cloudinary::Utils.api_sign_request({:public_id=>"folder/file", :version=>"1234"}, Cloudinary.config.api_secret)
336
+ preloaded = Cloudinary::PreloadedFile.new("image/upload/v1234/folder/file.jpg#" + signature)
337
+ expect(preloaded).to be_valid
338
+ end
339
+
340
+ it "should escape public_ids" do
341
+ [
342
+ ["a b", "a%20b"],
343
+ ["a+b", "a%2Bb"],
344
+ ["a%20b", "a%20b"],
345
+ ["a-b", "a-b"],
346
+ ["a??b", "a%3F%3Fb"],
347
+ ["parentheses(interject)", "parentheses%28interject%29"]
348
+ ].each do
349
+ |source, target|
350
+ expect(Cloudinary::Utils.cloudinary_url(source)).to eq("http://res.cloudinary.com/test123/image/upload/#{target}")
351
+ end
352
+ end
353
+
354
+ it "should correctly sign URLs", :signed => true do
355
+ test_cloudinary_url("image.jpg", {:version => 1234, :transformation => {:crop => "crop", :width => 10, :height => 20}, :sign_url => true}, "http://res.cloudinary.com/test123/image/upload/s--Ai4Znfl3--/c_crop,h_20,w_10/v1234/image.jpg", {})
356
+ test_cloudinary_url("image.jpg", {:version => 1234, :sign_url => true}, "http://res.cloudinary.com/test123/image/upload/s----SjmNDA--/v1234/image.jpg", {})
357
+ test_cloudinary_url("image.jpg", {:transformation => {:crop => "crop", :width => 10, :height => 20}, :sign_url => true}, "http://res.cloudinary.com/test123/image/upload/s--Ai4Znfl3--/c_crop,h_20,w_10/image.jpg", {})
358
+ test_cloudinary_url("image.jpg", {:transformation => {:crop => "crop", :width => 10, :height => 20}, :type => :authenticated, :sign_url => true}, "http://res.cloudinary.com/test123/image/authenticated/s--Ai4Znfl3--/c_crop,h_20,w_10/image.jpg", {})
359
+ test_cloudinary_url("http://google.com/path/to/image.png", {:type => "fetch", :version => 1234, :sign_url => true}, "http://res.cloudinary.com/test123/image/fetch/s--hH_YcbiS--/v1234/http://google.com/path/to/image.png", {})
360
+ end
361
+
362
+ it "should correctly sign URLs in deprecated sign_version mode", :signed => true do
363
+ test_cloudinary_url("image.jpg", {:version => 1234, :transformation => {:crop => "crop", :width => 10, :height => 20}, :sign_url => true, :sign_version => true}, "http://res.cloudinary.com/test123/image/upload/s--MaRXzoEC--/c_crop,h_20,w_10/v1234/image.jpg", {})
364
+ test_cloudinary_url("image.jpg", {:version => 1234, :sign_url => true, :sign_version => true}, "http://res.cloudinary.com/test123/image/upload/s--ZlgFLQcO--/v1234/image.jpg", {})
365
+ test_cloudinary_url("image.jpg", {:transformation => {:crop => "crop", :width => 10, :height => 20}, :sign_url => true, :sign_version => true}, "http://res.cloudinary.com/test123/image/upload/s--Ai4Znfl3--/c_crop,h_20,w_10/image.jpg", {})
366
+ test_cloudinary_url("http://google.com/path/to/image.png", {:type => "fetch", :version => 1234, :sign_url => true, :sign_version => true}, "http://res.cloudinary.com/test123/image/fetch/s--_GAUclyB--/v1234/http://google.com/path/to/image.png", {})
367
+ end
368
+
369
+ it "should correctly sign_request" do
370
+ params = Cloudinary::Utils.sign_request({:public_id=>"folder/file", :version=>"1234"})
371
+ expect(params).to eq(:public_id=>"folder/file", :version=>"1234", :signature=>"7a3349cbb373e4812118d625047ede50b90e7b67", :api_key=>"1234")
372
+ end
373
+
374
+ it "should support responsive width" do
375
+ test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:crop, :responsive_width=>true}, "http://res.cloudinary.com/test123/image/upload/c_crop,h_100,w_100/c_limit,w_auto/test", {responsive: true})
376
+ Cloudinary.config.responsive_width_transformation = {:width => :auto, :crop => :pad}
377
+ test_cloudinary_url("test", {:width=>100, :height=>100, :crop=>:crop, :responsive_width=>true}, "http://res.cloudinary.com/test123/image/upload/c_crop,h_100,w_100/c_pad,w_auto/test", {responsive: true})
378
+ end
379
+
380
+ it "should correctly encode double arrays" do
381
+ expect(Cloudinary::Utils.encode_double_array([1,2,3,4])).to eq("1,2,3,4")
382
+ expect(Cloudinary::Utils.encode_double_array([[1,2,3,4],[5,6,7,8]])).to eq("1,2,3,4|5,6,7,8")
383
+ end
384
+ end
metadata CHANGED
@@ -1,67 +1,84 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: cloudinary
3
- version: !ruby/object:Gem::Version
4
- version: 1.0.81
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.82
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Nadav Soferman
8
8
  - Itai Lahan
9
9
  - Tal Lev-Ami
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
-
14
- date: 2015-01-08 00:00:00 Z
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
13
+ date: 2015-02-08 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
17
16
  name: rest-client
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
20
- requirements:
21
- - &id002
22
- - ">="
23
- - !ruby/object:Gem::Version
24
- version: "0"
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
25
22
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: aws_cf_signer
29
23
  prerelease: false
30
- requirement: &id003 !ruby/object:Gem::Requirement
31
- requirements:
32
- - *id002
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: aws_cf_signer
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
33
36
  type: :runtime
34
- version_requirements: *id003
35
- - !ruby/object:Gem::Dependency
36
- name: rspec
37
37
  prerelease: false
38
- requirement: &id004 !ruby/object:Gem::Requirement
39
- requirements:
40
- - *id002
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: rspec
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
41
50
  type: :development
42
- version_requirements: *id004
43
- - !ruby/object:Gem::Dependency
44
- name: actionpack
45
51
  prerelease: false
46
- requirement: &id005 !ruby/object:Gem::Requirement
47
- requirements:
48
- - *id002
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: actionpack
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
49
64
  type: :development
50
- version_requirements: *id005
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
51
71
  description: Client library for easily using the Cloudinary service
52
- email:
72
+ email:
53
73
  - nadav.soferman@cloudinary.com
54
74
  - itai.lahan@cloudinary.com
55
75
  - tal.levami@cloudinary.com
56
76
  executables: []
57
-
58
77
  extensions: []
59
-
60
78
  extra_rdoc_files: []
61
-
62
- files:
63
- - .gitignore
64
- - .rspec
79
+ files:
80
+ - ".gitignore"
81
+ - ".rspec"
65
82
  - CHANGELOG
66
83
  - Gemfile
67
84
  - README.md
@@ -111,29 +128,30 @@ files:
111
128
  - vendor/assets/javascripts/cloudinary/load-image.min.js
112
129
  - vendor/assets/javascripts/cloudinary/processing.js
113
130
  homepage: http://cloudinary.com
114
- licenses:
131
+ licenses:
115
132
  - MIT
116
133
  metadata: {}
117
-
118
134
  post_install_message:
119
135
  rdoc_options: []
120
-
121
- require_paths:
136
+ require_paths:
122
137
  - lib
123
- required_ruby_version: !ruby/object:Gem::Requirement
124
- requirements:
125
- - *id002
126
- required_rubygems_version: !ruby/object:Gem::Requirement
127
- requirements:
128
- - *id002
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
129
148
  requirements: []
130
-
131
149
  rubyforge_project: cloudinary
132
- rubygems_version: 2.4.2
150
+ rubygems_version: 2.4.5
133
151
  signing_key:
134
152
  specification_version: 4
135
153
  summary: Client library for easily using the Cloudinary service
136
- test_files:
154
+ test_files:
137
155
  - spec/api_spec.rb
138
156
  - spec/cloudinary_helper_spec.rb
139
157
  - spec/docx.docx