Class: Fog::Storage::Google::Real
- Inherits:
-
Object
- Object
- Fog::Storage::Google::Real
- Includes:
- GetObjectHttpUrl, GetObjectHttpsUrl, Utils
- Defined in:
- lib/fog/google/storage.rb,
lib/fog/google/requests/storage/get_bucket.rb,
lib/fog/google/requests/storage/get_object.rb,
lib/fog/google/requests/storage/put_bucket.rb,
lib/fog/google/requests/storage/put_object.rb,
lib/fog/google/requests/storage/copy_object.rb,
lib/fog/google/requests/storage/get_service.rb,
lib/fog/google/requests/storage/head_object.rb,
lib/fog/google/requests/storage/delete_bucket.rb,
lib/fog/google/requests/storage/delete_object.rb,
lib/fog/google/requests/storage/get_bucket_acl.rb,
lib/fog/google/requests/storage/get_object_acl.rb,
lib/fog/google/requests/storage/get_object_url.rb,
lib/fog/google/requests/storage/put_bucket_acl.rb,
lib/fog/google/requests/storage/put_object_acl.rb,
lib/fog/google/requests/storage/put_object_url.rb,
lib/fog/google/requests/storage/get_object_torrent.rb,
lib/fog/google/requests/storage/get_object_http_url.rb,
lib/fog/google/requests/storage/get_object_https_url.rb
Instance Method Summary collapse
- #connection(scheme, host, port) ⇒ Object
-
#copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {}) ⇒ Object
Copy an object from one Google Storage bucket to another.
-
#delete_bucket(bucket_name) ⇒ Object
Delete an Google Storage bucket.
-
#delete_object(bucket_name, object_name) ⇒ Object
Delete an object from Google Storage.
- #entries_list(access_control_list) ⇒ Object
-
#get_bucket(bucket_name, options = {}) ⇒ Object
List information about objects in an Google Storage bucket.
-
#get_bucket_acl(bucket_name) ⇒ Object
Get access control list for an Google Storage bucket.
-
#get_object(bucket_name, object_name, options = {}, &block) ⇒ Object
Get an object from Google Storage.
-
#get_object_acl(bucket_name, object_name, options = {}) ⇒ Object
Get access control list for an Google Storage object.
-
#get_object_torrent(bucket_name, object_name) ⇒ Object
Get torrent for an Google Storage object.
-
#get_object_url(bucket_name, object_name, expires) ⇒ Object
Get an expiring object url from Google Storage.
-
#get_service ⇒ Object
List information about Google Storage buckets for authorized user.
-
#head_object(bucket_name, object_name, options = {}) ⇒ Object
Get headers for an object from Google Storage.
-
#initialize(options = {}) ⇒ Real
constructor
Initialize connection to Google Storage.
-
#put_bucket(bucket_name, options = {}) ⇒ Object
Create an Google Storage bucket.
-
#put_bucket_acl(bucket_name, acl) ⇒ Object
Change access control list for an Google Storage bucket.
-
#put_object(bucket_name, object_name, data, options = {}) ⇒ Object
Create an object in an Google Storage bucket.
- #put_object_acl(bucket_name, object_name, acl) ⇒ Object
-
#put_object_url(bucket_name, object_name, expires, headers = {}) ⇒ Object
Get an expiring object url from Google Storage for putting an object.
- #reload ⇒ Object
- #scope_tag(scope) ⇒ Object
- #signature(params) ⇒ Object
-
#tag(name, value) ⇒ Object
TODO: move this methods to helper to use them with put_bucket_acl request.
Methods included from GetObjectHttpsUrl
Methods included from GetObjectHttpUrl
Methods included from Utils
Constructor Details
#initialize(options = {}) ⇒ Real
Initialize connection to Google Storage
Notes
options parameter must include values for :google_storage_access_key_id and :google_storage_secret_access_key in order to create a connection
Examples
google_storage = Storage.new(
:google_storage_access_key_id => your_google_storage_access_key_id,
:google_storage_secret_access_key => your_google_storage_secret_access_key
)
Parameters
-
options<~Hash> - config arguments for connection. Defaults to {}.
Returns
-
Storage object with connection to google.
213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/fog/google/storage.rb', line 213 def initialize(={}) @google_storage_access_key_id = [:google_storage_access_key_id] @google_storage_secret_access_key = [:google_storage_secret_access_key] @connection_options = [:connection_options] || {} @hmac = Fog::HMAC.new('sha1', @google_storage_secret_access_key) @host = [:host] || 'storage.googleapis.com' @persistent = .fetch(:persistent, true) @port = [:port] || 443 @scheme = [:scheme] || 'https' @path_style = [:path_style] || false end |
Instance Method Details
#connection(scheme, host, port) ⇒ Object
270 271 272 273 274 275 276 277 278 279 280 281 282 |
# File 'lib/fog/google/storage.rb', line 270 def connection(scheme, host, port) uri = "#{scheme}://#{host}:#{port}" if @persistent unless uri == @connection_uri @connection_uri = uri reload @connection = nil end else @connection = nil end @connection ||= Fog::XML::Connection.new(uri, @persistent, @connection_options) end |
#copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {}) ⇒ Object
Copy an object from one Google Storage bucket to another
Parameters
-
source_bucket_name<~String> - Name of source bucket
-
source_object_name<~String> - Name of source object
-
target_bucket_name<~String> - Name of bucket to create copy in
-
target_object_name<~String> - Name for new copy of object
-
options<~Hash>:
-
‘x-goog-metadata-directive’<~String> - Specifies whether to copy metadata from source or replace with data in request. Must be in [‘COPY’, ‘REPLACE’]
-
‘x-goog-copy_source-if-match’<~String> - Copies object if its etag matches this value
-
‘x-goog-copy_source-if-modified_since’<~Time> - Copies object it it has been modified since this time
-
‘x-goog-copy_source-if-none-match’<~String> - Copies object if its etag does not match this value
-
‘x-goog-copy_source-if-unmodified-since’<~Time> - Copies object it it has not been modified since this time
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘ETag’<~String> - etag of new object
-
‘LastModified’<~Time> - date object was last modified
-
-
27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/fog/google/requests/storage/copy_object.rb', line 27 def copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, = {}) headers = { 'x-goog-copy-source' => "/#{source_bucket_name}/#{source_object_name}" }.merge() request({ :expects => 200, :headers => headers, :host => "#{target_bucket_name}.#{@host}", :method => 'PUT', :parser => Fog::Parsers::Storage::Google::CopyObject.new, :path => CGI.escape(target_object_name) }) end |
#delete_bucket(bucket_name) ⇒ Object
Delete an Google Storage bucket
Parameters
-
bucket_name<~String> - name of bucket to delete
Returns
-
response<~Excon::Response>:
-
status<~Integer> - 204
-
13 14 15 16 17 18 19 20 |
# File 'lib/fog/google/requests/storage/delete_bucket.rb', line 13 def delete_bucket(bucket_name) request({ :expects => 204, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'DELETE' }) end |
#delete_object(bucket_name, object_name) ⇒ Object
Delete an object from Google Storage
Parameters
-
bucket_name<~String> - Name of bucket containing object to delete
-
object_name<~String> - Name of object to delete
Returns
-
response<~Excon::Response>:
-
status<~Integer> - 204
-
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/fog/google/requests/storage/delete_object.rb', line 14 def delete_object(bucket_name, object_name) request({ :expects => 204, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'DELETE', :path => CGI.escape(object_name) }) end |
#entries_list(access_control_list) ⇒ Object
50 51 52 53 54 |
# File 'lib/fog/google/requests/storage/put_bucket_acl.rb', line 50 def entries_list(access_control_list) access_control_list.map do |entry| tag('Entry', scope_tag(entry['Scope']) + tag('Permission', entry['Permission'])) end.join("\n") end |
#get_bucket(bucket_name, options = {}) ⇒ Object
List information about objects in an Google Storage bucket
Parameters
-
bucket_name<~String> - name of bucket to list object keys from
-
options<~Hash> - config arguments for list. Defaults to {}.
-
‘delimiter’<~String> - causes keys with the same string between the prefix value and the first occurence of delimiter to be rolled up
-
‘marker’<~String> - limits object keys to only those that appear lexicographically after its value.
-
‘max-keys’<~Integer> - limits number of object keys returned
-
‘prefix’<~String> - limits object keys to those beginning with its value.
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘Delimeter’<~String> - Delimiter specified for query
-
‘IsTruncated’<~Boolean> - Whether or not the listing is truncated
-
‘Marker’<~String> - Marker specified for query
-
‘MaxKeys’<~Integer> - Maximum number of keys specified for query
-
‘Name’<~String> - Name of the bucket
-
‘Prefix’<~String> - Prefix specified for query
-
‘CommonPrefixes’<~Array> - Array of strings for common prefixes
-
‘Contents’<~Array>:
-
‘ETag’<~String>: Etag of object
-
‘Key’<~String>: Name of object
-
‘LastModified’<~String>: Timestamp of last modification of object
-
‘Owner’<~Hash>:
-
‘DisplayName’<~String> - Display name of object owner
-
‘ID’<~String> - Id of object owner
-
-
‘Size’<~Integer> - Size of object
-
-
-
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/fog/google/requests/storage/get_bucket.rb', line 39 def get_bucket(bucket_name, = {}) unless bucket_name raise ArgumentError.new('bucket_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::Google::GetBucket.new, :query => }) end |
#get_bucket_acl(bucket_name) ⇒ Object
Get access control list for an Google Storage bucket
Parameters
-
bucket_name<~String> - name of bucket to get access control list for
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘AccessControlPolicy’<~Hash>
-
‘Owner’<~Hash>:
-
‘DisplayName’<~String> - Display name of object owner
-
‘ID’<~String> - Id of object owner
-
-
‘AccessControlList’<~Array>:
-
‘Grant’<~Hash>:
-
‘Grantee’<~Hash>:
* 'DisplayName'<~String> - Display name of grantee * 'ID'<~String> - Id of grantee
or
* 'URI'<~String> - URI of group to grant access for
-
‘Permission’<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]
-
-
-
-
-
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/fog/google/requests/storage/get_bucket_acl.rb', line 28 def get_bucket_acl(bucket_name) unless bucket_name raise ArgumentError.new('bucket_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::Google::AccessControlList.new, :query => {'acl' => nil} }) end |
#get_object(bucket_name, object_name, options = {}, &block) ⇒ Object
Get an object from Google Storage
Parameters
-
bucket_name<~String> - Name of bucket to read from
-
object_name<~String> - Name of object to read
-
options<~Hash>:
-
‘If-Match’<~String> - Returns object only if its etag matches this value, otherwise returns 412 (Precondition Failed).
-
‘If-Modified-Since’<~Time> - Returns object only if it has been modified since this time, otherwise returns 304 (Not Modified).
-
‘If-None-Match’<~String> - Returns object only if its etag differs from this value, otherwise returns 304 (Not Modified)
-
‘If-Unmodified-Since’<~Time> - Returns object only if it has not been modified since this time, otherwise returns 412 (Precodition Failed).
-
‘Range’<~String> - Range of object to download
-
‘versionId’<~String> - specify a particular version to retrieve
-
Returns
-
response<~Excon::Response>:
-
body<~String> - Contents of object
-
headers<~Hash>:
-
‘Content-Length’<~String> - Size of object contents
-
‘Content-Type’<~String> - MIME type of object
-
‘ETag’<~String> - Etag of object
-
‘Last-Modified’<~String> - Last modified timestamp for object
-
-
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/fog/google/requests/storage/get_object.rb', line 27 def get_object(bucket_name, object_name, = {}, &block) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end params = { :headers => {} } if version_id = .delete('versionId') params[:query] = {'versionId' => version_id} end params[:headers].merge!() if ['If-Modified-Since'] params[:headers]['If-Modified-Since'] = Fog::Time.at(['If-Modified-Since'].to_i).to_date_header end if ['If-Modified-Since'] params[:headers]['If-Unmodified-Since'] = Fog::Time.at(['If-Unmodified-Since'].to_i).to_date_header end if block_given? params[:response_block] = Proc.new end request(params.merge!({ :expects => 200, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :path => CGI.escape(object_name), })) end |
#get_object_acl(bucket_name, object_name, options = {}) ⇒ Object
Get access control list for an Google Storage object
Parameters
-
bucket_name<~String> - name of bucket containing object
-
object_name<~String> - name of object to get access control list for
-
options<~Hash>:
-
‘versionId’<~String> - specify a particular version to retrieve
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘AccessControlPolicy’<~Hash>
-
‘Owner’<~Hash>:
-
‘DisplayName’<~String> - Display name of object owner
-
‘ID’<~String> - Id of object owner
-
-
‘AccessControlList’<~Array>:
-
‘Grant’<~Hash>:
-
‘Grantee’<~Hash>:
* 'DisplayName'<~String> - Display name of grantee * 'ID'<~String> - Id of grantee
or
* 'URI'<~String> - URI of group to grant access for
-
‘Permission’<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]
-
-
-
-
-
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/fog/google/requests/storage/get_object_acl.rb', line 31 def get_object_acl(bucket_name, object_name, = {}) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end query = {'acl' => nil} if version_id = .delete('versionId') query['versionId'] = version_id end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::Google::AccessControlList.new, :path => CGI.escape(object_name), :query => query }) end |
#get_object_torrent(bucket_name, object_name) ⇒ Object
Get torrent for an Google Storage object
Parameters
-
bucket_name<~String> - name of bucket containing object
-
object_name<~String> - name of object to get torrent for
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘AccessControlPolicy’<~Hash>
-
‘Owner’<~Hash>:
-
‘DisplayName’<~String> - Display name of object owner
-
‘ID’<~String> - Id of object owner
-
-
‘AccessControlList’<~Array>:
-
‘Grant’<~Hash>:
-
‘Grantee’<~Hash>:
-
‘DisplayName’<~String> - Display name of grantee
-
‘ID’<~String> - Id of grantee
-
-
‘Permission’<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]
-
-
-
-
-
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/fog/google/requests/storage/get_object_torrent.rb', line 25 def get_object_torrent(bucket_name, object_name) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end request({ :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'GET', :path => CGI.escape(object_name), :query => {'torrent' => nil} }) end |
#get_object_url(bucket_name, object_name, expires) ⇒ Object
Get an expiring object url from Google Storage
Parameters
-
bucket_name<~String> - Name of bucket containing object
-
object_name<~String> - Name of object to get expiring url for
-
expires<~Time> - An expiry time for this url
Returns
-
response<~Excon::Response>:
-
body<~String> - url for object
-
See Also
docs.amazonwebservices.com/AmazonS3/latest/dev/S3_QSAuth.html
19 20 21 22 |
# File 'lib/fog/google/requests/storage/get_object_url.rb', line 19 def get_object_url(bucket_name, object_name, expires) Fog::Logger.deprecation("Fog::Storage::Google => ##{get_object_url} is deprecated, use ##{get_object_https_url} instead[/] [light_black](#{caller.first})") get_object_https_url(bucket_name, object_name, expires) end |
#get_service ⇒ Object
List information about Google Storage buckets for authorized user
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘Buckets’<~Hash>:
-
‘Name’<~String> - Name of bucket
-
‘CreationTime’<~Time> - Timestamp of bucket creation
-
-
‘Owner’<~Hash>:
-
‘DisplayName’<~String> - Display name of bucket owner
-
‘ID’<~String> - Id of bucket owner
-
-
-
18 19 20 21 22 23 24 25 26 27 |
# File 'lib/fog/google/requests/storage/get_service.rb', line 18 def get_service request({ :expects => 200, :headers => {}, :host => @host, :idempotent => true, :method => 'GET', :parser => Fog::Parsers::Storage::Google::GetService.new }) end |
#head_object(bucket_name, object_name, options = {}) ⇒ Object
Get headers for an object from Google Storage
Parameters
-
bucket_name<~String> - Name of bucket to read from
-
object_name<~String> - Name of object to read
-
options<~Hash>:
-
‘If-Match’<~String> - Returns object only if its etag matches this value, otherwise returns 412 (Precondition Failed).
-
‘If-Modified-Since’<~Time> - Returns object only if it has been modified since this time, otherwise returns 304 (Not Modified).
-
‘If-None-Match’<~String> - Returns object only if its etag differs from this value, otherwise returns 304 (Not Modified)
-
‘If-Unmodified-Since’<~Time> - Returns object only if it has not been modified since this time, otherwise returns 412 (Precodition Failed).
-
‘Range’<~String> - Range of object to download
-
‘versionId’<~String> - specify a particular version to retrieve
-
Returns
-
response<~Excon::Response>:
-
body<~String> - Contents of object
-
headers<~Hash>:
-
‘Content-Length’<~String> - Size of object contents
-
‘Content-Type’<~String> - MIME type of object
-
‘ETag’<~String> - Etag of object
-
‘Last-Modified’<~String> - Last modified timestamp for object
-
-
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/fog/google/requests/storage/head_object.rb', line 26 def head_object(bucket_name, object_name, ={}) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end if version_id = .delete('versionId') query = {'versionId' => version_id} end headers = {} headers['If-Modified-Since'] = Fog::Time.at(['If-Modified-Since'].to_i).to_date_header if ['If-Modified-Since'] headers['If-Unmodified-Since'] = Fog::Time.at(['If-Unmodified-Since'].to_i).to_date_header if ['If-Modified-Since'] headers.merge!() request({ :expects => 200, :headers => headers, :host => "#{bucket_name}.#{@host}", :method => 'HEAD', :path => CGI.escape(object_name), :query => query }) end |
#put_bucket(bucket_name, options = {}) ⇒ Object
Create an Google Storage bucket
Parameters
-
bucket_name<~String> - name of bucket to create
-
options<~Hash> - config arguments for bucket. Defaults to {}.
-
‘LocationConstraint’<~Symbol> - sets the location for the bucket
-
‘x-amz-acl’<~String> - Permissions, must be in [‘private’, ‘public-read’, ‘public-read-write’, ‘authenticated-read’]
-
Returns
-
response<~Excon::Response>:
-
status<~Integer> - 200
-
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/fog/google/requests/storage/put_bucket.rb', line 16 def put_bucket(bucket_name, = {}) if location_constraint = .delete('LocationConstraint') data = <<-DATA <CreateBucketConfiguration> <LocationConstraint>#{location_constraint}</LocationConstraint> </CreateBucketConfiguration> DATA else data = nil end request({ :expects => 200, :body => data, :headers => , :idempotent => true, :host => "#{bucket_name}.#{@host}", :method => 'PUT' }) end |
#put_bucket_acl(bucket_name, acl) ⇒ Object
Change access control list for an Google Storage bucket
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/fog/google/requests/storage/put_bucket_acl.rb', line 12 def put_bucket_acl(bucket_name, acl) data = <<-DATA <AccessControlList> <Owner> #{tag('ID', acl['Owner']['ID'])} </Owner> <Entries> #{entries_list(acl['AccessControlList'])} </Entries> </AccessControlList> DATA request({ :body => data, :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :query => {'acl' => nil} }) end |
#put_object(bucket_name, object_name, data, options = {}) ⇒ Object
Create an object in an Google Storage bucket
Parameters
-
bucket_name<~String> - Name of bucket to create object in
-
object_name<~String> - Name of object to create
-
data<~File> - File or String to create object from
-
options<~Hash>:
-
‘Cache-Control’<~String> - Caching behaviour
-
‘Content-Disposition’<~String> - Presentational information for the object
-
‘Content-Encoding’<~String> - Encoding of object data
-
‘Content-Length’<~String> - Size of object in bytes (defaults to object.read.length)
-
‘Content-MD5’<~String> - Base64 encoded 128-bit MD5 digest of message (defaults to Base64 encoded MD5 of object.read)
-
‘Content-Type’<~String> - Standard MIME type describing contents (defaults to MIME::Types.of.first)
-
‘x-goog-acl’<~String> - Permissions, must be in [‘private’, ‘public-read’, ‘public-read-write’, ‘authenticated-read’]
-
“x-goog-meta-#name” - Headers to be returned with object, note total size of request without body must be less than 8 KB.
-
Returns
-
response<~Excon::Response>:
-
headers<~Hash>:
-
‘ETag’<~String> - etag of new object
-
-
25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/fog/google/requests/storage/put_object.rb', line 25 def put_object(bucket_name, object_name, data, = {}) data = Fog::Storage.parse_data(data) headers = data[:headers].merge!() request({ :body => data[:body], :expects => 200, :headers => headers, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'PUT', :path => CGI.escape(object_name) }) end |
#put_object_acl(bucket_name, object_name, acl) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/fog/google/requests/storage/put_object_acl.rb', line 26 def put_object_acl(bucket_name, object_name, acl) data = <<-DATA <AccessControlList> <Owner> #{tag('ID', acl['Owner']['ID'])} </Owner> <Entries> #{entries_list(acl['AccessControlList'])} </Entries> </AccessControlList> DATA request({ :body => data, :expects => 200, :headers => {}, :host => "#{bucket_name}.#{@host}", :method => 'PUT', :query => {'acl' => nil}, :path => CGI.escape(object_name) }) end |
#put_object_url(bucket_name, object_name, expires, headers = {}) ⇒ Object
Get an expiring object url from Google Storage for putting an object
Parameters
-
bucket_name<~String> - Name of bucket containing object
-
object_name<~String> - Name of object to get expiring url for
-
expires<~Time> - An expiry time for this url
Returns
-
response<~Excon::Response>:
-
body<~String> - url for object
-
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/fog/google/requests/storage/put_object_url.rb', line 16 def put_object_url(bucket_name, object_name, expires, headers = {}) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end https_url({ :headers => headers, :host => @host, :method => 'PUT', :path => "#{bucket_name}/#{object_name}" }, expires) end |
#reload ⇒ Object
226 227 228 |
# File 'lib/fog/google/storage.rb', line 226 def reload @connection.reset if @connection end |
#scope_tag(scope) ⇒ Object
40 41 42 43 44 45 46 47 48 |
# File 'lib/fog/google/requests/storage/put_bucket_acl.rb', line 40 def scope_tag(scope) if %w(AllUsers AllAuthenticatedUsers).include?(scope['type']) "<Scope type='#{scope['type']}'/>" else "<Scope type='#{scope['type']}'>" + scope.to_a.select { |pair| pair[0] != 'type' }.map { |pair| tag(pair[0], pair[1]) }.join("\n") + "</Scope>" end end |
#signature(params) ⇒ Object
230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 |
# File 'lib/fog/google/storage.rb', line 230 def signature(params) string_to_sign = <<-DATA #{params[:method]} #{params[:headers]['Content-MD5']} #{params[:headers]['Content-Type']} #{params[:headers]['Date']} DATA google_headers, canonical_google_headers = {}, '' for key, value in params[:headers] if key[0..6] == 'x-goog-' google_headers[key] = value end end google_headers = google_headers.sort {|x, y| x[0] <=> y[0]} for key, value in google_headers canonical_google_headers << "#{key}:#{value}\n" end string_to_sign << "#{canonical_google_headers}" canonical_resource = "/" if subdomain = params.delete(:subdomain) canonical_resource << "#{CGI.escape(subdomain).downcase}/" end canonical_resource << "#{params[:path]}" canonical_resource << '?' for key in (params[:query] || {}).keys if ['acl', 'cors', 'location', 'logging', 'requestPayment', 'torrent', 'versions', 'versioning'].include?(key) canonical_resource << "#{key}&" end end canonical_resource.chop! string_to_sign << "#{canonical_resource}" signed_string = @hmac.sign(string_to_sign) Base64.encode64(signed_string).chomp! end |
#tag(name, value) ⇒ Object
TODO: move this methods to helper to use them with put_bucket_acl request
6 7 8 |
# File 'lib/fog/google/requests/storage/put_object_acl.rb', line 6 def tag(name, value) "<#{name}>#{value}</#{name}>" end |