module Lifen class Client def request(mode, url, params = {}) before_request response = faraday_client.send(mode) do |req| req.url url req.headers['Authorization'] = "Bearer #{bearer}" req.headers['Content-Type'] = "application/json" req.headers['Accept'] = "application/json" req.body = JSON.generate(params) end handle_status!(response) json = JSON.parse response.body json end def post(url, params = {}) request(:post, url, params) end def get(url, params = {}) request(:get, url, params) end private def handle_status!(response) if response.status == 500 json = JSON.parse response.body trace_id = json.fetch("X-B3-TraceId", "unknown") raise Error, "Error 500, Internal server error (trace ID: #{trace_id})" end end def faraday_client @faraday_client ||= Faraday.new(faraday_options) do |faraday| faraday.request :url_encoded # form-encode POST params faraday.adapter Faraday.default_adapter # make requests with Net::HTTP end end def faraday_options options = {url: site} options[:proxy] = proxy_url if !proxy_url.nil? options end def site Lifen.configuration.site end def proxy_url Lifen.configuration.proxy_url end def before_request end def bearer raise "A bearer method must be defined" end end end