Sha256: 638fa51cf99b905e528dcd18b5b2273d4e264797b1dbc5ad230668d2f69125b7

Contents?: true

Size: 1.81 KB

Versions: 9

Compression:

Stored size: 1.81 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

        # Set caching options
        options = {}
        options[:cache_control] = "max-age=#{@config[:cache_control]}" if @config[:cache_control]
        options[:expires] = @config[:expires] if @config[:expires]

        AWS::S3::S3Object.store(path(file), data, bucket_name, options)
        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

9 entries across 9 versions & 1 rubygems

Version Path
dandelion-0.6.0 lib/dandelion/adapter/s3.rb
dandelion-0.5.4 lib/dandelion/adapter/s3.rb
dandelion-0.5.3 lib/dandelion/adapter/s3.rb
dandelion-0.5.2 lib/dandelion/adapter/s3.rb
dandelion-0.5.1 lib/dandelion/adapter/s3.rb
dandelion-0.5.0 lib/dandelion/adapter/s3.rb
dandelion-0.4.17 lib/dandelion/adapter/s3.rb
dandelion-0.4.16 lib/dandelion/adapter/s3.rb
dandelion-0.4.15 lib/dandelion/adapter/s3.rb