Class: AWS::S3::ObjectVersion

Inherits:
Object
  • Object
show all
Includes:
Core::Model
Defined in:
lib/aws/s3/object_version.rb

Overview

Represents a single version of an S3Object.

When you enable versioning on a S3 bucket, writing to an object will create an object version instead of replacing the existing object.

Instance Attribute Summary collapse

Attributes included from Core::Model

#config

Instance Method Summary collapse

Methods included from Core::Model

#client, #config_prefix

Constructor Details

#initialize(object, version_id, options = {}) ⇒ ObjectVersion

Returns a new instance of ObjectVersion.

Parameters:

  • object (S3Object)

    The object this is a version of.

  • version_id (String)

    The unique id for this version.

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :delete_marker (Boolean)

    Is this version a delete marker?


31
32
33
34
35
36
# File 'lib/aws/s3/object_version.rb', line 31

def initialize(object, version_id, options = {})
  @object = object
  @version_id = version_id
  @delete_marker = options[:delete_marker]
  super
end

Instance Attribute Details

#objectS3Object (readonly)

Returns the object this is a version of.

Returns:

  • (S3Object)

    the object this is a version of.


39
40
41
# File 'lib/aws/s3/object_version.rb', line 39

def object
  @object
end

#version_idString (readonly)

Returns The unique version identifier.

Returns:

  • (String)

    The unique version identifier.


46
47
48
# File 'lib/aws/s3/object_version.rb', line 46

def version_id
  @version_id
end

Instance Method Details

#==(other) ⇒ Boolean Also known as: eql?

Returns true if the other object version has the same s3 object key and version id.

Returns:

  • (Boolean)

    Returns true if the other object version has the same s3 object key and version id.


128
129
130
131
132
# File 'lib/aws/s3/object_version.rb', line 128

def ==(other)
  other.kind_of?(ObjectVersion) and
    other.object == object and
    other.version_id == version_id
end

#bucketObject


41
42
43
# File 'lib/aws/s3/object_version.rb', line 41

def bucket
  object.bucket
end

#content_lengthInteger

Returns Size of the object in bytes.

Returns:

  • (Integer)

    Size of the object in bytes.


71
72
73
# File 'lib/aws/s3/object_version.rb', line 71

def content_length
  head.content_length
end

#content_typeString

Note:

S3 does not compute content-type. It reports the content-type as was reported during the file upload.

Returns the content type as reported by S3, defaults to an empty string when not provided during upload.

Returns:

  • (String)

    Returns the content type as reported by S3, defaults to an empty string when not provided during upload.

See Also:


78
79
80
# File 'lib/aws/s3/object_version.rb', line 78

def content_type
  head.content_type
end

#deletenil

Deletes this object version from S3.

Returns:

  • (nil)

98
99
100
# File 'lib/aws/s3/object_version.rb', line 98

def delete
  object.delete(:version_id => @version_id)
end

#delete_marker?Boolean

If you delete an object in a versioned bucket, a delete marker is created.

Returns:

  • (Boolean)

    Returns true if this version is a delete marker.


112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/aws/s3/object_version.rb', line 112

def delete_marker?
  if @delete_marker.nil?
    begin
      # S3 responds with a 405 (method not allowed) when you try
      # to HEAD an s3 object version that is a delete marker
      ['foo'] 
      @delete_marker = false
    rescue Errors::MethodNotAllowed => error
      @delete_marker = true
    end
  end
  @delete_marker
end

#etagString

Returns the object's ETag

Returns:

  • (String)

    Returns the object's ETag

See Also:


66
67
68
# File 'lib/aws/s3/object_version.rb', line 66

def etag
  head.etag
end

#headObject

Returns A head object response with metatadata, content_length, content_type, etag and server_side_encryption.

Returns:

  • A head object response with metatadata, content_length, content_type, etag and server_side_encryption.

See Also:


60
61
62
# File 'lib/aws/s3/object_version.rb', line 60

def head
  object.head(:version_id => @version_id)
end

#inspectObject


137
138
139
# File 'lib/aws/s3/object_version.rb', line 137

def inspect
  "<#{self.class}:#{object.bucket.name}:#{object.key}:#{version_id}>"
end

#keyString

Returns The objects unique key.

Returns:

  • (String)

    The objects unique key


49
50
51
# File 'lib/aws/s3/object_version.rb', line 49

def key
  object.key
end

#latest?Boolean

Returns this if this is the latest version of the object, false if the object has been written to since this version was created.

Returns:

  • (Boolean)

    Returns this if this is the latest version of the object, false if the object has been written to since this version was created.


105
106
107
# File 'lib/aws/s3/object_version.rb', line 105

def latest?
  object.versions.latest.version_id == self.version_id
end

#metadataObjectMetadata

Returns an instance of ObjectMetadata representing the metadata for this object.

Returns:

  • (ObjectMetadata)

    Returns an instance of ObjectMetadata representing the metadata for this object.

See Also:


84
85
86
# File 'lib/aws/s3/object_version.rb', line 84

def 
  object.(:version_id => @version_id)
end

#read(options = {}, &block) ⇒ Object

Reads the data from this object version.

See Also:


92
93
94
# File 'lib/aws/s3/object_version.rb', line 92

def read options = {}, &block
  object.read(options.merge(:version_id => @version_id), &block)
end

#url_for(method, options = {}) ⇒ URI::HTTP, URI::HTTPS

Generates a presigned URL for an operation on this object. This URL can be used by a regular HTTP client to perform the desired operation without credentials and without changing the permissions of the object.

Examples:

Generate a url to read an object

bucket.objects.myobject.url_for(:read)

Generate a url to delete an object

bucket.objects.myobject.url_for(:delete)

Override response headers for reading an object

object = bucket.objects.myobject
url = object.url_for(:read, :response_content_type => "application/json")

Generate a url that expires in 10 minutes

bucket.objects.myobject.url_for(:read, :expires => 10*60)

Parameters:

  • method (Symbol, String)

    The HTTP verb or object method for which the returned URL will be valid. Valid values:

    • :get or :read

    • :put or :write

    • :delete

  • options (Hash) (defaults to: {})

    Additional options for generating the URL.

Options Hash (options):

  • :expires (Object)

    Sets the expiration time of the URL; after this time S3 will return an error if the URL is used. This can be an integer (to specify the number of seconds after the current time), a string (which is parsed as a date using Time#parse), a Time, or a DateTime object. This option defaults to one hour after the current time.

  • :secure (Boolean) — default: true

    Whether to generate a secure (HTTPS) URL or a plain HTTP url.

  • :response_content_type (String)

    Sets the Content-Type header of the response when performing an HTTP GET on the returned URL.

  • :response_content_language (String)

    Sets the Content-Language header of the response when performing an HTTP GET on the returned URL.

  • :response_expires (String)

    Sets the Expires header of the response when performing an HTTP GET on the returned URL.

  • :response_cache_control (String)

    Sets the Cache-Control header of the response when performing an HTTP GET on the returned URL.

  • :response_content_disposition (String)

    Sets the Content-Disposition header of the response when performing an HTTP GET on the returned URL.

  • :response_content_encoding (String)

    Sets the Content-Encoding header of the response when performing an HTTP GET on the returned URL.

Returns:

  • (URI::HTTP, URI::HTTPS)

54
55
56
# File 'lib/aws/s3/object_version.rb', line 54

def url_for method, options = {}
  object.url_for(method, options.merge(:version_id => version_id))
end