Sha256: 881f315d2559e8b57b1c19b90f19fdbdfe0458ca95fc6acb71976a18fb9e41d7

Contents?: true

Size: 2 KB

Versions: 4

Compression:

Stored size: 2 KB

Contents

require 'faraday_middleware'
require 'appnexusapi/faraday/raise_http_error'

class AppnexusApi::Connection
  def initialize(config)
    @config = config
    @config['uri'] ||= 'https://api.appnexus.com/'
    @connection = Faraday.new(@config['uri']) do |conn|
      if ENV['APPNEXUS_API_DEBUG'].to_s =~ /^(true|1)$/i
        conn.response :logger, Logger.new(STDERR), bodies: true
      end

      conn.request :json
      conn.response :json, :content_type => /\bjson$/
      conn.use AppnexusApi::Faraday::Response::RaiseHttpError
      conn.adapter Faraday.default_adapter
    end
  end

  def is_authorized?
    !@token.nil?
  end

  def login
    response = @connection.run_request(:post, 'auth', { 'auth' => { 'username' => @config['username'], 'password' => @config['password'] } }, {})
    if response.body['response']['error_code']
      fail "#{response.body['response']['error_code']}/#{response.body['response']['error_description']}"
    end
    @token = response.body['response']['token']
  end

  def logout
    @token = nil
  end

  def get(route, params={}, headers={})
    params = params.delete_if {|key, value| value.nil? }
    run_request(:get, @connection.build_url(route, params), nil, headers)
  end

  def post(route, body=nil, headers={})
    run_request(:post, route, body, headers)
  end

  def put(route, body=nil, headers={})
    run_request(:put, route, body, headers)
  end

  def delete(route, body=nil, headers={})
    run_request(:delete, route, body, headers)
  end

  def run_request(method, route, body, headers)
    login if !is_authorized?
    begin
      @connection.run_request(method, route, body, { 'Authorization' => @token }.merge(headers))
    rescue AppnexusApi::Unauthorized => e
      if @retry == true
        raise AppnexusApi::Unauthorized, e
      else
        @retry = true
        logout
        run_request(method, route, body, headers)
      end
    rescue Faraday::Error::TimeoutError => e
      raise AppnexusApi::Timeout, 'Timeout'
    ensure
      @retry = false
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
appnexusapi-0.0.9 lib/appnexusapi/connection.rb
appnexusapi-0.0.8 lib/appnexusapi/connection.rb
appnexusapi-0.0.7 lib/appnexusapi/connection.rb
appnexusapi-0.0.6 lib/appnexusapi/connection.rb