Sha256: 7b8a614d70dcdea72b2829046c54123d2c7547063eef9f7ce99ec8909673e0a1

Contents?: true

Size: 1.27 KB

Versions: 10

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

module AssetCloud
  class GCSBucket < Bucket
    def ls(key = nil)
      key ? find_by_key!(key) : bucket.files
    end

    def read(key)
      file = find_by_key!(key)
      downloaded = file.download
      downloaded.rewind
      downloaded.read
    end

    def write(key, data, options = {})
      bucket.create_file(
        data,
        absolute_key(key),
        options
      )
    end

    def delete(key)
      file = find_by_key!(key)
      file.delete
    end

    def clear
      bucket.files.each(&:delete)
    end

    def stat(key)
      begin
        file = find_by_key!(key)
        Metadata.new(true, file.size, file.created_at, file.updated_at)
      rescue AssetCloud::AssetNotFoundError
        Metadata.new(false)
      end
    end

    private

    def bucket
      @bucket ||= cloud.gcs_bucket
    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 path_prefix
      @path_prefix ||= "s#{@cloud.url}"
    end

    def find_by_key!(key)
      file = bucket.file(absolute_key(key))

      raise AssetCloud::AssetNotFoundError, key unless file

      file
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
asset_cloud-2.6.0 lib/asset_cloud/buckets/gcs_bucket.rb
asset_cloud-2.5.3 lib/asset_cloud/buckets/gcs_bucket.rb
asset_cloud-2.5.2 lib/asset_cloud/buckets/gcs_bucket.rb
asset_cloud-2.5.1 lib/asset_cloud/buckets/gcs_bucket.rb
asset_cloud-2.5.0 lib/asset_cloud/buckets/gcs_bucket.rb
asset_cloud-2.4.0 lib/asset_cloud/buckets/gcs_bucket.rb
asset_cloud-2.3.1 lib/asset_cloud/buckets/gcs_bucket.rb
asset_cloud-2.3.0 lib/asset_cloud/buckets/gcs_bucket.rb
asset_cloud-2.2.9 lib/asset_cloud/buckets/gcs_bucket.rb
asset_cloud-2.2.8 lib/asset_cloud/buckets/gcs_bucket.rb