class Trace::ClientService < ApplicationService def post(url, params={}) puts "[trace][POST] request params: #{params}" conn.post do |req| req.url full_url(url) req.body = params[:data].to_json end end def authed_post(token, url, params={}) puts "[trace][POST] request params: #{params}" puts "[trace][POST] request token: #{token}" conn.post do |req| req.url full_url(url) req.body = params[:data].to_json req.headers['Authorization'] = token end end def get(url, params={}) puts "[trace][GET] request params: #{params}" conn.get do |req| req.url full_url(url, 'get') params.each_pair do |key, value| req.params["#{key}"] = value end end end def authed_get(token, url, params={}) puts "[trace][GET] request params: #{params}" puts "[trace][GET] request token: #{token}" conn.get do |req| req.url full_url(url, 'get') params.each_pair do |key, value| req.params["#{key}"] = value end req.headers['Authorization'] = token end end def delete(url, params={}) puts "[trace][DELETE] request params: #{params}" conn.delete do |req| req.url full_url(url) req.body = params[:data].to_json end end def authed_delete(token, url, params={}) puts "[trace][DELETE] request params: #{params}" puts "[trace][DELETE] request token: #{token}" conn.delete do |req| req.url full_url(url) req.body = params[:data].to_json req.headers['Authorization'] = token end end def patch(url, params={}) puts "[trace][PATCH] request params: #{params}" conn.patch do |req| req.url full_url(url) req.body = params[:data].to_json end end def authed_patch(token, url, params={}) puts "[trace][PATCH] request params: #{params}" puts "[trace][PATCH] request token: #{token}" conn.patch do |req| req.url full_url(url) req.body = params[:data].to_json req.headers['Authorization'] = token end end def put(url, params={}) puts "[trace][PUT] request params: #{params}" conn.put do |req| req.url full_url(url) req.body = params[:data].to_json end end def authed_put(token, url, params={}) puts "[trace][PUT] request params: #{params}" puts "[trace][PUT] request token: #{token}" conn.put do |req| req.url full_url(url) req.body = params[:data].to_json req.headers['Authorization'] = token end end private def conn @client ||= begin Faraday.new(url: domain) do |req| req.request :url_encoded req.headers['Content-Type'] = 'application/json' req.adapter Faraday.default_adapter end end @client end def base_url Trace.trace_config[:base_url] end def domain Trace.trace_config[:domain] end def api_url [domain, base_url].join('') end def full_url(api_rest, action='post') url = [api_url, api_rest].join('').freeze url = action === 'get' ? url : URI.escape(url) url = URI.escape(url) unless url.ascii_only? puts "[trace] request url: #{url}" return url end def log_error(status, body) puts "[trace] status: #{status}" puts "[trace] body: #{body}" end def render_response(response) status = response.status body = JSON.parse(response&.body) log_error(status, body) return [body["code"], body["Data"], body["Error"]] end end