def check_parameters(params, description)
task = caller[0].match(/`(.*)'/)[1]
error "'#{task}' parameters must be a hash" unless params.kind_of?(Hash)
for param in description.keys
error "#{task} '#{param}' parameter is mandatory" unless
params[param.to_s] or description[param][:mandatory] == false
if params[param.to_s]
case description[param][:type]
when :string
error "#{task} '#{param}' parameter must be a string" unless
params[param.to_s].kind_of?(String)
when :integer
error "#{task} '#{param}' parameter must be an integer" unless
params[param.to_s].kind_of?(Integer)
when :float
error "#{task} '#{param}' parameter must be a float" unless
params[param.to_s].kind_of?(Float)
when :number
error "#{task} '#{param}' parameter must be a number" unless
params[param.to_s].kind_of?(Numeric)
when :boolean
error "#{task} '#{param}' parameter must be a boolean" unless
params[param.to_s] == true or params[param] == false
when :array
error "#{task} '#{param}' parameter must be an array" unless
params[param.to_s].kind_of?(Array)
when :string_or_array
error "#{task} '#{param}' parameter must be a string or an array" unless
params[param.to_s].kind_of?(String) or params[param.to_s].kind_of?(Array)
when :string_or_integer
error "#{task} '#{param}' parameter must be a string or an integer" unless
params[param.to_s].kind_of?(String) or params[param.to_s].kind_of?(Integer)
when :hash
error "#{task} '#{param}' parameter must be a hash" unless
params[param.to_s].kind_of?(Hash)
else
error "Unknown parameter type '#{description[param][:type]}'"
end
params[param.to_sym] = params[param.to_s]
else
params[param.to_sym] = description[param][:default] if
description[param][:default]
params[param.to_s] = description[param][:default] if
description[param][:default]
end
end
for param in params.keys
error "Unknown parameter '#{param}'" if
not (description.key?(param) or description.key?(param.to_sym))
end
end