class Shrine::Storage::Uploadcare
Constants
- Error
Attributes
api[R]
Public Class Methods
new(**options)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 14 def initialize(**options) @api = ::Uploadcare::Api.new(**options) end
Public Instance Methods
clear!()
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 70 def clear! api.file_list(limit: 1000).each_slice(100) do |file_batch| api.delete_files(file_batch) end end
delete(id)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 42 def delete(id) file = api.file(id) file.delete end
exists?(id)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 34 def exists?(id) file = api.file(id) file.load_data !!file.datetime_stored rescue ::Uploadcare::Error::RequestError::NotFound false end
open(id, **options)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 28 def open(id, **options) Down::Http.open(url(id), **options) rescue Down::NotFound raise Shrine::FileNotFound, "file #{id.inspect} not found on storage" end
presign(id = nil, **options)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 53 def presign(id = nil, **options) expire = Time.now.to_i + (options[:expires_in] || 60*60) secret_key = api.options[:private_key] signature = Digest::MD5.hexdigest(secret_key + expire.to_s) fields = { UPLOADCARE_PUB_KEY: api.options[:public_key], signature: signature, expire: expire, } url = URI.join(api.options[:upload_url_base], "base/").to_s { method: :post, url: url, fields: fields } end
upload(io, id, shrine_metadata: {}, **upload_options)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 18 def upload(io, id, shrine_metadata: {}, **upload_options) file = _upload(io, id, shrine_metadata: shrine_metadata, **upload_options) file.load_data update_metadata!(shrine_metadata, file) update_id!(id, file) file end
url(id, **options)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 47 def url(id, **options) file = api.file(id) file.operations = options.map { |operation| operation.flatten.join("/") } file.cdn_url(true) end
Private Instance Methods
_upload(io, id, shrine_metadata: {}, **upload_options)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 78 def _upload(io, id, shrine_metadata: {}, **upload_options) options = { store: true } options.merge!(upload_options) if remote_file?(io) api.upload_from_url(io.url, options) else Shrine.with_file(io) do |file| api.upload(file, options) end end end
remote_file?(io)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 100 def remote_file?(io) io.is_a?(UploadedFile) && io.url.to_s =~ /^ftp:|^https?:/ end
update_id!(id, file)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 96 def update_id!(id, file) id.replace(file.uuid) end
update_metadata!(metadata, file)
click to toggle source
# File lib/shrine/storage/uploadcare.rb, line 91 def update_metadata!(metadata, file) metadata.merge!(file.image_info.to_h) metadata.merge!("mime_type" => file.mime_type, "size" => file.size) end