Class: Sndacs::Object

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Parser
Defined in:
lib/sndacs/object.rb

Overview

Class responsible for handling objects stored in CS buckets

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Parser

#parse_all_buckets_result, #parse_all_objects_result, #parse_copy_object_result, #parse_error, #parse_is_truncated, #parse_location_constraint, #rexml_document

Instance Attribute Details

#aclObject

Returns the value of attribute acl.



9
10
11
# File 'lib/sndacs/object.rb', line 9

def acl
  @acl
end

#bucketObject

Returns the value of attribute bucket.



9
10
11
# File 'lib/sndacs/object.rb', line 9

def bucket
  @bucket
end

#cache_controlObject

Returns the value of attribute cache_control.



8
9
10
# File 'lib/sndacs/object.rb', line 8

def cache_control
  @cache_control
end

#content(reload = false) ⇒ Object

Downloads the content of the object, and caches it. Pass true to clear the cache and download the object again.



66
67
68
69
70
71
72
# File 'lib/sndacs/object.rb', line 66

def content(reload = false)
  return @content if defined?(@content) and not reload

  get_object

  @content
end

#content_dispositionObject

Returns the value of attribute content_disposition.



8
9
10
# File 'lib/sndacs/object.rb', line 8

def content_disposition
  @content_disposition
end

#content_encodingObject

Returns the value of attribute content_encoding.



8
9
10
# File 'lib/sndacs/object.rb', line 8

def content_encoding
  @content_encoding
end

#content_typeObject

Returns the value of attribute content_type.



8
9
10
# File 'lib/sndacs/object.rb', line 8

def content_type
  @content_type
end

#etagObject

Returns the value of attribute etag.



9
10
11
# File 'lib/sndacs/object.rb', line 9

def etag
  @etag
end

#keyObject

Returns the value of attribute key.



9
10
11
# File 'lib/sndacs/object.rb', line 9

def key
  @key
end

#last_modifiedObject

Returns the value of attribute last_modified.



9
10
11
# File 'lib/sndacs/object.rb', line 9

def last_modified
  @last_modified
end

#metadataObject (readonly)

Returns the value of attribute metadata.



9
10
11
# File 'lib/sndacs/object.rb', line 9

def 
  @metadata
end

#sizeObject

Returns the value of attribute size.



9
10
11
# File 'lib/sndacs/object.rb', line 9

def size
  @size
end

#storage_classObject

Returns the value of attribute storage_class.



9
10
11
# File 'lib/sndacs/object.rb', line 9

def storage_class
  @storage_class
end

Instance Method Details

#==(other) ⇒ Object

Compares the object with other object. Returns true if the key of the objects are the same, and both have the same buckets (see Bucket equality)



19
20
21
# File 'lib/sndacs/object.rb', line 19

def ==(other)
  other.equal?(self) || (other.instance_of?(self.class) && self.key == other.key && self.bucket == other.bucket)
end

#cname_urlObject

Returns Object’s CNAME URL (without storage.grandcloud.cn suffix) using protocol specified in Service, e.g. http://domain.com/key/with/path.extension. (you have to set the CNAME in your DNS before using the CNAME URL schema).



116
117
118
# File 'lib/sndacs/object.rb', line 116

def cname_url
  URI.escape("#{protocol}#{name}/#{key}") if bucket.vhost?
end

#copy(options = {}) ⇒ Object

copies the file from another key and/or bucket.

Options

  • :key - key for copy

  • :bucket - bucket’s name which the source file stored

  • :x_snda_metadata.. - params for copy which is not nessary



90
91
92
93
94
# File 'lib/sndacs/object.rb', line 90

def copy(options = {})
  copy_object(options)
  retrieve
  true
end

#destroyObject

Destroys the file on the server



97
98
99
100
101
# File 'lib/sndacs/object.rb', line 97

def destroy
  delete_object

  true
end

#exists?Boolean

Retrieves the object from the server, returns true if the object exists or false otherwise. Uses #retrieve method, but catches Sndacs::Error::NoSuchKey exception and returns false when it happens

Returns:

  • (Boolean)


135
136
137
138
139
140
141
# File 'lib/sndacs/object.rb', line 135

def exists?
  retrieve

  true
rescue Error::NoSuchKey
  false
end

#full_keyObject

Returns full key of the object: e.g. bucket-name/object/key.ext



24
25
26
# File 'lib/sndacs/object.rb', line 24

def full_key
  [name, key].join("/")
end

#inspectObject

:nodoc:



143
144
145
# File 'lib/sndacs/object.rb', line 143

def inspect #:nodoc:
  "#<#{self.class}:/#{name}/#{key}>"
end

#retrieveObject

Retrieves the object from the server. Method is used to download object information only (content type, size and so on). It does NOT download the content of the object (use the #content method to do it).



58
59
60
61
62
# File 'lib/sndacs/object.rb', line 58

def retrieve
  object_headers

  self
end

#save(options = {}) ⇒ Object

Saves the object, returns true if successfull.

Options

request headers



78
79
80
81
# File 'lib/sndacs/object.rb', line 78

def save(options = {})
  put_object(options)
  true
end

#temporary_url(expires_at = Time.now + 3600) ⇒ Object

Returns a temporary url to the object that expires on the timestamp given. Defaults to 5min expire time.



122
123
124
125
126
127
128
129
130
# File 'lib/sndacs/object.rb', line 122

def temporary_url(expires_at = Time.now + 3600)
  url = URI.escape("#{protocol}#{host(true)}/#{path_prefix}#{key}")
  signature = Signature.generate_temporary_url_signature(:bucket => name,
                                                         :resource => key,
                                                         :expires_at => expires_at,
                                                         :secret_access_key => secret_access_key)

  "#{url}?SNDAAccessKeyId=#{access_key_id}&Expires=#{expires_at.to_i.to_s}&Signature=#{signature}"
end

#url(public_accessible = false) ⇒ Object

Returns Object’s URL using protocol specified in service, Return url public reachable when the object is public accessible and public_accessible is true public_accessible given.Default to false e.g. http://storage.grandcloud.cn/bucket/key/file.extension



107
108
109
# File 'lib/sndacs/object.rb', line 107

def url(public_accessible = false)
  URI.escape("#{protocol}#{host(public_accessible)}/#{path_prefix}#{key}")
end