Module: Paperclip::Storage::Cloudinary

Defined in:
lib/paperclip/storage/cloudinary.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object

You can download your configuration directly from Cloudinary to start using this gem immediately:

cloudinary.com/console/cloudinary.yml



9
10
11
12
13
14
15
16
# File 'lib/paperclip/storage/cloudinary.rb', line 9

def self.extended base
  begin
    require 'cloudinary'
  rescue LoadError => e
    e.message << ' (You may need to install the cloudinary gem)'
    raise e
  end
end

Instance Method Details

#api_keyObject



97
98
99
# File 'lib/paperclip/storage/cloudinary.rb', line 97

def api_key
  cloudinary_credentials[:api_key]
end

#api_secretObject



101
102
103
# File 'lib/paperclip/storage/cloudinary.rb', line 101

def api_secret
  cloudinary_credentials[:api_secret]
end

#cloud_nameObject



93
94
95
# File 'lib/paperclip/storage/cloudinary.rb', line 93

def cloud_name
  cloudinary_credentials[:cloud_name]
end

#cloudinary_credentialsObject



105
106
107
108
# File 'lib/paperclip/storage/cloudinary.rb', line 105

def cloudinary_credentials
  @cloudinary_credentials ||= parse_credentials(@options[:cloudinary_credentials] || find_default_config_path)
  @cloudinary_credentials
end

#copy_to_local_file(style, local_dest_path) ⇒ Object



59
60
61
62
63
# File 'lib/paperclip/storage/cloudinary.rb', line 59

def copy_to_local_file style, local_dest_path
  File.open(local_dest_path, 'wb') do |file|
    file.write ::Cloudinary::Downloader.download(url(style))
  end
end

#exists?(style = default_style) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/paperclip/storage/cloudinary.rb', line 65

def exists? style = default_style
  ::Cloudinary::Uploader.exists? public_id(style), cloudinary_url_options(style)
end

#flush_deletesObject



47
48
49
50
51
52
53
54
55
56
57
# File 'lib/paperclip/storage/cloudinary.rb', line 47

def flush_deletes
  @queued_for_delete.each do |path|
    defaults = {
      resource_type: resource_type,
      invalidate: true
    }
    ::Cloudinary::Uploader.destroy public_id_for_path(path), defaults
  end

  @queued_for_delete.clear
end

#flush_writesObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/paperclip/storage/cloudinary.rb', line 18

def flush_writes
  @queued_for_write.each do |style_name, file|
    defaults = {
      public_id: public_id(style_name),
      resource_type: resource_type,
      use_filename: true,
      unique_filename: false,
      overwrite: true,
      invalidate: true
    }
    upload_opts  = @options[:cloudinary_upload_options] || {}
    default_opts = upload_opts[:default] || {}
    style_opts   = upload_opts[:styles].try(:[], style_name) || {}

    options = {}
    [default_opts, style_opts].each do |opts|
      options.deep_merge!(opts) do |key, existing_value, new_value|
        new_value.try(:call, style_name, self) || new_value
      end
    end
    options.merge! defaults
    ::Cloudinary::Uploader.upload file, options
  end

  after_flush_writes

  @queued_for_write.clear
end

#parse_credentials(creds) ⇒ Object



110
111
112
113
114
115
# File 'lib/paperclip/storage/cloudinary.rb', line 110

def parse_credentials creds
  creds = creds.respond_to?('call') ? creds.call(self) : creds
  creds = find_credentials(creds).stringify_keys
  env = Object.const_defined?(:Rails) ? Rails.env : nil
  (creds[env] || creds).symbolize_keys
end

#public_id(style) ⇒ Object



80
81
82
# File 'lib/paperclip/storage/cloudinary.rb', line 80

def public_id style
  public_id_for_path(path style)
end

#public_id_for_path(s) ⇒ Object



84
85
86
# File 'lib/paperclip/storage/cloudinary.rb', line 84

def public_id_for_path s
  s[0..-(File.extname(s).length + 1)]
end

#resource_typeObject



88
89
90
91
# File 'lib/paperclip/storage/cloudinary.rb', line 88

def resource_type
  type = @options[:cloudinary_resource_type] || 'image'
  %w{image raw video audio}.include?(type.to_s) ? type.to_s : 'image'
end

#url(style_or_options = default_style, options = {}) ⇒ Object



69
70
71
72
73
74
75
76
77
78
# File 'lib/paperclip/storage/cloudinary.rb', line 69

def url style_or_options = default_style, options = {}
  if style_or_options.is_a?(Hash)
    options.merge! style_or_options
    style = default_style
  else
    style = style_or_options
  end
  inline_opts = options[:cloudinary] || {}
  ::Cloudinary::Utils.cloudinary_url path(style), cloudinary_url_options(style, inline_opts)
end