cloudinary 1.0.48 → 1.0.49

Sign up to get free protection for your applications and to get access to all the features.
@@ -79,6 +79,19 @@ module Cloudinary::CarrierWave
79
79
  @public_id ||= self.public_id
80
80
  @public_id ||= @stored_public_id
81
81
  @public_id ||= Cloudinary::Utils.random_public_id
82
+ end
83
+
84
+ def rename(to_public_id)
85
+ raise "rename cannot be used if the public_id method is overridden" if self.public_id
86
+ resource_type = Cloudinary::Utils.resource_type_for_format(self.filename || self.format)
87
+ from_public_id = self.my_public_id
88
+ @public_id = @stored_public_id = to_public_id
89
+ if resource_type == 'raw'
90
+ from_public_id = [from_public_id, self.format].join(".")
91
+ to_public_id = [to_public_id, self.format].join(".")
92
+ end
93
+ Cloudinary::Uploader.rename(from_public_id, to_public_id, :type=>self.storage_type, :resource_type=>resource_type)
94
+ storage.store_cloudinary_version(@stored_version)
82
95
  end
83
96
 
84
97
  def recreate_versions!
@@ -21,18 +21,18 @@ class Cloudinary::Uploader
21
21
  :callback=> options[:callback],
22
22
  :format=>options[:format],
23
23
  :type=>options[:type],
24
- :backup=>options[:backup],
25
- :faces=>options[:faces],
26
- :exif=>options[:exif],
27
- :colors=>options[:colors],
28
- :image_metadata=>options[:image_metadata],
29
- :invalidate=>options[:invalidate],
24
+ :backup=>Cloudinary::Utils.as_safe_bool(options[:backup]),
25
+ :faces=>Cloudinary::Utils.as_safe_bool(options[:faces]),
26
+ :exif=>Cloudinary::Utils.as_safe_bool(options[:exif]),
27
+ :colors=>Cloudinary::Utils.as_safe_bool(options[:colors]),
28
+ :image_metadata=>Cloudinary::Utils.as_safe_bool(options[:image_metadata]),
29
+ :invalidate=>Cloudinary::Utils.as_safe_bool(options[:invalidate]),
30
30
  :eager=>build_eager(options[:eager]),
31
31
  :headers=>build_custom_headers(options[:headers]),
32
- :use_filename=>options[:use_filename],
32
+ :use_filename=>Cloudinary::Utils.as_safe_bool(options[:use_filename]),
33
33
  :notification_url=>options[:notification_url],
34
34
  :eager_notification_url=>options[:eager_notification_url],
35
- :eager_async=>options[:eager_async],
35
+ :eager_async=>Cloudinary::Utils.as_safe_bool(options[:eager_async]),
36
36
  :tags=>options[:tags] && Cloudinary::Utils.build_array(options[:tags]).join(",")}
37
37
  params
38
38
  end
@@ -60,6 +60,17 @@ class Cloudinary::Uploader
60
60
  end
61
61
  end
62
62
 
63
+ def self.rename(from_public_id, to_public_id, options={})
64
+ call_api("rename", options) do
65
+ {
66
+ :timestamp=>Time.now.to_i,
67
+ :type=>options[:type],
68
+ :from_public_id=>from_public_id,
69
+ :to_public_id=>to_public_id,
70
+ }
71
+ end
72
+ end
73
+
63
74
  def self.exists?(public_id, options={})
64
75
  cloudinary_url = Cloudinary::Utils.cloudinary_url(public_id, options)
65
76
  begin
@@ -272,4 +272,25 @@ class Cloudinary::Utils
272
272
  return options.delete(option_name) if options.include?(option_name)
273
273
  return Cloudinary.config.send(option_name) || default_value
274
274
  end
275
+
276
+ def self.as_bool(value)
277
+ case value
278
+ when nil then nil
279
+ when String then value.downcase == "true" || value == "1"
280
+ when TrueClass then true
281
+ when FalseClass then false
282
+ when Fixnum then value != 0
283
+ when Symbol then value == :true
284
+ else
285
+ raise "Invalid boolean value #{value} of type #{value.class}"
286
+ end
287
+ end
288
+
289
+ def self.as_safe_bool(value)
290
+ case as_bool(value)
291
+ when nil then nil
292
+ when TrueClass then 1
293
+ when FalseClass then 0
294
+ end
295
+ end
275
296
  end
@@ -1,4 +1,4 @@
1
1
  # Copyright Cloudinary
2
2
  module Cloudinary
