class Shrine::Storage::Fog
Attributes
connection[R]
directory[R]
prefix[R]
Public Class Methods
new(directory:, prefix: nil, connection: nil, upload_options: {}, **options)
click to toggle source
# File lib/shrine/storage/fog.rb, line 10 def initialize(directory:, prefix: nil, connection: nil, upload_options: {}, **options) @connection = connection || ::Fog::Storage.new(options) @directory = @connection.directories.new(key: directory) @prefix = prefix @upload_options = upload_options end
Public Instance Methods
clear!()
click to toggle source
# File lib/shrine/storage/fog.rb, line 51 def clear! list.each(&:destroy) end
delete(id)
click to toggle source
# File lib/shrine/storage/fog.rb, line 35 def delete(id) file(id).destroy end
exists?(id)
click to toggle source
# File lib/shrine/storage/fog.rb, line 31 def exists?(id) !!head(id) end
open(id, **options)
click to toggle source
# File lib/shrine/storage/fog.rb, line 25 def open(id, **options) Down::Http.open(url(id), **options) rescue Down::NotFound raise Shrine::FileNotFound, "file #{id.inspect} not found on storage" end
upload(io, id, **upload_options)
click to toggle source
# File lib/shrine/storage/fog.rb, line 17 def upload(io, id, **upload_options) if copyable?(io) copy(io, id, **upload_options) else put(io, id, **upload_options) end end
url(id, public: false, expires: 3600, **options)
click to toggle source
# File lib/shrine/storage/fog.rb, line 39 def url(id, public: false, expires: 3600, **options) signed_url = file(id).url(Time.now.utc + expires, *[**options]) if public uri = URI.parse(signed_url) uri.query = nil uri.to_s else signed_url end end
Protected Instance Methods
file(id)
click to toggle source
# File lib/shrine/storage/fog.rb, line 57 def file(id) directory.files.new(key: path(id)) end
get(id, &block)
click to toggle source
# File lib/shrine/storage/fog.rb, line 61 def get(id, &block) directory.files.get(path(id), &block) end
head(id)
click to toggle source
# File lib/shrine/storage/fog.rb, line 65 def head(id) directory.files.head(path(id)) end
provider()
click to toggle source
# File lib/shrine/storage/fog.rb, line 69 def provider connection.class end
Private Instance Methods
copy(io, id, **upload_options)
click to toggle source
# File lib/shrine/storage/fog.rb, line 91 def copy(io, id, **upload_options) io.storage.head(io.id).copy(directory.key, path(id)) end
copyable?(io)
click to toggle source
# File lib/shrine/storage/fog.rb, line 95 def copyable?(io) io.respond_to?(:storage) && io.storage.is_a?(Storage::Fog) && io.storage.provider == provider end
list()
click to toggle source
# File lib/shrine/storage/fog.rb, line 75 def list directory.files.select { |file| file.key.start_with?(prefix.to_s) } end
path(id)
click to toggle source
# File lib/shrine/storage/fog.rb, line 79 def path(id) [*prefix, id].join("/") end
put(io, id, shrine_metadata: {}, **upload_options)
click to toggle source
# File lib/shrine/storage/fog.rb, line 83 def put(io, id, shrine_metadata: {}, **upload_options) options = { content_type: shrine_metadata["mime_type"] } options.update(@upload_options) options.update(upload_options) directory.files.create(key: path(id), body: io, **options) end