def call(request)
method = request.method.downcase.to_sym
if !self.respond_to?(method)
accept_methods = [:get, :put, :post, :delete].select { |m| self.respond_to?(m) }
accept_methods_str = accept_methods.map { |m| m.to_s.upcase }.join(', ')
return [405, {"Content-Type" => "text/plain", "Allow" => accept_methods_str}, "Bad request method for '#{request.env['REQUEST_PATH']}': #{request.env['REQUEST_METHOD']}"]
end
if json_only && request.env['HTTP_ACCEPT'] && !request.env['HTTP_ACCEPT'].split(';').include?('application/json')
return [406, {"Content-Type" => "text/plain"}, "Must accept application/json"]
end
begin
self.send(method, request)
rescue RestErrorResponse => e
ChefZero::Log.debug("#{e.inspect}\n#{e.backtrace.join("\n")}")
error(e.response_code, e.error)
end
end