Sha256: 925fe9e952275d62cfb235cb6049114372017e05324c7fbc36f13de429e124ea

Contents?: true

Size: 1.2 KB

Versions: 3

Compression:

Stored size: 1.2 KB

Contents

module Pansophy
  module Remote
    class CreateFile
      include Adamantium::Flat

      ALLOWED_ATTRS = %i[
        cache_control
        content_disposition
        content_encoding
        content_length
        content_md5
        content_type
        etag
        expires
        last_modified
        metadata
        owner
        storage_class
        encryption
        encryption_key
        version
      ].freeze

      def initialize(bucket, path, body)
        @bucket   = bucket
        @pathname = Pathname.new(path)
        @body     = body
      end

      def call(options = {})
        prevent_overwrite! unless options[:overwrite]
        file_attributes = options.slice(*ALLOWED_ATTRS)
        directory.files.create(file_attributes.merge(key: @pathname.to_s, body: @body.dup))
      end

      private

      def exist?
        directory.files.any? { |file| file.key == @pathname.to_s }
      end

      def prevent_overwrite!
        return unless exist?
        fail ArgumentError,
             "#{@pathname} already exists, pass ':overwrite => true' to overwrite"
      end

      def directory
        ReadDirectory.new(@bucket, @pathname).call
      end
      memoize :directory
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
pansophy-1.3.0 lib/pansophy/remote/create_file.rb
pansophy-1.2.0 lib/pansophy/remote/create_file.rb
pansophy-1.1.0 lib/pansophy/remote/create_file.rb