module Cloudinary::BaseApi
def call_json_api(method, api_url, payload, timeout, headers, proxy = nil, user = nil, password = nil)
def call_json_api(method, api_url, payload, timeout, headers, proxy = nil, user = nil, password = nil) conn = Faraday.new(url: api_url) do |faraday| faraday.proxy = proxy if proxy faraday.request :json faraday.adapter @adapter || Faraday.default_adapter end response = conn.run_request(method.downcase.to_sym, nil, payload, headers) do |req| req.options.timeout = timeout if timeout req.basic_auth(user, password) if user && password end return Response.new(response) if response.status == 200 exception_class = case response.status when 400 then BadRequest when 401 then AuthorizationRequired when 403 then NotAllowed when 404 then NotFound when 409 then AlreadyExists when 420, 429 then RateLimited when 500 then GeneralError else raise GeneralError.new("Server returned unexpected status code - #{response.status} - #{response.body}") end json = Cloudinary::Api.parse_json_response(response) raise exception_class.new(json["error"]["message"]) end