Parent

Files

Class/Module Index [+]

Quicksearch

Dragonfly::DataStorage::S3DataStore

Constants

REGIONS

Public Class Methods

new(opts={}) click to toggle source
# File lib/dragonfly/data_storage/s3data_store.rb, line 31
def initialize(opts={})
  self.bucket_name = opts[:bucket_name]
  self.access_key_id = opts[:access_key_id]
  self.secret_access_key = opts[:secret_access_key]
  self.region = opts[:region]
end

Public Instance Methods

bucket_exists?() click to toggle source
# File lib/dragonfly/data_storage/s3data_store.rb, line 110
def bucket_exists?
  rescuing_socket_errors{ storage.get_bucket(bucket_name) }
  true
rescue Excon::Errors::NotFound => e
  false
end
destroy(uid) click to toggle source
# File lib/dragonfly/data_storage/s3data_store.rb, line 71
def destroy(uid)
  rescuing_socket_errors{ storage.delete_object(bucket_name, uid) }
rescue Excon::Errors::NotFound => e
  raise DataNotFound, "#{e} - #{uid}"
rescue Excon::Errors::Conflict => e
  raise DestroyError, "#{e} - #{uid}"
end
domain() click to toggle source
# File lib/dragonfly/data_storage/s3data_store.rb, line 93
def domain
  REGIONS[get_region]
end
retrieve(uid) click to toggle source
# File lib/dragonfly/data_storage/s3data_store.rb, line 60
def retrieve(uid)
  ensure_configured
  response = rescuing_socket_errors{ storage.get_object(bucket_name, uid) }
  [
    response.body,
    parse_s3_metadata(response.headers)
  ]
rescue Excon::Errors::NotFound => e
  raise DataNotFound, "#{e} - #{uid}"
end
storage() click to toggle source
# File lib/dragonfly/data_storage/s3data_store.rb, line 97
def storage
  @storage ||= begin
    storage = Fog::Storage.new(
      :provider => 'AWS',
      :aws_access_key_id => access_key_id,
      :aws_secret_access_key => secret_access_key,
      :region => region
    )
    storage.sync_clock
    storage
  end
end
store(temp_object, opts={}) click to toggle source
# File lib/dragonfly/data_storage/s3data_store.rb, line 38
def store(temp_object, opts={})
  ensure_configured
  ensure_bucket_initialized
  
  headers = opts[:headers] || {}
  mime_type = opts[:mime_type] || opts[:content_type]
  headers['Content-Type'] = mime_type if mime_type
  uid = opts[:path] || generate_uid(temp_object.name || 'file')
  
  rescuing_socket_errors do
    if use_filesystem
      temp_object.file do |f|
        storage.put_object(bucket_name, uid, f, full_storage_headers(headers, temp_object.meta))
      end
    else
      storage.put_object(bucket_name, uid, temp_object.data, full_storage_headers(headers, temp_object.meta))
    end
  end
  
  uid
end
url_for(uid, opts={}) click to toggle source
# File lib/dragonfly/data_storage/s3data_store.rb, line 79
def url_for(uid, opts={})
  if opts && opts[:expires]
    if storage.respond_to?(:get_object_https_url) # fog's get_object_url is deprecated (aug 2011)
      storage.get_object_https_url(bucket_name, uid, opts[:expires])
    else
      storage.get_object_url(bucket_name, uid, opts[:expires])
    end
  else
    scheme = opts[:scheme] || url_scheme
    host   = opts[:host]   || url_host || "#{bucket_name}.s3.amazonaws.com"
    "#{scheme}://#{host}/#{uid}"
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.