Sha256: 52aedef6a4829ce0d96fd94428fe883735b8625f87982e8872ed20efbb838fb9

Contents?: true

Size: 953 Bytes

Versions: 5

Compression:

Stored size: 953 Bytes

Contents

module S3io

  def self.open(s3object, mode_string = 'r', options = {}, &block)
    wrapper_class = case mode_string
    when 'r'
      ReadWrapper
    when 'w'
      WriteWrapper
    else
      fail "S3IO only supports 'r' or 'w' as access modes"
    end

    wrapper = wrapper_class.new(s3object, options)

    if block_given?
      result = yield wrapper if block_given?
      wrapper.close

      return result
    else
      return wrapper
    end
  end

  # This class wraps an AWS S3 object in order to provide IO-like API.
  # S3 objects wrapped this way can be used in methods that would otherwise expect an instance of File, StringIO etc.
  class Wrapper

    # Wraps an AWS::S3::S3Object into IO-like object.
    #
    # @param [AWS::S3::S3Object] s3object an object to wrap
    def initialize(s3object)
      @s3object = s3object
      @pos = 0
    end

    def close
      @s3object = nil
      @pos = 0

      return nil
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
s3io-1.1.5 lib/s3io/wrapper.rb
s3io-1.1.4 lib/s3io/wrapper.rb
s3io-1.1.1 lib/s3io/wrapper.rb
s3io-1.1.0 lib/s3io/wrapper.rb
s3io-1.0.0 lib/s3io/wrapper.rb