diff --git a/lib/fog/rackspace/models/storage/directory.rb b/lib/fog/rackspace/models/storage/directory.rb index 630968df2..57dcd5085 100644 --- a/lib/fog/rackspace/models/storage/directory.rb +++ b/lib/fog/rackspace/models/storage/directory.rb @@ -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 diff --git a/lib/fog/rackspace/models/storage/metadata.rb b/lib/fog/rackspace/models/storage/metadata.rb index 1668e2405..9a8dc7ef1 100644 --- a/lib/fog/rackspace/models/storage/metadata.rb +++ b/lib/fog/rackspace/models/storage/metadata.rb @@ -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 diff --git a/tests/rackspace/models/storage/directories_tests.rb b/tests/rackspace/models/storage/directories_tests.rb index 7a4b30aab..acb5ee773 100644 --- a/tests/rackspace/models/storage/directories_tests.rb +++ b/tests/rackspace/models/storage/directories_tests.rb @@ -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 diff --git a/tests/rackspace/models/storage/directory_tests.rb b/tests/rackspace/models/storage/directory_tests.rb index 50ccbc585..851795bd8 100644 --- a/tests/rackspace/models/storage/directory_tests.rb +++ b/tests/rackspace/models/storage/directory_tests.rb @@ -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