Sha256: 649f76d6c1cf0a3105d0887aec358ca94826c6c9cc621d415d51e7204de349a0

Contents?: true

Size: 1.96 KB

Versions: 1

Compression:

Stored size: 1.96 KB

Contents

require 'attached/storage/base'

require 'aws/s3'


module Attached
	module Storage
		class AWS < Base
			
			
			attr_reader :bucket
			attr_reader :access_key_id
			attr_reader :secret_access_key
			
			
			# Create a new AWS interface supporting save and destroy operations.
			#
			# Usage:
			#
			#		Attached::Storage::S3.new()
			#		Attached::Storage::S3.new("s3.yml")
			
			def initialize(credentials)
				credentials = parse(credentials)
				
				@bucket						 = credentials[:bucket]            || credentials['bucket']
				@access_key_id		 = credentials[:access_key_id]     || credentials['access_key_id']
				@secret_access_key = credentials[:secret_access_key] || credentials['secret_access_key']
			end
			
			
			# Access the host (e.g. bucket.s3.amazonaws.com) for a storage service.
			#
			# Usage:
			#
			#		storage.host
			
			def host()
				"https://#{self.bucket}.s3.amazonaws.com"
			end
			
			
      # Save a file to a given path on AWS S3.
      #
      # Parameters:
      #
      # * file - The file to save.
      # * path - The path to save.
      
      def save(file, path)
        connect()
        begin
          ::AWS::S3::S3Object.store(path, file, bucket, :access => :public_read)
        rescue AWS::S3::NoSuchBucket => e
  			  ::AWS::S3::Bucket.create(bucket)
          retry
        end
      end
      
      
      # Destroy a file at a given path on AWS S3.
      #
      # Parameters:
      #
      # * path - The path to destroy.
      
      def destroy(path)
        connect()
        begin
          ::AWS::S3::S3Object.delete(path, bucket, :access => :authenticated_read)
        rescue AWS::S3::NoSuchBucket => e
  			  ::AWS::S3::Bucket.create(bucket)
          retry
        end
      end
			
			
		private
			
			
			# Connect to an AWS S3 server.
			
			def connect()
        @connection ||= ::AWS::S3::Base.establish_connection!(
          :access_key_id => access_key_id, :secret_access_key => secret_access_key
        )
			end
			
			
		end
	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
attached-0.1.5 lib/attached/storage/aws.rb