From 792bcd478abd1076691047a9e4ea54c3535fe7b8 Mon Sep 17 00:00:00 2001 From: Henrik Lindberg <563066+hlindberg@users.noreply.github.com> Date: Sat, 8 Sep 2018 12:09:54 +0200 Subject: [PATCH] (MODULES-7768) Handle nil in delete_undef_values() function PUP-9112 changed use of `:undef` inside structured values to instead using `nil` in Puppet 6.0.0. The `delete_undef_values()` function was not prepared to handle this and would not delete `nil` from `Array` or `Hash` values. This commit fixes this problem. --- lib/puppet/parser/functions/delete_undef_values.rb | 3 ++- spec/functions/delete_undef_values_spec.rb | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/puppet/parser/functions/delete_undef_values.rb b/lib/puppet/parser/functions/delete_undef_values.rb index b41b5f236..9e0408299 100644 --- a/lib/puppet/parser/functions/delete_undef_values.rb +++ b/lib/puppet/parser/functions/delete_undef_values.rb @@ -30,9 +30,10 @@ module Puppet::Parser::Functions end result = args[0].dup if result.is_a?(Hash) - result.delete_if { |_key, val| val.equal? :undef } + result.delete_if { |_, val| val.equal?(:undef) || val.nil? } elsif result.is_a?(Array) result.delete :undef + result.delete nil end result end diff --git a/spec/functions/delete_undef_values_spec.rb b/spec/functions/delete_undef_values_spec.rb index be0ebfc88..720a55c8f 100644 --- a/spec/functions/delete_undef_values_spec.rb +++ b/spec/functions/delete_undef_values_spec.rb @@ -12,7 +12,6 @@ describe "when undef is represented by #{undef_value.inspect}" do before(:each) do pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value == '' - pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value.nil? end it { is_expected.to run.with_params([undef_value]).and_return([]) } it { is_expected.to run.with_params(['one', undef_value, 'two', 'three']).and_return(['one', 'two', 'three']) } @@ -35,7 +34,6 @@ describe "when undef is represented by #{undef_value.inspect}" do before(:each) do pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value == '' - pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value.nil? end it { is_expected.to run.with_params('key' => undef_value).and_return({}) } it {