Method: Chef::HTTP::JSONOutput#handle_response

Defined in:
lib/chef/http/json_output.rb

#handle_response(http_response, rest_request, return_value) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/chef/http/json_output.rb', line 45

def handle_response(http_response, rest_request, return_value)
  # temporary hack, skip processing if return_value is false
  # needed to keep conditional get stuff working correctly.
  return [http_response, rest_request, return_value] if return_value == false

  if /json/.match?(http_response["content-type"])
    if http_response.body.nil?
      return_value = nil
    elsif raw_output
      return_value = http_response.body.to_s
    else
      if inflate_json_class
        return_value = Chef::JSONCompat.from_json(http_response.body.chomp)
      else
        return_value = Chef::JSONCompat.parse(http_response.body.chomp)
      end
    end
    [http_response, rest_request, return_value]
  else
    Chef::Log.trace("Expected JSON response, but got content-type '#{http_response["content-type"]}'")
    if http_response.body
      Chef::Log.trace("Response body contains:\n#{http_response.body.length < 256 ? http_response.body : http_response.body[0..256] + " [...truncated...]"}")
    end
    [http_response, rest_request, http_response.body.to_s]
  end
end