check_array_of_hash.rb 728 B

12345678910111213141516171819202122232425262728
  1. require 'json'
  2. def array_of_hash?(list)
  3. return false unless !list.empty? && list.class == Array
  4. list.each do |e|
  5. return false unless e.class == Hash
  6. end
  7. true
  8. end
  9. module Puppet::Parser::Functions
  10. newfunction(:check_array_of_hash, :arity =>1, :type => :rvalue, :doc => "Check
  11. input String is a valid Array of Hash in JSON style") do |arg|
  12. if arg[0].class == String
  13. begin
  14. list = JSON.load(arg[0].gsub("'","\""))
  15. rescue JSON::ParserError
  16. raise Puppet::ParseError, "Syntax error: #{arg[0]} is invalid"
  17. else
  18. return arg[0] if array_of_hash?(list)
  19. end
  20. else
  21. raise Puppet::ParseError, "Syntax error: #{arg[0]} is not a String"
  22. end
  23. return ''
  24. end
  25. end