Class: Fog::Rackspace::Files
- Inherits:
-
Object
- Object
- Fog::Rackspace::Files
- Defined in:
- lib/fog/rackspace/files.rb,
lib/fog/rackspace/models/files/file.rb,
lib/fog/rackspace/models/files/files.rb,
lib/fog/rackspace/models/files/directory.rb,
lib/fog/rackspace/models/files/directories.rb,
lib/fog/rackspace/requests/files/get_object.rb,
lib/fog/rackspace/requests/files/put_object.rb,
lib/fog/rackspace/requests/files/head_object.rb,
lib/fog/rackspace/requests/files/delete_object.rb,
lib/fog/rackspace/requests/files/get_container.rb,
lib/fog/rackspace/requests/files/put_container.rb,
lib/fog/rackspace/requests/files/get_containers.rb,
lib/fog/rackspace/requests/files/head_container.rb,
lib/fog/rackspace/requests/files/head_containers.rb,
lib/fog/rackspace/requests/files/delete_container.rb
Defined Under Namespace
Classes: Directories, Directory, File, Files
Class Method Summary collapse
Instance Method Summary collapse
- #cdn_request(params) ⇒ Object
-
#delete_container(name) ⇒ Object
Delete an existing container.
-
#delete_object(container, object) ⇒ Object
Delete an existing container.
- #directories ⇒ Object
-
#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 = {}) ⇒ Files
constructor
A new instance of Files.
- #parse_data(data) ⇒ Object
-
#put_container(name) ⇒ Object
Create a new container.
-
#put_object(container, object, data) ⇒ Object
Create a new object.
- #storage_request(params, parse_json = true) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Files
Returns a new instance of Files.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/fog/rackspace/files.rb', line 28 def initialize(={}) credentials = Fog::Rackspace.authenticate() @auth_token = credentials['X-Auth-Token'] cdn_uri = URI.parse(credentials['X-CDN-Management-Url']) @cdn_host = cdn_uri.host @cdn_path = cdn_uri.path @cdn_port = cdn_uri.port @cdn_scheme = cdn_uri.scheme storage_uri = URI.parse(credentials['X-Storage-Url']) @storage_host = storage_uri.host @storage_path = storage_uri.path @storage_port = storage_uri.port @storage_scheme = storage_uri.scheme end |
Class Method Details
.dependencies ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/fog/rackspace/files.rb', line 5 def self.dependencies [ "fog/rackspace/models/files/directory.rb", "fog/rackspace/models/files/directories.rb", "fog/rackspace/models/files/file.rb", "fog/rackspace/models/files/files.rb", "fog/rackspace/requests/files/delete_container.rb", "fog/rackspace/requests/files/delete_object.rb", "fog/rackspace/requests/files/get_container.rb", "fog/rackspace/requests/files/get_containers.rb", "fog/rackspace/requests/files/get_object.rb", "fog/rackspace/requests/files/head_container.rb", "fog/rackspace/requests/files/head_containers.rb", "fog/rackspace/requests/files/head_object.rb", "fog/rackspace/requests/files/put_container.rb", "fog/rackspace/requests/files/put_object.rb" ] end |
.reload ⇒ Object
24 25 26 |
# File 'lib/fog/rackspace/files.rb', line 24 def self.reload self.dependencies.each {|dependency| load(dependency)} end |
Instance Method Details
#cdn_request(params) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/fog/rackspace/files.rb', line 64 def cdn_request(params) @cdn_connection = Fog::Connection.new("#{@cdn_scheme}://#{@cdn_host}:#{@cdn_port}") response = @cdn_connection.request({ :body => params[:body], :expects => params[:expects], :headers => { 'Content-Type' => 'application/json', 'X-Auth-Token' => @auth_token }.merge!(params[:headers] || {}), :host => @cdn_host, :method => params[:method], :path => "#{@cdn_path}/#{params[:path]}", :query => params[:query] }) unless response.body.empty? response.body = JSON.parse(response.body) end response end |
#delete_container(name) ⇒ Object
Delete an existing container
Parameters
-
name<~String> - Name of container to delete
12 13 14 15 16 17 18 19 |
# File 'lib/fog/rackspace/requests/files/delete_container.rb', line 12 def delete_container(name) response = storage_request( :expects => 204, :method => 'DELETE', :path => CGI.escape(name) ) response 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
13 14 15 16 17 18 19 20 |
# File 'lib/fog/rackspace/requests/files/delete_object.rb', line 13 def delete_object(container, object) response = storage_request( :expects => 204, :method => 'DELETE', :path => "#{CGI.escape(container)}/#{CGI.escape(object)}" ) response end |
#directories ⇒ Object
5 6 7 |
# File 'lib/fog/rackspace/models/files/directories.rb', line 5 def directories Fog::Rackspace::Files::Directories.new(:connection => self) 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
-
-
-
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/fog/rackspace/requests/files/get_container.rb', line 32 def get_container(container, = {}) query = '' for key, value in .merge!({ 'format' => 'json' }) query << "#{key}=#{value}&" end query.chop! response = storage_request( :expects => 200, :method => 'GET', :path => container, :query => query ) response 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
-
-
-
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/fog/rackspace/requests/files/get_containers.rb', line 21 def get_containers( = {}) = { 'format' => 'json' }.merge!() query = '' for key, value in query << "#{key}=#{CGI.escape(value)}&" end query.chop! response = storage_request( :expects => [200, 204], :method => 'GET', :path => '', :query => query ) response 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
13 14 15 16 17 18 19 20 21 |
# File 'lib/fog/rackspace/requests/files/get_object.rb', line 13 def get_object(container, object, &block) response = storage_request({ :block => block, :expects => 200, :method => 'GET', :path => "#{CGI.escape(container)}/#{CGI.escape(object)}" }, false) response 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
-
-
17 18 19 20 21 22 23 24 25 |
# File 'lib/fog/rackspace/requests/files/head_container.rb', line 17 def head_container(container) response = storage_request( :expects => 204, :method => 'HEAD', :path => container, :query => 'format=json' ) response 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
-
-
14 15 16 17 18 19 20 21 22 |
# File 'lib/fog/rackspace/requests/files/head_containers.rb', line 14 def head_containers response = storage_request( :expects => 204, :method => 'HEAD', :path => '', :query => 'format=json' ) response 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
13 14 15 16 17 18 19 20 |
# File 'lib/fog/rackspace/requests/files/head_object.rb', line 13 def head_object(container, object) response = storage_request({ :expects => 200, :method => 'GET', :path => "#{CGI.escape(container)}/#{CGI.escape(object)}" }, false) response end |
#parse_data(data) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/fog/rackspace/files.rb', line 43 def parse_data(data) = { :body => nil, :headers => {} } if data.is_a?(String) [:body] = data [:headers]['Content-Length'] = [:body].size.to_s else filename = ::File.basename(data.path) unless (mime_types = MIME::Types.of(filename)).empty? [:headers]['Content-Type'] = mime_types.first.content_type end [:body] = data.read [:headers]['Content-Length'] = ::File.size(data.path).to_s end # metadata[:headers]['Content-MD5'] = Base64.encode64(Digest::MD5.digest(metadata[:body])).strip end |
#put_container(name) ⇒ Object
Create a new container
Parameters
-
name<~String> - Name for container, should be < 256 bytes and must not contain ‘/’
12 13 14 15 16 17 18 19 |
# File 'lib/fog/rackspace/requests/files/put_container.rb', line 12 def put_container(name) response = storage_request( :expects => [201, 202], :method => 'PUT', :path => CGI.escape(name) ) response end |
#put_object(container, object, data) ⇒ Object
Create a new object
Parameters
-
container<~String> - Name for container, should be < 256 bytes and must not contain ‘/’
12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/fog/rackspace/requests/files/put_object.rb', line 12 def put_object(container, object, data) data = parse_data(data) response = storage_request( :body => data[:body], :expects => 201, :headers => data[:headers], :method => 'PUT', :path => "#{CGI.escape(container)}/#{CGI.escape(object)}" ) response end |
#storage_request(params, parse_json = true) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/fog/rackspace/files.rb', line 84 def storage_request(params, parse_json = true) @storage_connection = Fog::Connection.new("#{@storage_scheme}://#{@storage_host}:#{@storage_port}") response = @storage_connection.request({ :body => params[:body], :expects => params[:expects], :headers => { 'Content-Type' => 'application/json', 'X-Auth-Token' => @auth_token }.merge!(params[:headers] || {}), :host => @storage_host, :method => params[:method], :path => "#{@storage_path}/#{params[:path]}", :query => params[:query] }) if !response.body.empty? && parse_json response.body = JSON.parse(response.body) end response end |