mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
[rackspace|storage] updated directory to lazy load metadata when necessary
This commit is contained in:
parent
6089fe027c
commit
abb8b8acda
4 changed files with 19 additions and 7 deletions
|
@ -24,7 +24,11 @@ module Fog
|
|||
end
|
||||
|
||||
def metadata
|
||||
@metadata ||= Fog::Storage::Rackspace::Metadata.new
|
||||
unless @metadata
|
||||
response = service.head_container(key)
|
||||
@metadata = Fog::Storage::Rackspace::Metadata.from_headers(response.headers)
|
||||
end
|
||||
@metadata
|
||||
end
|
||||
|
||||
def destroy
|
||||
|
@ -72,7 +76,8 @@ module Fog
|
|||
|
||||
def save
|
||||
requires :key
|
||||
service.put_container(key, metadata.to_headers)
|
||||
headers = @metadata.nil? ? {} : metadata.to_headers
|
||||
service.put_container(key, headers)
|
||||
|
||||
if service.cdn && public?
|
||||
# if public and CDN connection then update cdn to public
|
||||
|
|
|
@ -42,7 +42,7 @@ module Fog
|
|||
headers.each_pair do |k, v|
|
||||
key = Metadata.to_key(k)
|
||||
next unless key
|
||||
metadata.data[key] = v
|
||||
metadata.data[key] = Fog::JSON.decode(v)
|
||||
end
|
||||
metadata
|
||||
end
|
||||
|
|
|
@ -14,13 +14,13 @@ Shindo.tests('Fog::Rackspace::Storage | directories', ['rackspace']) do
|
|||
tests('#get').succeeds do
|
||||
instance = @service.directories.get @name
|
||||
returns(false) { instance.nil? }
|
||||
returns('true') { instance.metadata[:fog_test] }
|
||||
returns(true) { instance.metadata[:fog_test] }
|
||||
returns(@name) { instance.key }
|
||||
returns(1) { instance.count }
|
||||
returns( Fog::Storage.get_body_size(lorem_file)) {instance.bytes }
|
||||
returns(@filename) { instance.files.first.key }
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
ensure
|
||||
@file.destroy if @file
|
||||
@dir.destroy if @dir
|
||||
|
|
|
@ -41,7 +41,14 @@ Shindo.tests('Fog::Rackspace::Storage | directory', ['rackspace']) do
|
|||
@instance.metadata.delete(:draft)
|
||||
@instance.save
|
||||
container_meta_attributes
|
||||
end
|
||||
end
|
||||
|
||||
tests('should retrieve metadata when necessary') do
|
||||
@service.put_container(@instance.key, {"X-Container-Meta-List-Test"=>"true"} )
|
||||
dir = @service.directories.find {|d| d.key == @instance.key }
|
||||
returns(nil) { dir.instance_variable_get("@metadata") }
|
||||
returns(true) { dir.metadata[:list_test] }
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue