Sha256: 3ff1c9d28080529a786426c508cd45a7a7e6b7c74a76f0228345ef550e946091

Contents?: true

Size: 1.59 KB

Versions: 5

Compression:

Stored size: 1.59 KB

Contents

module Dandelion
  module Adapter
    class S3 < Adapter::Base
      adapter 's3'
      requires_gems 'aws-s3'

      def initialize(config)
        require 'aws/s3'

        @config = config
        @config.defaults(preserve_permissions: true)
      end

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

      def write(file, data)
        connect!

        key = path(file)

        begin
          policy = AWS::S3::S3Object.acl(key, bucket_name) if @config[:preserve_permissions]
        rescue AWS::S3::NoSuchKey
        end

        AWS::S3::S3Object.store(path(file), data, bucket_name)
        AWS::S3::S3Object.acl(key, bucket_name, policy) unless policy.nil?
      end

      def delete(file)
        connect!
        AWS::S3::S3Object.delete(path(file), bucket_name)
      end

      def to_s
        "s3://#{@config[:access_key_id]}@#{bucket_name}/#{@config[:path]}"
      end

    protected

      def connect!
        options = {
          access_key_id: @config[:access_key_id],
          secret_access_key: @config[:secret_access_key],
          use_ssl: true
        }

        AWS::S3::DEFAULT_HOST.replace(@config[:host]) if @config[:host]
        AWS::S3::Base.establish_connection!(options) unless AWS::S3::Base.connected?
      end

      def bucket_name
        @config[:bucket_name]
      end

      def path(file)
        if @config[:path] and !@config[:path].empty?
          "#{@config[:path]}/#{file}"
        else
          file
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
dandelion-0.4.14 lib/dandelion/adapter/s3.rb
dandelion-0.4.10 lib/dandelion/adapter/s3.rb
dandelion-0.4.9 lib/dandelion/adapter/s3.rb
dandelion-0.4.8 lib/dandelion/adapter/s3.rb
dandelion-0.4.7 lib/dandelion/adapter/s3.rb