summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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