X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=modules%2Fpuppetmaster%2Flib%2Fpuppet%2Fparser%2Ffunctions%2Fgetfromhash.rb;h=6e50ba14e6d5b624894d7329f48ccc23c461238f;hb=286882d21d15ddbc07b67fa08e4c36ad6e06b898;hp=e948929d6a010add34e71cd9f129160848a2d173;hpb=e7f2528c7a168e3e5c20baab6479074d69a0cd67;p=dsa-puppet.git diff --git a/modules/puppetmaster/lib/puppet/parser/functions/getfromhash.rb b/modules/puppetmaster/lib/puppet/parser/functions/getfromhash.rb index e948929d..6e50ba14 100644 --- a/modules/puppetmaster/lib/puppet/parser/functions/getfromhash.rb +++ b/modules/puppetmaster/lib/puppet/parser/functions/getfromhash.rb @@ -1,16 +1,21 @@ module Puppet::Parser::Functions newfunction(:getfromhash, :type => :rvalue) do |args| - h = args.shift - key = args.shift + x = args.shift + keys = args + keys_done = [] - raise Puppet::ParseError, "argument is not a hash" unless h.kind_of?(Hash) - if h.has_key?(key) - ans = h[key] - else - ans = false + # allows getting of hash[key] or even hash[key1][key2] etc. + keys.each do |key| + raise Puppet::ParseError, "argument[#{keys_done.join('][')}] is not a hash." unless x.kind_of?(Hash) + unless h.has_key?(key) + x = false + break + end + x = x[key] + keys_done << key end - return ans + return x end end # vim:set et: