cloudinary 1.0.35 → 1.0.36

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,13 +6,12 @@ require 'cloudinary/carrier_wave/preloaded'
6
6
  require 'cloudinary/carrier_wave/storage'
7
7
 
8
8
  module Cloudinary::CarrierWave
9
-
9
+
10
10
  def self.included(base)
11
11
  base.storage Cloudinary::CarrierWave::Storage
12
12
  base.extend ClassMethods
13
- base.send(:attr_accessor, :metadata)
13
+ base.class_attribute :storage_type, :metadata
14
14
  base.send(:attr_reader, :stored_version)
15
-
16
15
  override_in_versions(base, :blank?, :full_public_id, :all_versions_processors)
17
16
  end
18
17
 
@@ -31,7 +30,7 @@ module Cloudinary::CarrierWave
31
30
  self.original_filename = sanitize(@file.filename)
32
31
  end
33
32
  end
34
-
33
+
35
34
  def url(*args)
36
35
  if args.first && !args.first.is_a?(Hash)
37
36
  super
@@ -46,7 +45,13 @@ module Cloudinary::CarrierWave
46
45
  end
47
46
  options = args.extract_options!
48
47
  options = self.transformation.merge(options) if self.version_name.present?
49
- Cloudinary::Utils.cloudinary_url(public_id, {:format=>self.format}.merge(options))
48
+
49
+ resource_type = Cloudinary::Utils.resource_type_for_format(self.format)
50
+ if self.class.storage_type == :authenticated
51
+ Cloudinary::Utils.signed_download_url(public_id, {:format=>self.format, :resource_type=>resource_type}.merge(options))
52
+ else
53
+ Cloudinary::Utils.cloudinary_url(public_id, {:format=>self.format, :resource_type=>resource_type, :type=>self.class.storage_type}.merge(options))
54
+ end
50
55
  end
51
56
  end
52
57
 
@@ -104,7 +109,7 @@ module Cloudinary::CarrierWave
104
109
  end
105
110
 
106
111
  class CloudinaryFile
107
- attr_reader :identifier, :public_id, :filename, :format, :version
112
+ attr_reader :identifier, :public_id, :filename, :format, :version, :storage_type
108
113
  def initialize(identifier, uploader)
109
114
  @uploader = uploader
110
115
  @identifier = identifier
@@ -115,12 +120,17 @@ module Cloudinary::CarrierWave
115
120
  @filename = @identifier
116
121
  @version = nil
117
122
  end
123
+ @storage_type = uploader.class.storage_type
118
124
  @public_id, @format = Cloudinary::CarrierWave.split_format(@filename)
119
125
  end
120
126
 
121
127
  def delete
122
128
  Cloudinary::Uploader.destroy(self.public_id) if @uploader.delete_remote?
123
129
  end
130
+
131
+ def exists?
132
+ Cloudinary::Uploader.exists?(self.identifier, :type=>self.storage_type)
133
+ end
124
134
  end
125
135
 
126
136
  def self.split_format(identifier)
@@ -1,8 +1,7 @@
1
1
  module Cloudinary::CarrierWave
2
2
  module ClassMethods
3
3
  def make_private
4
- process :cloudinary_transformation=>{:type => :private}
5
- process_all_versions :cloudinary_transformation=>{:type => :private}
4
+ self.storage_type = :private
6
5
  end
7
6
 
8
7
  def process_all_versions(*args)
@@ -1,4 +1,5 @@
1
1
  class Cloudinary::CarrierWave::Storage < ::CarrierWave::Storage::Abstract
2
+
2
3
  def store!(file)
3
4
  return if !uploader.enable_processing
4
5
  if uploader.is_main_uploader?
@@ -23,7 +24,9 @@ class Cloudinary::CarrierWave::Storage < ::CarrierWave::Storage::Abstract
23
24
  params[:tags] = uploader.tags if uploader.tags
24
25
  eager_versions = uploader.versions.values.select(&:eager)
25
26
  params[:eager] = eager_versions.map{|version| [version.transformation, version.format]} if eager_versions.length > 0
