Sha256: 4e288369fac46ad7037d9c7ef939b062cbf5ba20f10523f60c362efda28b5ab7

Contents?: true

Size: 1.36 KB

Versions: 7

Compression:

Stored size: 1.36 KB

Contents

require 'aws'

module AssetCloud
  class S3Bucket < Bucket
    def ls(key = nil)
      key = absolute_key(key)

      objects = cloud.s3_bucket(key).objects
      objects = objects.with_prefix(key) if key

      objects.map { |o| cloud[relative_key(o.key)] }
    end

    def read(key, options = {})
      cloud.s3_bucket(key).objects[absolute_key(key)].read(options)
    rescue ::AWS::Errors::Base
      raise AssetCloud::AssetNotFoundError, key
    end

    def write(key, data, options = {})
      object = cloud.s3_bucket(key).objects[absolute_key(key)]

      object.write(data, options)
    end

    def delete(key)
      object = cloud.s3_bucket(key).objects[absolute_key(key)]

      object.delete

      true
    end

    def stat(key)
      object = cloud.s3_bucket(key).objects[absolute_key(key)]
      metadata = object.head

      AssetCloud::Metadata.new(true, metadata[:content_length], nil, metadata[:last_modified])
    rescue AWS::S3::Errors::NoSuchKey
      AssetCloud::Metadata.new(false)
    end

    protected
    def path_prefix
      @path_prefix ||= @cloud.url
    end

    def absolute_key(key = nil)
      if key.to_s.starts_with?(path_prefix)
        return key
      else
        args = [path_prefix]
        args << key.to_s if key
        args.join('/')
      end
    end

    def relative_key(key)
      key =~ /^#{path_prefix}\/(.+)/ ? $1 : key
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
asset_cloud-2.3.1 lib/asset_cloud/buckets/s3_bucket.rb
asset_cloud-2.3.0 lib/asset_cloud/buckets/s3_bucket.rb
asset_cloud-2.2.9 lib/asset_cloud/buckets/s3_bucket.rb
asset_cloud-2.2.8 lib/asset_cloud/buckets/s3_bucket.rb
asset_cloud-2.2.7 lib/asset_cloud/buckets/s3_bucket.rb
asset_cloud-2.2.6 lib/asset_cloud/buckets/s3_bucket.rb
asset_cloud-2.2.5 lib/asset_cloud/buckets/s3_bucket.rb