3
- VERSION = "1.0.48"
3
+ VERSION = "1.0.49"
4
4
  end
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+ require 'cloudinary'
3
+
4
+ describe Cloudinary::Uploader do
5
+ break puts("Please setup environment for api test to run") if Cloudinary.config.api_secret.blank?
6
+
7
+ it "should successfully upload file " do
8
+ result = Cloudinary::Uploader.upload("spec/logo.png")
9
+ result["width"].should == 241
10
+ result["height"].should == 51
11
+ expected_signature = Cloudinary::Utils.api_sign_request({:public_id=>result["public_id"], :version=>result["version"]}, Cloudinary.config.api_secret)
12
+ result["signature"].should == expected_signature
13
+ end
14
+
15
+ it "should successfully upload file by url " do
16
+ result = Cloudinary::Uploader.upload("http://cloudinary.com/images/logo.png")
17
+ result["width"].should == 241
18
+ result["height"].should == 51
19
+ expected_signature = Cloudinary::Utils.api_sign_request({:public_id=>result["public_id"], :version=>result["version"]}, Cloudinary.config.api_secret)
20
+ result["signature"].should == expected_signature
21
+ end
22
+
23
+ it "should successfully upload file by unicode url " do
24
+ result = Cloudinary::Uploader.upload("http://cloudinary.com/images/logo.png")
25
+ result["width"].should == 241
26
+ result["height"].should == 51
27
+ expected_signature = Cloudinary::Utils.api_sign_request({:public_id=>result["public_id"], :version=>result["version"]}, Cloudinary.config.api_secret)
28
+ result["signature"].should == expected_signature
29
+ end
30
+
31
+ it "should support explicit " do
32
+ result = Cloudinary::Uploader.explicit("cloudinary", :type=>"twitter_name", :eager=>[{:crop=>"scale", :width=>"2.0"}])
33
+ url = Cloudinary::Utils.cloudinary_url("cloudinary", :type=>"twitter_name", :crop=>"scale", :width=>"2.0", :format=>"png", :version=>result["version"])
34
+ result["eager"][0]["url"].should == url
35
+ end
36
+
37
+ it "should support eager " do
38
+ Cloudinary::Uploader.upload("spec/logo.png", :eager=>[{:crop=>"scale", :width=>"2.0"}])
39
+ end
40
+
41
+ it "should support headers " do
42
+ Cloudinary::Uploader.upload("spec/logo.png", :headers=>["Link: 1"])
43
+ Cloudinary::Uploader.upload("spec/logo.png", :headers=>{"Link" => "1"})
44
+ end
45
+
46
+ it "should successfully generate text image " do
47
+ result = Cloudinary::Uploader.text("hello world")
48
+ result["width"].should > 1
49
+ result["height"].should > 1
50
+ end
51
+
52
+ it "should successfully upload file " do
53
+ result = Cloudinary::Uploader.upload("spec/logo.png")
54
+ Cloudinary::Uploader.add_tag("tag1", result["public_id"])
55
+ Cloudinary::Uploader.add_tag("tag2", result["public_id"])
56
+ Cloudinary::Api.resource(result["public_id"])["tags"].should == ["tag1", "tag2"]
57
+ Cloudinary::Uploader.remove_tag("tag1", result["public_id"])
58
+ Cloudinary::Api.resource(result["public_id"])["tags"].should == ["tag2"]
59
+ Cloudinary::Uploader.replace_tag("tag3", result["public_id"])
60
+ Cloudinary::Api.resource(result["public_id"])["tags"].should == ["tag3"]
61
+ end
62
+ end
data/spec/utils_spec.rb CHANGED
@@ -378,4 +378,16 @@ describe Cloudinary::Utils do
378
378
  Cloudinary::Uploader.build_upload_params(options)[:transformation].should == "c_scale,w_100"
379
379
  options.length.should == 2
380
380
  end
381
+
382
+ it "build_upload_params canonize booleans" do
383
+ options = {:backup=>true, :use_filename=>false, :colors=>"true", :exif=>"false", :colors=>:true,
384
+ :image_metadata=>:false, :invalidate=>1, :eager_async=>"1"}
385
+ params = Cloudinary::Uploader.build_upload_params(options)
386
+ Cloudinary::Api.only(params, *options.keys).should == {
387
+ :backup=>1, :use_filename=>0, :colors=>1, :exif=>0, :colors=>1,
388
+ :image_metadata=>0, :invalidate=>1, :eager_async=>1
389
+ }
390
+ Cloudinary::Uploader.build_upload_params(:backup=>nil)[:backup].should be_nil
391
+ Cloudinary::Uploader.build_upload_params({})[:backup].should be_nil
392
+ end
381
393
  end
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.0.48
4
+ version: 1.0.49
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-03-20 00:00:00.000000000 Z
14
+ date: 2013-03-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rest-client
@@ -102,6 +102,7 @@ files:
102
102
  - spec/api_spec.rb
103
103
  - spec/logo.png
104
104
  - spec/spec_helper.rb
105
+ - spec/uploader_spec.rb
105
106
  - spec/utils_spec.rb
106
107
  - vendor/assets/javascripts/cloudinary/canvas-to-blob.min.js
107
108
  - vendor/assets/javascripts/cloudinary/index.js
@@ -142,4 +143,5 @@ test_files:
142
143
  - spec/api_spec.rb
143
144
  - spec/logo.png
144
145
  - spec/spec_helper.rb
146
+ - spec/uploader_spec.rb
145
147
  - spec/utils_spec.rb