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.
