lambda do |request_options|
query = []
request_options.fetch('query', {}).each do |key, value|
query.push("#{key}=#{value}")
end
query = query.empty? ? '' : '?' + query.join('&')
options = {
method: request_options['http_method'].downcase.to_sym,
url: request_options['request_url'] + query,
headers: request_options['headers'].clone
}
if request_options['payload']
if request_options['uses_form_data']
options[:payload] = request_options['payload']
else
options[:payload] = request_options['payload'].to_json
options[:headers]['Content-Type'] = 'application/json'
end
end
response = {}
data = nil
begin
response = RestClient::Request.execute(options)
rescue RestClient::ExceptionWithResponse => e
response = e.response
end
begin
data = JSON.parse(response.body)
rescue JSON::ParserError
data = nil
end
if response.code >= 400
data = data ? data : {}
raise Clayful::Exception.new(
request_options.fetch('model_name', nil),
request_options.fetch('method_name', nil),
response.code,
response.,
data.fetch('errorCode', nil),
data.fetch('message', ''),
data.fetch('validation', nil)
)
else
return Clayful::Response.new(
response.code,
data,
response.
)
end
end