Sha256: 20d72695a9884ddc99b54c90ab699f13e4992b5ddd261a6f3c44a2293bf86b64
Contents?: true
Size: 1.56 KB
Versions: 2
Compression:
Stored size: 1.56 KB
Contents
module Direct::API::V5 class Request REQUEST_TIMEOUT = 300 def initialize(settings:, service_name:, api_method:, params: {}) @settings = settings @service_name = service_name @api_method = api_method @params = params end def send response = make_http_request response_body = parse_response(response.body) [response_body, response.headers] end private def make_http_request connection = Faraday.new(url: "https://#{api_host}") connection.post do |request| request.options.timeout = REQUEST_TIMEOUT request.url api_url request.body = body headers.each do |key, value| request.headers[key] = value end end rescue Faraday::Error => e raise RequestError, e.message end def parse_response(response_body) MultiJson.load(response_body, symbolize_keys: true) rescue MultiJson::ParseError => e raise InvalidResponseError, e.message end def api_host @settings.host end def api_url "/json/v5/#{@service_name}/" end def headers result = { 'Content-Type' => 'application/json; charset=utf-8', 'Accept-Language' => @settings.language } result['Authorization'] = "Bearer #{@settings.auth_token}" if @settings.auth_token result['Client-Login'] = @settings.client_login if @settings.client_login result end def body MultiJson.dump( method: @api_method, params: ParamsBuilder.new(@params).build ) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
direct-api-v5-0.1.2 | lib/direct/api/v5/request.rb |
direct-api-v5-0.1.1 | lib/direct/api/v5/request.rb |