class Shutterbug::Storage::S3Storage

Constants

PUT_URL_EXP_TIME

Attributes

filename[R]
url[R]

Public Class Methods

connect!() click to toggle source
# File lib/shutterbug/storage/s3_storage.rb, line 12
def self.connect!
  Fog::Storage.new({
    :provider              => 'AWS',
    :aws_access_key_id     => Configuration.instance.s3_key,
    :aws_secret_access_key => Configuration.instance.s3_secret
  })
end
connection() click to toggle source
# File lib/shutterbug/storage/s3_storage.rb, line 20
def self.connection
  @connection ||= self.connect!
end
create_bin() click to toggle source
# File lib/shutterbug/storage/s3_storage.rb, line 24
def self.create_bin
  self.connection.directories.create(
    :key    => Configuration.instance.s3_bin,
    :public => true)
end
fs_path_exists?(filename) click to toggle source
# File lib/shutterbug/storage/s3_storage.rb, line 48
def self.fs_path_exists?(filename)
  File.exists?(filename)
end
get_url(filename) click to toggle source
# File lib/shutterbug/storage/s3_storage.rb, line 52
def self.get_url(filename)
  # Manual URL construction, no proper method implemented in FOG.
  # But should be available soon, see: https://github.com/fog/fog/issues/3263
  "https://#{Configuration.instance.s3_bin}.s3.amazonaws.com/#{filename}"
end
lookup_bin() click to toggle source
# File lib/shutterbug/storage/s3_storage.rb, line 30
def self.lookup_bin
  self.connection.directories.get(Configuration.instance.s3_bin) || self.create_bin
end
new(filename) click to toggle source
# File lib/shutterbug/storage/s3_storage.rb, line 74
def initialize(filename)
  @filename = filename
  begin
    @stream_file = S3Storage.write(filename)
    @url = @stream_file.public_url
  ensure
    unlink(filename)
  end
end
put_url(filename) click to toggle source
# File lib/shutterbug/storage/s3_storage.rb, line 58
def self.put_url(filename)
  expiry = (Time.now + PUT_URL_EXP_TIME).to_i
  headers = {}
  query = {
    'x-amz-acl' => 'public-read'
  }
  options = { path_style: true, query: query }
  self.connection.put_object_url(Configuration.instance.s3_bin, filename, expiry, headers, options)
end
s3_bin() click to toggle source
# File lib/shutterbug/storage/s3_storage.rb, line 34
def self.s3_bin
  @s3_bin ||= self.lookup_bin
end
write(filename) click to toggle source
# File lib/shutterbug/storage/s3_storage.rb, line 38
def self.write(filename)
  full_path = Configuration.instance.fs_path_for(filename)
  if self.fs_path_exists? full_path
    self.s3_bin.files.create(
      :key    => filename,
      :body   => File.open(full_path),
      :public => true)
  end
end

Public Instance Methods