Class: Fog::Storage::Google::Mock
- Inherits:
-
Object
- Object
- Fog::Storage::Google::Mock
- Includes:
- GetObjectHttpUrl, GetObjectHttpsUrl, Utils
- Defined in:
- lib/fog/google/requests/storage/get_object_url.rb,
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_object_acl.rb,
lib/fog/google/requests/storage/put_object_url.rb,
lib/fog/google/requests/storage/get_object_http_url.rb,
lib/fog/google/requests/storage/get_object_https_url.rb more...
Overview
:nodoc:all
Class Method Summary collapse
Instance Method Summary collapse
- #copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {}) ⇒ Object
- #data ⇒ Object
- #delete_bucket(bucket_name) ⇒ Object
- #delete_object(bucket_name, object_name) ⇒ Object
- #get_bucket(bucket_name, options = {}) ⇒ Object
- #get_object(bucket_name, object_name, options = {}, &block) ⇒ Object
- #get_object_acl(bucket_name, object_name) ⇒ Object
- #get_object_url(bucket_name, object_name, expires) ⇒ Object
- #get_service ⇒ Object
- #head_object(bucket_name, object_name, options = {}) ⇒ Object
-
#initialize(options = {}) ⇒ Mock
constructor
A new instance of Mock.
- #put_bucket(bucket_name, options = {}) ⇒ Object
- #put_object(bucket_name, object_name, data, options = {}) ⇒ Object
- #put_object_url(bucket_name, object_name, expires, headers = {}) ⇒ Object
- #reset_data ⇒ Object
- #signature(params) ⇒ Object
Methods included from GetObjectHttpsUrl
Methods included from GetObjectHttpUrl
Methods included from Utils
Constructor Details
permalink #initialize(options = {}) ⇒ Mock
Returns a new instance of Mock.
146 147 148 149 |
# File 'lib/fog/google/storage.rb', line 146 def initialize(={}) require 'mime/types' @google_storage_access_key_id = [:google_storage_access_key_id] end |
Class Method Details
permalink .acls(type) ⇒ Object
[View source]
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 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 |
# File 'lib/fog/google/storage.rb', line 69 def self.acls(type) case type when 'private' { "AccessControlList"=> [ { "Permission" => "FULL_CONTROL", "Scope" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0", "type" => "UserById"} } ], "Owner" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} } when 'public-read' { "AccessControlList"=> [ { "Permission" => "FULL_CONTROL", "Scope" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0", "type" => "UserById"} }, { "Permission" => "READ", "Scope" => {"type" => "AllUsers"} } ], "Owner" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} } when 'public-read-write' { "AccessControlList"=> [ { "Permission" => "FULL_CONTROL", "Scope" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0", "type" => "UserById"} }, { "Permission" => "READ", "Scope" => {"type" => "AllUsers"} }, { "Permission" => "WRITE", "Scope" => {"type" => "AllUsers"} } ], "Owner" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} } when 'authenticated-read' { "AccessControlList"=> [ { "Permission" => "FULL_CONTROL", "Scope" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0", "type" => "UserById"} }, { "Permission" => "READ", "Scope" => {"type" => "AllAuthenticatedUsers"} } ], "Owner" => {"ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} } end end |
permalink .data ⇒ Object
[View source]
130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/fog/google/storage.rb', line 130 def self.data @data ||= Hash.new do |hash, key| hash[key] = { :acls => { :bucket => {}, :object => {} }, :buckets => {} } end end |
permalink .reset ⇒ Object
[View source]
142 143 144 |
# File 'lib/fog/google/storage.rb', line 142 def self.reset @data = nil end |
Instance Method Details
permalink #copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {}) ⇒ Object
[View source]
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/fog/google/requests/storage/copy_object.rb', line 44 def copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, = {}) response = Excon::Response.new source_bucket = self.data[:buckets][source_bucket_name] source_object = source_bucket && source_bucket[:objects][source_object_name] target_bucket = self.data[:buckets][target_bucket_name] if source_object && target_bucket response.status = 200 target_object = source_object.dup target_object.merge!({ 'Name' => target_object_name }) target_bucket[:objects][target_object_name] = target_object response.body = { 'ETag' => target_object['ETag'], 'LastModified' => Time.parse(target_object['Last-Modified']) } else response.status = 404 raise(Excon::Errors.status_error({:expects => 200}, response)) end response end |
permalink #data ⇒ Object
[View source]
151 152 153 |
# File 'lib/fog/google/storage.rb', line 151 def data self.class.data[@google_storage_access_key_id] end |
permalink #delete_bucket(bucket_name) ⇒ Object
[View source]
27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/fog/google/requests/storage/delete_bucket.rb', line 27 def delete_bucket(bucket_name) response = Excon::Response.new if self.data[:buckets][bucket_name].nil? response.status = 404 raise(Excon::Errors.status_error({:expects => 204}, response)) elsif self.data[:buckets][bucket_name] && !self.data[:buckets][bucket_name][:objects].empty? response.status = 409 raise(Excon::Errors.status_error({:expects => 204}, response)) else self.data[:buckets].delete(bucket_name) response.status = 204 end response end |
permalink #delete_object(bucket_name, object_name) ⇒ Object
[View source]
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/fog/google/requests/storage/delete_object.rb', line 30 def delete_object(bucket_name, object_name) response = Excon::Response.new if bucket = self.data[:buckets][bucket_name] if object = bucket[:objects][object_name] response.status = 204 bucket[:objects].delete(object_name) else response.status = 404 raise(Excon::Errors.status_error({:expects => 204}, response)) end else response.status = 404 raise(Excon::Errors.status_error({:expects => 204}, response)) end response end |
permalink #get_bucket(bucket_name, options = {}) ⇒ Object
[View source]
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/fog/google/requests/storage/get_bucket.rb', line 59 def get_bucket(bucket_name, = {}) unless bucket_name raise ArgumentError.new('bucket_name is required') end response = Excon::Response.new name = /(\w+\.?)*/.match(bucket_name) if bucket_name == name.to_s if bucket = self.data[:buckets][bucket_name] contents = bucket[:objects].values.sort {|x,y| x['Key'] <=> y['Key']}.reject do |object| (['prefix'] && object['Key'][0...['prefix'].length] != ['prefix']) || (['marker'] && object['Key'] <= ['marker']) end.map do |object| data = object.reject {|key, value| !['ETag', 'Key'].include?(key)} data.merge!({ 'LastModified' => Time.parse(object['Last-Modified']), 'Owner' => bucket['Owner'], 'Size' => object['Content-Length'].to_i }) data end max_keys = ['max-keys'] || 1000 size = [max_keys, 1000].min truncated_contents = contents[0...size] response.status = 200 response.body = { 'CommonPrefixes' => [], 'Contents' => truncated_contents, 'IsTruncated' => truncated_contents.size != contents.size, 'Marker' => ['marker'], 'Name' => bucket['Name'], 'Prefix' => ['prefix'] } if ['max-keys'] && ['max-keys'] < response.body['Contents'].length response.body['IsTruncated'] = true response.body['Contents'] = response.body['Contents'][0...['max-keys']] end else response.status = 404 raise(Excon::Errors.status_error({:expects => 200}, response)) end else response.status = 400 raise(Excon::Errors.status_error({:expects => 200}, response)) end response end |
permalink #get_object(bucket_name, object_name, options = {}, &block) ⇒ Object
[View source]
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/fog/google/requests/storage/get_object.rb', line 65 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 response = Excon::Response.new if (bucket = self.data[:buckets][bucket_name]) && (object = bucket[:objects][object_name]) if ['If-Match'] && ['If-Match'] != object['ETag'] response.status = 412 elsif ['If-Modified-Since'] && ['If-Modified-Since'] > Time.parse(object['Last-Modified']) response.status = 304 elsif ['If-None-Match'] && ['If-None-Match'] == object['ETag'] response.status = 304 elsif ['If-Unmodified-Since'] && ['If-Unmodified-Since'] < Time.parse(object['Last-Modified']) response.status = 412 else response.status = 200 for key, value in object case key when 'Cache-Control', 'Content-Disposition', 'Content-Encoding', 'Content-Length', 'Content-MD5', 'Content-Type', 'ETag', 'Expires', 'Last-Modified', /^x-goog-meta-/ response.headers[key] = value end end unless block_given? response.body = object[:body] else data = StringIO.new(object[:body]) remaining = data.length while remaining > 0 chunk = data.read([remaining, Excon::CHUNK_SIZE].min) block.call(chunk) remaining -= Excon::CHUNK_SIZE end end end else response.status = 404 raise(Excon::Errors.status_error({:expects => 200}, response)) end response end |
permalink #get_object_acl(bucket_name, object_name) ⇒ Object
[View source]
59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/fog/google/requests/storage/get_object_acl.rb', line 59 def get_object_acl(bucket_name, object_name) response = Excon::Response.new if acl = self.data[:acls][:object][bucket_name] && self.data[:acls][:object][bucket_name][object_name] response.status = 200 response.body = acl else response.status = 404 raise(Excon::Errors.status_error({:expects => 200}, response)) end response end |
permalink #get_object_url(bucket_name, object_name, expires) ⇒ Object
[View source]
29 30 31 32 |
# File 'lib/fog/google/requests/storage/get_object_url.rb', line 29 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 |
permalink #get_service ⇒ Object
[View source]
35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/fog/google/requests/storage/get_service.rb', line 35 def get_service response = Excon::Response.new response.headers['Status'] = 200 buckets = self.data[:buckets].values.map do |bucket| bucket.reject do |key, value| !['CreationDate', 'Name'].include?(key) end end response.body = { 'Buckets' => buckets, 'Owner' => { 'ID' => 'some_id'} } response end |
permalink #head_object(bucket_name, object_name, options = {}) ⇒ Object
[View source]
55 56 57 58 59 |
# File 'lib/fog/google/requests/storage/head_object.rb', line 55 def head_object(bucket_name, object_name, = {}) response = get_object(bucket_name, object_name, ) response.body = nil response end |
permalink #put_bucket(bucket_name, options = {}) ⇒ Object
[View source]
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/fog/google/requests/storage/put_bucket.rb', line 42 def put_bucket(bucket_name, = {}) acl = ['x-goog-acl'] || 'private' if !['private', 'public-read', 'public-read-write', 'authenticated-read'].include?(acl) raise Excon::Errors::BadRequest.new('invalid x-goog-acl') else self.data[:acls][:bucket][bucket_name] = self.class.acls([acl]) end response = Excon::Response.new response.status = 200 bucket = { :objects => {}, 'Name' => bucket_name, 'CreationDate' => Time.now, 'Owner' => { 'DisplayName' => 'owner', 'ID' => 'some_id'}, 'Payer' => 'BucketOwner' } if ['LocationConstraint'] bucket['LocationConstraint'] = ['LocationConstraint'] else bucket['LocationConstraint'] = '' end if self.data[:buckets][bucket_name].nil? self.data[:buckets][bucket_name] = bucket else response.status = 409 raise(Excon::Errors.status_error({:expects => 200}, response)) end response end |
permalink #put_object(bucket_name, object_name, data, options = {}) ⇒ Object
[View source]
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/fog/google/requests/storage/put_object.rb', line 44 def put_object(bucket_name, object_name, data, = {}) acl = ['x-goog-acl'] || 'private' if !['private', 'public-read', 'public-read-write', 'authenticated-read'].include?(acl) raise Excon::Errors::BadRequest.new('invalid x-goog-acl') else self.data[:acls][:object][bucket_name] ||= {} self.data[:acls][:object][bucket_name][object_name] = self.class.acls(acl) end data = Fog::Storage.parse_data(data) unless data[:body].is_a?(String) data[:body] = data[:body].read end response = Excon::Response.new if (bucket = self.data[:buckets][bucket_name]) response.status = 200 object = { :body => data[:body], 'Content-Type' => ['Content-Type'] || data[:headers]['Content-Type'], 'ETag' => Fog::Google::Mock.etag, 'Key' => object_name, 'Last-Modified' => Fog::Time.now.to_date_header, 'Content-Length' => ['Content-Length'] || data[:headers]['Content-Length'] } for key, value in case key when 'Cache-Control', 'Content-Disposition', 'Content-Encoding', 'Content-MD5', 'Expires', /^x-goog-meta-/ object[key] = value end end bucket[:objects][object_name] = object response.headers = { 'Content-Length' => object['Content-Length'], 'Content-Type' => object['Content-Type'], 'ETag' => object['ETag'], 'Last-Modified' => object['Last-Modified'] } else response.status = 404 raise(Excon::Errors.status_error({:expects => 200}, response)) end response end |
permalink #put_object_url(bucket_name, object_name, expires, headers = {}) ⇒ Object
[View source]
36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/fog/google/requests/storage/put_object_url.rb', line 36 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 |
permalink #reset_data ⇒ Object
[View source]
155 156 157 |
# File 'lib/fog/google/storage.rb', line 155 def reset_data self.class.data.delete(@google_storage_access_key_id) end |
permalink #signature(params) ⇒ Object
[View source]
159 160 161 |
# File 'lib/fog/google/storage.rb', line 159 def signature(params) "foo" end |