Sha256: 84d1c846c18cef14570ea6f8f358b6d0edff5fa1c272ff8b6302a2bfae9abe5b

Contents?: true

Size: 1.37 KB

Versions: 6

Compression:

Stored size: 1.37 KB

Contents

module Dandelion
  module Adapter
    class S3 < Adapter::Base
      adapter 's3'
      requires_gems 'aws-s3'
      
      def initialize(config)
        require 'aws/s3'
        
        @access_key_id = config[:access_key_id]
        @secret_access_key = config[:secret_access_key]
        @bucket_name = config[:bucket_name]
        @host = config[:host]
        @path = config[:path]
      end

      def read(file)
        s3connect!
        return nil unless AWS::S3::S3Object.exists?(path(file), @bucket_name)
        AWS::S3::S3Object.value(path(file), @bucket_name)
      end

      def write(file, data)
        s3connect!
        AWS::S3::S3Object.store(path(file), data, @bucket_name)
      end

      def delete(file)
        s3connect!
        AWS::S3::S3Object.delete(path(file), @bucket_name)
      end
      
      def to_s
        "s3://#{@access_key_id}@#{@bucket_name}/#{@path}"
      end

      protected
      
      def s3connect!
        options = {
          access_key_id: @access_key_id,
          secret_access_key: @secret_access_key,
          use_ssl: true
        }

        options[:server] = @host if @host
        AWS::S3::Base.establish_connection!(options) unless AWS::S3::Base.connected?
      end
            
      def path(file)
        if @path and !@path.empty?
          "#{@path}/#{file}"
        else
          file
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dandelion-0.4.4 lib/dandelion/adapter/s3.rb
dandelion-0.4.3 lib/dandelion/adapter/s3.rb
dandelion-0.4.2 lib/dandelion/adapter/s3.rb
dandelion-0.4.1 lib/dandelion/adapter/s3.rb
dandelion-0.4.0 lib/dandelion/adapter/s3.rb
dandelion-0.4.0.beta2 lib/dandelion/adapter/s3.rb