From 2edf7fe968ac3d8af9865f65100940747c1fa894 Mon Sep 17 00:00:00 2001 From: Jesse Wolfe Date: Tue, 13 Jul 2010 14:01:24 -0700 Subject: [#3656] Serializing arrays of references My previous fix for #3656 missed the case where a "require" attribute (or other graph-ish attribute) had multiple values. This patch generalizes that fix to the multiple-value case. --- lib/puppet/resource.rb | 17 ++++++++++++----- spec/unit/resource_spec.rb | 7 +++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/puppet/resource.rb b/lib/puppet/resource.rb index 9894f2f9e..31237e3b1 100644 --- a/lib/puppet/resource.rb +++ b/lib/puppet/resource.rb @@ -60,11 +60,8 @@ class Puppet::Resource # Don't duplicate the title as the namevar next hash if param == namevar and value == title - if value.is_a? Puppet::Resource - hash[param] = value.to_s - else - hash[param] = value - end + + hash[param] = Puppet::Resource.value_to_pson_data(value) hash end @@ -73,6 +70,16 @@ class Puppet::Resource data end + def self.value_to_pson_data(value) + if value.is_a? Array + value.map{|v| value_to_pson_data(v) } + elsif value.is_a? Puppet::Resource + value.to_s + else + value + end + end + def to_pson(*args) to_pson_data_hash.to_pson(*args) end diff --git a/spec/unit/resource_spec.rb b/spec/unit/resource_spec.rb index aff3816c2..95f0dd04b 100755 --- a/spec/unit/resource_spec.rb +++ b/spec/unit/resource_spec.rb @@ -687,6 +687,13 @@ describe Puppet::Resource do result = Puppet::Resource.from_pson(PSON.parse(resource.to_pson)) result[:requires].should == "File[/bar]" end + + it "should serialize multiple relationships as arrays of reference strings" do + resource = Puppet::Resource.new("File", "/foo") + resource[:requires] = [Puppet::Resource.new("File", "/bar"), Puppet::Resource.new("File", "/baz")] + result = Puppet::Resource.from_pson(PSON.parse(resource.to_pson)) + result[:requires].should == [ "File[/bar]", "File[/baz]" ] + end end describe "when converting from pson" do -- cgit