It's hard to tell whether Stefan or Brice was involved in this
message, but I did eventually through some experimentation figure out
what was needed, and enhanced my actual understanding after I got it
working.


Thanks for the help.

On Thu, Jul 26, 2012 at 5:01 PM, Stefan Schulte
<[email protected]> wrote:
> On Tue, Jul 24, 2012 at 10:37:47PM +0200, Brice Figureau wrote:
>> On 24/07/12 22:30, Matthew Probst wrote:
>> > Actually, I had it _that_ way before I tried the ways I posted
>> > previously, in imitation of the exact same code.  But, to make sure I
>> > wasn't just messing it up, I went ahead and tried it again with this code:
>> >
>> > # subpaths.rb
>> > #
>> > module Puppet::Parser::Functions
>> >   newfunction(:subpaths, :type => :rvalue) do |args|
>
> all arguments that you pass to your custom function are now represented
> by args. So if you call your function like
>
>     subpaths('foo', 'bar')
>
> args will ['foo', 'bar']. If you call your function like
>
>     subpaths(['foo', 'bar'])
>
> then you really just pass one argument to your function, so args[0] is
> ['foo', 'bar'] and args = [['foo', 'bar']]
>
>> >     args = [args] unless args.is_a?(Array)
>> >     args.each do |path|
>
> if you called your function like subpaths(['foo', 'bar']) then your
> first temp_path will be the array ['foo', 'bar']
>
>> >       temp_path = path
>> >       begin
>> >         result << temp_path
>> >         temp_path = File.dirname(temp_path)
>
> File.dirname fails if you pass an array with "can't convert Array into
> String"
>
>> >       end while (temp_path != "/" and temp_path != ".")
>> >     end
>> >     return result.uniq
>
> result is only valid inside your args.each block.
>
>> >   end
>> > end
>> >
>
> I hope this helps understanding why this failed. In your last (working
> example) you first extracted the first argument with arguments[0] and you
> define result outside the each block.
>
> -Stefan
>
> --
> 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.
>

-- 
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