26
-
27
+ params[:type]=uploader.class.storage_type
28
+ params[:resource_type] ||= :auto
29
+
27
30
  uploader.metadata = Cloudinary::Uploader.upload(data, params)
28
31
  if uploader.metadata["error"]
29
32
  raise Cloudinary::CarrierWave::UploadError.new(uploader.metadata["error"]["message"], uploader.metadata["error"]["http_code"])
@@ -51,6 +51,15 @@ class Cloudinary::Uploader
51
51
  end
52
52
  end
53
53
 
54
+ def self.exists?(public_id, options={})
55
+ if options[:type] == :authenticated
56
+ cloudinary_url = Cloudinary::Utils.signed_download_url(public_id, options)
57
+ else
58
+ cloudinary_url = Cloudinary::Utils.cloudinary_url(public_id, options)
59
+ end
60
+ RestClient::Request.execute(:method => :head, :url => cloudinary_url, :timeout=>5).code.to_s =~ /2\d{2}/
61
+ end
62
+
54
63
  def self.explicit(public_id, options={})
55
64
  call_api("explicit", options) do
56
65
  {
@@ -112,6 +112,7 @@ class Cloudinary::Utils
112
112
  return original_source # requested asset, but no metadata - probably local file. return.
113
113
  end
114
114
  end
115
+
115
116
  type ||= :upload
116
117
 
117
118
  if source.match(%r(^https?:/)i)
@@ -177,7 +178,7 @@ class Cloudinary::Utils
177
178
  authenticated_distribution = options[:authenticated_distribution] || Cloudinary.config.authenticated_distribution || raise("Must supply authenticated_distribution")
178
179
  @signers ||= Hash.new{|h,k| path, id = k; h[k] = AwsCfSigner.new(path, id)}
179
180
  signer = @signers[[aws_private_key_path, aws_key_pair_id]]
180
- url = Cloudinary::Utils.cloudinary_url(public_id, options.merge(:secure=>true, :secure_distribution=>authenticated_distribution, :private_cdn=>true))
181
+ url = Cloudinary::Utils.cloudinary_url(public_id, {:type=>:authenticated}.merge(options).merge(:secure=>true, :secure_distribution=>authenticated_distribution, :private_cdn=>true))
181
182
  expires_at = options[:expires_at] || (Time.now+3600)
182
183
  signer.sign(url, :ending => expires_at)
183
184
  end
@@ -198,7 +199,8 @@ class Cloudinary::Utils
198
199
  end
199
200
 
200
201
  def self.random_public_id
201
- (defined?(ActiveSupport::SecureRandom) ? ActiveSupport::SecureRandom : SecureRandom).base64(16).downcase.gsub(/[^a-z0-9]/, "")
202
+ sr = defined?(ActiveSupport::SecureRandom) ? ActiveSupport::SecureRandom : SecureRandom
203
+ sr.base64(20).downcase.gsub(/[^a-z0-9]/, "").sub(/^[0-9]+/, '')[0,20]
202
204
  end
203
205
 
204
206
  def self.signed_preloaded_image(result)
@@ -229,4 +231,14 @@ class Cloudinary::Utils
229
231
  else [array]
230
232
  end
231
233
  end
234
+
235
+ IMAGE_FORMATS = %w(bmp png tif tiff jpg jpeg gif pdf ico)
236
+
237
+ def self.supported_image_format?(format)
238
+ IMAGE_FORMATS.include?(format.to_s.downcase)
239
+ end
240
+
241
+ def self.resource_type_for_format(format)
242
+ self.supported_image_format?(format) ? 'image' : 'raw'
243
+ end
232
244
  end
@@ -1,4 +1,4 @@
1
1
  # Copyright Cloudinary
2
2
  module Cloudinary
3
- VERSION = "1.0.35"
3
+ VERSION = "1.0.36"
4
4
  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.35
4
+ version: 1.0.36
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: 2012-08-27 00:00:00.000000000 Z
14
+ date: 2012-09-09 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rest-client