summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Wolfe <jes5199@gmail.com>2010-07-13 14:01:24 -0700
committerMarkus Roberts <Markus@reality.com>2010-07-13 23:09:36 -0700
commit2edf7fe968ac3d8af9865f65100940747c1fa894 (patch)
treeaf448dd1b48af1b75421e56f3f1bb68f86284ca9
parent27d5a4782c442908c71bb9abac9f78654581eacf (diff)
downloadpuppet-2edf7fe968ac3d8af9865f65100940747c1fa894.tar.gz
puppet-2edf7fe968ac3d8af9865f65100940747c1fa894.tar.xz
puppet-2edf7fe968ac3d8af9865f65100940747c1fa894.zip
[#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.
-rw-r--r--lib/puppet/resource.rb17
-rwxr-xr-xspec/unit/resource_spec.rb7
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