lib/wolf_core/infrastructure/http_operations.rb
module WolfCore
module HttpOperations
include WolfCore::ExceptionOperations
include WolfCore::AsyncUtils
include WolfCore::LoggingUtils
def async_http_get(**args)
log_object 'starting async_http_get'
log_object args, title: 'async_http_get args are'
run_async do
response = http_get(**args)
log_object parse_http_response(response), title: 'async_http_get response is'
end
end
def safe_http_get(url:, headers: {}, query: nil, error_message: nil, title: nil)
response = http_get(url: url, headers: headers, query: query)
response = parse_http_response(response)
title ||= 'safe_http_get response is'
log_object response, title: title
error_message ||= 'Error on safe_http_get'
validate_http_response(response: response, message: error_message)
response
end
def http_get(url:, headers: {}, query: nil)
WolfCore::HttpDataSource.http_get(url: url, headers: headers, query: query)
end
def async_http_post(**args)
puts "starting async_http_post"
puts "async_http_post args are"
log_object args
run_async do
response = http_post(**args)
puts "async_http_post response is"
log_object parse_http_response(response).to_h
end
end
def safe_http_post(url:, headers: {}, body: nil, query: nil, error_message: nil, title: nil)
response = http_post(url: url, headers: headers, body: body, query: query)
response = parse_http_response(response)
title ||= 'safe_http_post response is'
log_object response, title: title
error_message ||= 'Error on safe_http_post'
validate_http_response(response: response, message: error_message)
response
end
def http_post(url:, headers: {}, body: nil, query: nil)
WolfCore::HttpDataSource.http_post(url: url, headers: headers, query: query, body: body)
end
def async_http_put(**args)
log_object 'starting async_http_put'
log_object args, title: 'async_http_put args are'
run_async do
response = http_put(**args)
puts "async_http_put response is"
log_object parse_http_response(response).to_h
end
end
def safe_http_put(url:, headers: {}, body: nil, query: nil, error_message: nil, title: nil)
response = http_put(url: url, headers: headers, body: body, query: query)
response = parse_http_response(response)
title ||= 'safe_http_put response is'
log_object response, title: title
error_message ||= 'Error on safe_http_put'
validate_http_response(response: response, message: error_message)
response
end
def http_put(url:, headers: {}, body: nil, query: nil)
WolfCore::HttpDataSource.http_put(url: url, headers: headers, query: query, body: body)
end
def validate_http_response(response:, message:, error_data: nil)
unless response.code == 200
error_data = {
message: message,
response: parse_http_response(response)
}.merge(error_data || {})
raise_service_error(error_data)
end
end
def parse_http_response(response)
body = JSON.parse(response.body) rescue response.body
OpenStruct.new({
code: response.code,
body: body,
message: response.message,
})
end
end
end