Class: Fog::Google::Storage::Mock
- Inherits:
- 
      Object
      
        - Object
- Fog::Google::Storage::Mock
 
- Includes:
- Utils
- Defined in:
- lib/fog/storage/google.rb,
 lib/fog/storage/requests/google/get_bucket.rb,
 lib/fog/storage/requests/google/get_object.rb,
 lib/fog/storage/requests/google/put_bucket.rb,
 lib/fog/storage/requests/google/put_object.rb,
 lib/fog/storage/requests/google/copy_object.rb,
 lib/fog/storage/requests/google/get_service.rb,
 lib/fog/storage/requests/google/head_object.rb,
 lib/fog/storage/requests/google/delete_bucket.rb,
 lib/fog/storage/requests/google/delete_object.rb,
 lib/fog/storage/requests/google/get_bucket_acl.rb,
 lib/fog/storage/requests/google/get_object_acl.rb,
 lib/fog/storage/requests/google/get_object_url.rb,
 lib/fog/storage/requests/google/put_bucket_acl.rb,
 lib/fog/storage/requests/google/put_object_url.rb,
 lib/fog/storage/requests/google/get_object_torrent.rb
Class Method Summary collapse
Instance Method Summary collapse
- #copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {}) ⇒ Object
- #delete_bucket(bucket_name) ⇒ Object
- #delete_object(bucket_name, object_name) ⇒ Object
- #get_bucket(bucket_name, options = {}) ⇒ Object
- #get_bucket_acl(bucket_name) ⇒ Object
- #get_object(bucket_name, object_name, options = {}, &block) ⇒ Object
- #get_object_acl(bucket_name, object_name) ⇒ Object
- #get_object_object(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_bucket_acl(bucket_name, acl) ⇒ Object
- #put_object(bucket_name, object_name, data, options = {}) ⇒ Object
- #put_object_url(bucket_name, object_name, expires) ⇒ Object
- #signature(params) ⇒ Object
Methods included from Utils
Constructor Details
#initialize(options = {}) ⇒ Mock
Returns a new instance of Mock.
| 149 150 151 152 153 154 155 156 157 158 159 160 | # File 'lib/fog/storage/google.rb', line 149 def initialize(={}) unless .delete(:provider) location = caller.first warning = "[yellow][WARN] Fog::Google::Storage.new is deprecated, use Fog::Storage.new(:provider => 'Google') instead[/]" warning << " [light_black](" << location << ")[/] " Formatador.display_line(warning) end require 'mime/types' @google_storage_access_key_id = [:google_storage_access_key_id] @data = self.class.data[@google_storage_access_key_id] end | 
Class Method Details
.acls(type) ⇒ Object
| 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 129 | # File 'lib/fog/storage/google.rb', line 70 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 | 
.data ⇒ Object
| 131 132 133 134 135 136 137 138 139 140 141 | # File 'lib/fog/storage/google.rb', line 131 def self.data @data ||= Hash.new do |hash, key| hash[key] = { :acls => { :bucket => {}, :object => {} }, :buckets => {} } end end | 
.reset_data(keys = data.keys) ⇒ Object
| 143 144 145 146 147 | # File 'lib/fog/storage/google.rb', line 143 def self.reset_data(keys=data.keys) for key in [*keys] data.delete(key) end end | 
Instance Method Details
#copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {}) ⇒ Object
| 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/storage/requests/google/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 = @data[:buckets][source_bucket_name] source_object = source_bucket && source_bucket[:objects][source_object_name] target_bucket = @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['LastModified']) } else response.status = 404 raise(Excon::Errors.status_error({:expects => 200}, response)) end response end | 
#delete_bucket(bucket_name) ⇒ Object
| 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | # File 'lib/fog/storage/requests/google/delete_bucket.rb', line 27 def delete_bucket(bucket_name) response = Excon::Response.new if @data[:buckets][bucket_name].nil? response.status = 404 raise(Excon::Errors.status_error({:expects => 204}, response)) elsif @data[:buckets][bucket_name] && !@data[:buckets][bucket_name][:objects].empty? response.status = 409 raise(Excon::Errors.status_error({:expects => 204}, response)) else @data[:buckets].delete(bucket_name) response.status = 204 end response end | 
#delete_object(bucket_name, object_name) ⇒ Object
| 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | # File 'lib/fog/storage/requests/google/delete_object.rb', line 30 def delete_object(bucket_name, object_name) response = Excon::Response.new if bucket = @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 | 
#get_bucket(bucket_name, options = {}) ⇒ Object
| 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 106 | # File 'lib/fog/storage/requests/google/get_bucket.rb', line 60 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 = @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', 'LastModified', 'Size', 'StorageClass'].include?(key)} data.merge!({ 'LastModified' => Time.parse(data['LastModified']), 'Owner' => bucket['Owner'], 'Size' => data['Size'].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 | 
#get_bucket_acl(bucket_name) ⇒ Object
| 48 49 50 51 52 53 54 55 56 57 58 | # File 'lib/fog/storage/requests/google/get_bucket_acl.rb', line 48 def get_bucket_acl(bucket_name) response = Excon::Response.new if acl = @data[:acls][:bucket][bucket_name] response.status = 200 response.body = acl else response.status = 404 raise(Excon::Errors.status_error({:expects => 200}, response)) end response end | 
#get_object(bucket_name, object_name, options = {}, &block) ⇒ Object
| 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 89 90 91 92 93 94 95 96 97 98 99 | # File 'lib/fog/storage/requests/google/get_object.rb', line 57 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 = @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['LastModified']) 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['LastModified']) response.status = 412 else response.status = 200 response.headers = { 'Content-Length' => object['Size'], 'Content-Type' => object['Content-Type'], 'ETag' => object['ETag'], 'Last-Modified' => object['LastModified'] } 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 | 
#get_object_acl(bucket_name, object_name) ⇒ Object
| 59 60 61 62 63 64 65 66 67 68 69 | # File 'lib/fog/storage/requests/google/get_object_acl.rb', line 59 def get_object_acl(bucket_name, object_name) response = Excon::Response.new if acl = @data[:acls][:object][bucket_name] && @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 | 
#get_object_object(bucket_name, object_name) ⇒ Object
| 48 49 50 | # File 'lib/fog/storage/requests/google/get_object_torrent.rb', line 48 def get_object_object(bucket_name, object_name) Fog::Mock.not_implemented end | 
#get_object_url(bucket_name, object_name, expires) ⇒ Object
| 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | # File 'lib/fog/storage/requests/google/get_object_url.rb', line 36 def get_object_url(bucket_name, object_name, expires) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end url({ :headers => {}, :host => @host, :method => 'GET', :path => "#{bucket_name}/#{object_name}" }, expires) end | 
#get_service ⇒ Object
| 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | # File 'lib/fog/storage/requests/google/get_service.rb', line 35 def get_service response = Excon::Response.new response.headers['Status'] = 200 buckets = @data[:buckets].values.map do |bucket| bucket.reject do |key, value| !['CreationDate', 'Name'].include?(key) end end response.body = { 'Buckets' => buckets, 'Owner' => { 'DisplayName' => 'owner', 'ID' => 'some_id'} } response end | 
#head_object(bucket_name, object_name, options = {}) ⇒ Object
| 55 56 57 58 59 | # File 'lib/fog/storage/requests/google/head_object.rb', line 55 def head_object(bucket_name, object_name, = {}) response = get_object(bucket_name, object_name, ) response.body = nil response end | 
#put_bucket(bucket_name, options = {}) ⇒ Object
| 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/storage/requests/google/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 @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 @data[:buckets][bucket_name].nil? @data[:buckets][bucket_name] = bucket else response.status = 409 raise(Excon::Errors.status_error({:expects => 200}, response)) end response end | 
#put_bucket_acl(bucket_name, acl) ⇒ Object
| 74 75 76 | # File 'lib/fog/storage/requests/google/put_bucket_acl.rb', line 74 def put_bucket_acl(bucket_name, acl) Fog::Mock.not_implemented end | 
#put_object(bucket_name, object_name, data, options = {}) ⇒ Object
| 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 | # File 'lib/fog/storage/requests/google/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 @data[:acls][:object][bucket_name] ||= {} @data[:acls][:object][bucket_name][object_name] = self.class.acls(acl) end data = parse_data(data) unless data[:body].is_a?(String) data[:body] = data[:body].read end response = Excon::Response.new if (bucket = @data[:buckets][bucket_name]) response.status = 200 object = { :body => data[:body], 'Content-Type' => data[:headers]['Content-Type'], 'ETag' => Fog::Google::Mock.etag, 'Key' => object_name, 'LastModified' => Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000"), 'Size' => data[:headers]['Content-Length'], 'StorageClass' => 'STANDARD' } bucket[:objects][object_name] = object response.headers = { 'Content-Length' => object['Size'], 'Content-Type' => object['Content-Type'], 'ETag' => object['ETag'], 'Last-Modified' => object['LastModified'] } else response.status = 404 raise(Excon::Errors.status_error({:expects => 200}, response)) end response end | 
#put_object_url(bucket_name, object_name, expires) ⇒ Object
| 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | # File 'lib/fog/storage/requests/google/put_object_url.rb', line 36 def put_object_url(bucket_name, object_name, expires) unless bucket_name raise ArgumentError.new('bucket_name is required') end unless object_name raise ArgumentError.new('object_name is required') end url({ :headers => {}, :host => @host, :method => 'PUT', :path => "#{bucket_name}/#{object_name}" }, expires) end | 
#signature(params) ⇒ Object
| 162 163 164 | # File 'lib/fog/storage/google.rb', line 162 def signature(params) "foo" end |