summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Murawski <steven.murawski@gmail.com>2016-02-03 12:46:49 -0600
committerSteven Murawski <steven.murawski@gmail.com>2016-02-03 12:46:49 -0600
commitc5edc180e54629be30cd7ae228323bf2d218663d (patch)
tree74156c02011e38e08b04de225d5bca8be432e5ff
parent84bdd582a13a90e01a4fdb41bbd6aaae34806719 (diff)
downloadchef-c5edc180e54629be30cd7ae228323bf2d218663d.tar.gz
Allow PowerShellTypeCoercions to translate Chef::Node::ImmutableMash
-rw-r--r--lib/chef/mixin/powershell_type_coercions.rb1
-rw-r--r--spec/unit/mixin/powershell_type_coercions_spec.rb24
2 files changed, 16 insertions, 9 deletions
diff --git a/lib/chef/mixin/powershell_type_coercions.rb b/lib/chef/mixin/powershell_type_coercions.rb
index 9076b1ce3e..e9fa6b74ac 100644
--- a/lib/chef/mixin/powershell_type_coercions.rb
+++ b/lib/chef/mixin/powershell_type_coercions.rb
@@ -28,6 +28,7 @@ class Chef
FalseClass => { :type => lambda { |x| "$false" }},
TrueClass => { :type => lambda { |x| "$true" }},
Hash => {:type => Proc.new { |x| translate_hash(x)}},
+ Chef::Node::ImmutableMash => {:type => Proc.new { |x| translate_hash(x)}},
Array => {:type => Proc.new { |x| translate_array(x)}},
}
end
diff --git a/spec/unit/mixin/powershell_type_coercions_spec.rb b/spec/unit/mixin/powershell_type_coercions_spec.rb
index 846381eb53..c1184cce7c 100644
--- a/spec/unit/mixin/powershell_type_coercions_spec.rb
+++ b/spec/unit/mixin/powershell_type_coercions_spec.rb
@@ -28,42 +28,48 @@ describe Chef::Mixin::PowershellTypeCoercions do
let (:test_class) { Chef::PSTypeTester.new }
describe '#translate_type' do
- it "should single quote a string" do
+ it "single quotes a string" do
expect(test_class.translate_type("foo")).to eq("'foo'")
end
["'", '"', '#', "`"].each do |c|
- it "should base64 encode a string that contains #{c}" do
+ it "base64 encodes a string that contains #{c}" do
expect(test_class.translate_type("#{c}")).to match(Base64.strict_encode64(c))
end
end
- it "should not quote an integer" do
+ it "does not quote an integer" do
expect(test_class.translate_type(123)).to eq("123")
end
- it "should not quote a floating point number" do
+ it "does not quote a floating point number" do
expect(test_class.translate_type(123.4)).to eq("123.4")
end
- it "should return $false when an instance of FalseClass is provided" do
+ it "translates $false when an instance of FalseClass is provided" do
expect(test_class.translate_type(false)).to eq("$false")
end
- it "should return $true when an instance of TrueClass is provided" do
+ it "translates $true when an instance of TrueClass is provided" do
expect(test_class.translate_type(true)).to eq("$true")
end
- it "should translate all members of a hash and wrap them in @{} separated by ;" do
+ it "translates all members of a hash and wrap them in @{} separated by ;" do
expect(test_class.translate_type({"a" => 1, "b" => 1.2, "c" => false, "d" => true
})).to eq("@{a=1;b=1.2;c=$false;d=$true}")
end
- it "should translat all members of an array and them by a ," do
+ it "translates all members of an array and them by a ," do
expect(test_class.translate_type([true, false])).to eq("@($true,$false)")
end
+
+ it "translates a Chef::Node::ImmutableMash like a hash" do
+ test_mash = Chef::Node::ImmutableMash.new({"a" => 1, "b" => 1.2,
+ "c" => false, "d" => true})
+ expect(test_class.translate_type(test_mash)).to eq("@{a=1;b=1.2;c=$false;d=$true}")
+ end
- it "should fall back :to_psobject if we have not defined at explicit rule" do
+ it "falls back :to_psobject if we have not defined at explicit rule" do
ps_obj = double("PSObject")
expect(ps_obj).to receive(:to_psobject).and_return("$true")
expect(test_class.translate_type(ps_obj)).to eq("($true)")