require 'json'

def array_of_hash?(list)
  return false unless !list.empty? && list.class == Array
  list.each do |e|
    return false unless e.class == Hash
  end
  true
end

module Puppet::Parser::Functions
  newfunction(:check_array_of_hash, :arity =>1, :type => :rvalue, :doc => "Check
 input String is a valid Array of Hash in JSON style") do |arg|
    if arg[0].class == String
      begin
        list = JSON.load(arg[0].gsub("'","\""))
      rescue JSON::ParserError
        raise Puppet::ParseError, "Syntax error: #{arg[0]} is invalid"
      else
        return arg[0] if array_of_hash?(list)
      end
    else
      raise Puppet::ParseError, "Syntax error: #{arg[0]} is not a String"
    end
    return ''
  end
end