Sha256: 73206948535965a4fab852805db0cf0f7a381539b4a15f8189f3912c37c4cb77

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 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)
      file = find_by_key!(key)
      Metadata.new(true, file.size, file.created_at, file.updated_at)
    rescue AssetCloud::AssetNotFoundError
      Metadata.new(false)
    end

    private

    def bucket
      @bucket ||= cloud.gcs_bucket
    end

    def absolute_key(key = nil)
      if key.to_s.starts_with?(path_prefix)
        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

1 entries across 1 versions & 1 rubygems

Version Path
asset_cloud-2.7.2 lib/asset_cloud/buckets/gcs_bucket.rb