Class: Fog::Storage::Rackspace::Real
- Inherits:
-
Object
- Object
- Fog::Storage::Rackspace::Real
- Includes:
- Utils
- Defined in:
- lib/fog/rackspace/storage.rb,
lib/fog/rackspace/requests/storage/get_object.rb,
lib/fog/rackspace/requests/storage/put_object.rb,
lib/fog/rackspace/requests/storage/copy_object.rb,
lib/fog/rackspace/requests/storage/head_object.rb,
lib/fog/rackspace/requests/storage/delete_object.rb,
lib/fog/rackspace/requests/storage/get_container.rb,
lib/fog/rackspace/requests/storage/put_container.rb,
lib/fog/rackspace/requests/storage/get_containers.rb,
lib/fog/rackspace/requests/storage/head_container.rb,
lib/fog/rackspace/requests/storage/head_containers.rb,
lib/fog/rackspace/requests/storage/delete_container.rb,
lib/fog/rackspace/requests/storage/put_object_manifest.rb
Instance Attribute Summary collapse
-
#rackspace_cdn_ssl ⇒ Object
readonly
Returns the value of attribute rackspace_cdn_ssl.
Instance Method Summary collapse
-
#copy_object(source_container_name, source_object_name, target_container_name, target_object_name, options = {}) ⇒ Object
Copy object.
-
#delete_container(name) ⇒ Object
Delete an existing container.
-
#delete_object(container, object) ⇒ Object
Delete an existing container.
-
#get_container(container, options = {}) ⇒ Object
Get details for container and total bytes stored.
-
#get_containers(options = {}) ⇒ Object
List existing storage containers.
-
#get_object(container, object, &block) ⇒ Object
Get details for object.
-
#head_container(container) ⇒ Object
List number of objects and total bytes stored.
-
#head_containers ⇒ Object
List number of containers and total bytes stored.
-
#head_object(container, object) ⇒ Object
Get headers for object.
-
#initialize(options = {}) ⇒ Real
constructor
A new instance of Real.
-
#put_container(name) ⇒ Object
Create a new container.
-
#put_object(container, object, data, options = {}) ⇒ Object
Create a new object.
-
#put_object_manifest(container, object) ⇒ Object
Create a new object.
- #reload ⇒ Object
- #request(params, parse_json = true, &block) ⇒ Object
Methods included from Utils
Constructor Details
#initialize(options = {}) ⇒ Real
Returns a new instance of Real.
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/fog/rackspace/storage.rb', line 80 def initialize(={}) require 'mime/types' @rackspace_api_key = [:rackspace_api_key] @rackspace_username = [:rackspace_username] @rackspace_cdn_ssl = [:rackspace_cdn_ssl] @rackspace_auth_url = [:rackspace_auth_url] @rackspace_servicenet = [:rackspace_servicenet] @rackspace_auth_token = [:rackspace_auth_token] @rackspace_storage_url = [:rackspace_storage_url] @rackspace_must_reauthenticate = false @connection_options = [:connection_options] || {} authenticate @persistent = [:persistent] || false Excon.ssl_verify_peer = false if [:rackspace_servicenet] == true @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) end |
Instance Attribute Details
#rackspace_cdn_ssl ⇒ Object (readonly)
Returns the value of attribute rackspace_cdn_ssl.
78 79 80 |
# File 'lib/fog/rackspace/storage.rb', line 78 def rackspace_cdn_ssl @rackspace_cdn_ssl end |
Instance Method Details
#copy_object(source_container_name, source_object_name, target_container_name, target_object_name, options = {}) ⇒ Object
Copy object
Parameters
-
source_container_name<~String> - Name of source bucket
-
source_object_name<~String> - Name of source object
-
target_container_name<~String> - Name of bucket to create copy in
-
target_object_name<~String> - Name for new copy of object
-
options<~Hash> - Additional headers
14 15 16 17 18 19 20 21 22 |
# File 'lib/fog/rackspace/requests/storage/copy_object.rb', line 14 def copy_object(source_container_name, source_object_name, target_container_name, target_object_name, ={}) headers = { 'X-Copy-From' => "/#{source_container_name}/#{source_object_name}" }.merge() request({ :expects => 201, :headers => headers, :method => 'PUT', :path => "#{Fog::Rackspace.escape(target_container_name)}/#{Fog::Rackspace.escape(target_object_name)}" }) end |
#delete_container(name) ⇒ Object
Delete an existing container
Parameters
-
name<~String> - Name of container to delete
11 12 13 14 15 16 17 |
# File 'lib/fog/rackspace/requests/storage/delete_container.rb', line 11 def delete_container(name) request( :expects => 204, :method => 'DELETE', :path => Fog::Rackspace.escape(name) ) end |
#delete_object(container, object) ⇒ Object
Delete an existing container
Parameters
-
container<~String> - Name of container to delete
-
object<~String> - Name of object to delete
12 13 14 15 16 17 18 |
# File 'lib/fog/rackspace/requests/storage/delete_object.rb', line 12 def delete_object(container, object) request( :expects => 204, :method => 'DELETE', :path => "#{Fog::Rackspace.escape(container)}/#{Fog::Rackspace.escape(object)}" ) end |
#get_container(container, options = {}) ⇒ Object
Get details for container and total bytes stored
Parameters
-
container<~String> - Name of container to retrieve info for
-
options<~String>:
-
‘limit’<~String> - Maximum number of objects to return
-
‘marker’<~String> - Only return objects whose name is greater than marker
-
‘prefix’<~String> - Limits results to those starting with prefix
-
‘path’<~String> - Return objects nested in the pseudo path
-
Returns
-
response<~Excon::Response>:
-
headers<~Hash>:
-
‘X-Account-Container-Count’<~String> - Count of containers
-
‘X-Account-Bytes-Used’<~String> - Bytes used
-
-
body<~Array>:
-
‘bytes’<~Integer> - Number of bytes used by container
-
‘count’<~Integer> - Number of items in container
-
‘name’<~String> - Name of container
-
item<~Hash>:
-
‘bytes’<~String> - Size of object
-
‘content_type’<~String> Content-Type of object
-
‘hash’<~String> - Hash of object (etag?)
-
‘last_modified’<~String> - Last modified timestamp
-
‘name’<~String> - Name of object
-
-
-
31 32 33 34 35 36 37 38 39 |
# File 'lib/fog/rackspace/requests/storage/get_container.rb', line 31 def get_container(container, = {}) = .reject {|key, value| value.nil?} request( :expects => 200, :method => 'GET', :path => Fog::Rackspace.escape(container), :query => {'format' => 'json'}.merge!() ) end |
#get_containers(options = {}) ⇒ Object
List existing storage containers
Parameters
-
options<~Hash>:
-
‘limit’<~Integer> - Upper limit to number of results returned
-
‘marker’<~String> - Only return objects with name greater than this value
-
Returns
-
response<~Excon::Response>:
-
body<~Array>:
-
container<~Hash>:
-
‘bytes’<~Integer>: - Number of bytes used by container
-
‘count’<~Integer>: - Number of items in container
-
‘name’<~String>: - Name of container
-
-
-
20 21 22 23 24 25 26 27 28 |
# File 'lib/fog/rackspace/requests/storage/get_containers.rb', line 20 def get_containers( = {}) = .reject {|key, value| value.nil?} request( :expects => [200, 204], :method => 'GET', :path => '', :query => {'format' => 'json'}.merge!() ) end |
#get_object(container, object, &block) ⇒ Object
Get details for object
Parameters
-
container<~String> - Name of container to look in
-
object<~String> - Name of object to look for
12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/fog/rackspace/requests/storage/get_object.rb', line 12 def get_object(container, object, &block) params = {} if block_given? params[:response_block] = Proc.new end request(params.merge!({ :block => block, :expects => 200, :method => 'GET', :path => "#{Fog::Rackspace.escape(container)}/#{Fog::Rackspace.escape(object)}" }), false) end |
#head_container(container) ⇒ Object
List number of objects and total bytes stored
Parameters
-
container<~String> - Name of container to retrieve info for
Returns
-
response<~Excon::Response>:
-
headers<~Hash>:
-
‘X-Container-Object-Count’<~String> - Count of containers
-
‘X-Container-Bytes-Used’<~String> - Bytes used
-
-
16 17 18 19 20 21 22 23 |
# File 'lib/fog/rackspace/requests/storage/head_container.rb', line 16 def head_container(container) request( :expects => 204, :method => 'HEAD', :path => Fog::Rackspace.escape(container), :query => {'format' => 'json'} ) end |
#head_containers ⇒ Object
List number of containers and total bytes stored
Returns
-
response<~Excon::Response>:
-
headers<~Hash>:
-
‘X-Account-Container-Count’<~String> - Count of containers
-
‘X-Account-Bytes-Used’<~String> - Bytes used
-
-
13 14 15 16 17 18 19 20 |
# File 'lib/fog/rackspace/requests/storage/head_containers.rb', line 13 def head_containers request( :expects => 204, :method => 'HEAD', :path => '', :query => {'format' => 'json'} ) end |
#head_object(container, object) ⇒ Object
Get headers for object
Parameters
-
container<~String> - Name of container to look in
-
object<~String> - Name of object to look for
12 13 14 15 16 17 18 |
# File 'lib/fog/rackspace/requests/storage/head_object.rb', line 12 def head_object(container, object) request({ :expects => 200, :method => 'HEAD', :path => "#{Fog::Rackspace.escape(container)}/#{Fog::Rackspace.escape(object)}" }, false) end |
#put_container(name) ⇒ Object
Create a new container
Parameters
-
name<~String> - Name for container, should be < 256 bytes and must not contain ‘/’
11 12 13 14 15 16 17 |
# File 'lib/fog/rackspace/requests/storage/put_container.rb', line 11 def put_container(name) request( :expects => [201, 202], :method => 'PUT', :path => Fog::Rackspace.escape(name) ) end |
#put_object(container, object, data, options = {}) ⇒ Object
Create a new object
Parameters
-
container<~String> - Name for container, should be < 256 bytes and must not contain ‘/’
-
object<~String> - Name for object
-
data<~String|File> - data to upload
-
options<~Hash> - config headers for object. Defaults to {}.
14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/fog/rackspace/requests/storage/put_object.rb', line 14 def put_object(container, object, data, = {}) data = Fog::Storage.parse_data(data) headers = data[:headers].merge!() request( :body => data[:body], :expects => 201, :idempotent => true, :headers => headers, :method => 'PUT', :path => "#{Fog::Rackspace.escape(container)}/#{Fog::Rackspace.escape(object)}" ) end |
#put_object_manifest(container, object) ⇒ Object
Create a new object
Parameters
-
container<~String> - Name for container, should be < 256 bytes and must not contain ‘/’
-
object<~String> - Name for object
12 13 14 15 16 17 18 19 20 |
# File 'lib/fog/rackspace/requests/storage/put_object_manifest.rb', line 12 def put_object_manifest(container, object) path = "#{Fog::Rackspace.escape(container)}/#{Fog::Rackspace.escape(object)}" request( :expects => 201, :headers => {'X-Object-Manifest' => path}, :method => 'PUT', :path => path ) end |
#reload ⇒ Object
97 98 99 |
# File 'lib/fog/rackspace/storage.rb', line 97 def reload @connection.reset end |
#request(params, parse_json = true, &block) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/fog/rackspace/storage.rb', line 101 def request(params, parse_json = true, &block) begin response = @connection.request(params.merge!({ :headers => { 'Content-Type' => 'application/json', 'X-Auth-Token' => @auth_token }.merge!(params[:headers] || {}), :host => @host, :path => "#{@path}/#{params[:path]}", }), &block) rescue Excon::Errors::Unauthorized => error if error.response.body != 'Bad username or password' # token expiration @rackspace_must_reauthenticate = true authenticate retry else # bad credentials raise error end rescue Excon::Errors::HTTPStatusError => error raise case error when Excon::Errors::NotFound Fog::Storage::Rackspace::NotFound.slurp(error) else error end end if !response.body.empty? && parse_json && response.headers['Content-Type'] =~ %r{application/json} response.body = Fog::JSON.decode(response.body) end response end |