    # File lib/chef/mixin/params_validate.rb, line 47
          def validate(opts, map)
            #--
            # validate works by taking the keys in the validation map, assuming it's a hash, and
            # looking for _pv_:symbol as methods.  Assuming it find them, it calls the right
            # one.
            #++
            raise ArgumentError, "Options must be a hash" unless opts.kind_of?(Hash)
            raise ArgumentError, "Validation Map must be a hash" unless map.kind_of?(Hash)

            map.each do |key, validation|
              unless key.kind_of?(Symbol) || key.kind_of?(String)
                raise ArgumentError, "Validation map keys must be symbols or strings!"
              end
              case validation
              when true
                _pv_required(opts, key)
              when false
                true
              when Hash
                validation.each do |check, carg|
                  check_method = "_pv_#{check.to_s}"
                  if self.respond_to?(check_method, true)
                    self.send(check_method, opts, key, carg)
                  else
                    raise ArgumentError, "Validation map has unknown check: #{check}"
                  end
                end
              end
            end
            opts
          end