Sha256: 8dfd36a1ad2b633459cd4b138d361004c0c6a42e938940e991dea95d7e0bf52f

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

require "stashify/directory"
require "stashify/file/aws/s3"

module Stashify
  class Directory
    module AWS
      class S3 < Stashify::Directory
        attr_reader :bucket, :path

        def initialize(bucket:, path:)
          @bucket = bucket
          super(path: path)
        end

        def parent
          Stashify::Directory::AWS::S3.new(
            bucket: @bucket,
            path: ::File.dirname(path),
          )
        end

        def files
          @bucket.objects.map do |object|
            key = object.key
            file(::File.basename(key)) if key =~ %r{^#{Regexp.escape(path)}/([^/]*)(/.*)?$}
          end.compact
        end

        def directory?(name)
          @bucket.objects(prefix: path_of(name, "")).count.positive?
        end

        def directory(name)
          Stashify::Directory::AWS::S3.new(bucket: @bucket, path: path_of(name))
        end

        def exists?(name)
          @bucket.object(::File.join(path, name)).exists?
        end

        def file(name)
          Stashify::File::AWS::S3.new(bucket: @bucket, path: ::File.join(path, name))
        end

        def ==(other)
          self.class == other.class && @bucket == other.bucket && path == other.path
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
stashify-aws-s3-1.1.0 lib/stashify/directory/aws/s3.rb