+1, being the author of the root cause :)

One question in the body, though.

On 18/09/10 01:51, Paul Berry wrote:
> The :undef symbol, which we use internally to distinguish between
> undefined variables and variables whose value is the empty string, is
> being leaked in calls to functions (e.g. "split").  This is a
> departure from 0.25.x behavior, where undefined variables evaluated to
> "".
> 
> This patch restores the 0.25.x behavior.
> 
> Signed-off-by: Paul Berry <[email protected]>
> ---
>  lib/puppet/parser/ast/function.rb     |    2 +-
>  spec/unit/parser/ast/function_spec.rb |   18 ++++++++++++++----
>  2 files changed, 15 insertions(+), 5 deletions(-)
> 
> diff --git a/lib/puppet/parser/ast/function.rb 
> b/lib/puppet/parser/ast/function.rb
> index 74023f6..80e6e65 100644
> --- a/lib/puppet/parser/ast/function.rb
> +++ b/lib/puppet/parser/ast/function.rb
> @@ -28,7 +28,7 @@ class Puppet::Parser::AST
>        end
>  
>        # We don't need to evaluate the name, because it's plaintext
> -      args = @arguments.safeevaluate(scope)
> +      args = @arguments.safeevaluate(scope).map { |x| x == :undef ? '' : x }

Are we sure that safeevaluate always returns an array? I think I
remember you sent a patch earlier about this, but I don't exactly
remeber the details.

>        scope.send("function...@name}", args)
>      end
> diff --git a/spec/unit/parser/ast/function_spec.rb 
> b/spec/unit/parser/ast/function_spec.rb
> index c57c7f0..38e3441 100644
> --- a/spec/unit/parser/ast/function_spec.rb
> +++ b/spec/unit/parser/ast/function_spec.rb
> @@ -61,20 +61,30 @@ describe Puppet::Parser::AST::Function do
>      end
>  
>      it "should call the underlying ruby function" do
> -      argument = stub 'arg', :safeevaluate => "nothing"
> +      argument = stub 'arg', :safeevaluate => ["nothing"]
>        Puppet::Parser::Functions.stubs(:function).with("exist").returns(true)
>        func = Puppet::Parser::AST::Function.new :name => "exist", :ftype => 
> :statement, :arguments => argument
>  
> -      @scope.expects(:function_exist).with("nothing")
> +      @scope.expects(:function_exist).with(["nothing"])
> +
> +      func.evaluate(@scope)
> +    end
> +
> +    it "should convert :undef to '' in arguments" do
> +      argument = stub 'arg', :safeevaluate => ["foo", :undef, "bar"]
> +      Puppet::Parser::Functions.stubs(:function).with("exist").returns(true)
> +      func = Puppet::Parser::AST::Function.new :name => "exist", :ftype => 
> :statement, :arguments => argument
> +
> +      @scope.expects(:function_exist).with(["foo", "", "bar"])
>  
>        func.evaluate(@scope)
>      end
>  
>      it "should return the ruby function return for rvalue functions" do
> -      argument = stub 'arg', :safeevaluate => "nothing"
> +      argument = stub 'arg', :safeevaluate => ["nothing"]
>        Puppet::Parser::Functions.stubs(:function).with("exist").returns(true)
>        func = Puppet::Parser::AST::Function.new :name => "exist", :ftype => 
> :statement, :arguments => argument
> -      @scope.stubs(:function_exist).with("nothing").returns("returning")
> +      @scope.stubs(:function_exist).with(["nothing"]).returns("returning")
>  
>        func.evaluate(@scope).should == "returning"
>      end


-- 
Brice Figureau
My Blog: http://www.masterzen.fr/

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to