Class: AppnexusApi::Connection
- Inherits:
-
Object
- Object
- AppnexusApi::Connection
- Defined in:
- lib/appnexusapi/connection.rb
Constant Summary collapse
- RATE_EXCEEDED_DEFAULT_TIMEOUT =
15
- RATE_EXCEEDED_ERROR =
Inexplicably, sandbox uses the correct code of 429, while production uses 405? so we just rely on the error message
'RATE_EXCEEDED'.freeze
Instance Method Summary collapse
- #build_url(route, params) ⇒ Object
- #delete(route, body = nil, headers = {}) ⇒ Object
- #get(route, params = {}, headers = {}) ⇒ Object
-
#initialize(config) ⇒ Connection
constructor
A new instance of Connection.
- #is_authorized? ⇒ Boolean
- #log ⇒ Object
- #login ⇒ Object
- #logout ⇒ Object
- #post(route, body = nil, headers = {}) ⇒ Object
- #put(route, body = nil, headers = {}) ⇒ Object
- #run_request(method, route, body, headers) ⇒ Object
- #run_request_only(method, route, body, headers) ⇒ Object
Constructor Details
#initialize(config) ⇒ Connection
Returns a new instance of Connection.
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/appnexusapi/connection.rb', line 11 def initialize(config) @config = config @config['uri'] ||= 'https://api.appnexus.com/' @logger = @config['logger'] || NullLogger.instance @connection = Faraday.new(@config['uri']) do |conn| conn.response :logger, @logger, bodies: true conn.request :json conn.response :json, :content_type => /\bjson$/ conn.use AppnexusApi::Faraday::Response::RaiseHttpError conn.adapter Faraday.default_adapter end end |
Instance Method Details
#build_url(route, params) ⇒ Object
50 51 52 |
# File 'lib/appnexusapi/connection.rb', line 50 def build_url(route, params) @connection.build_url(route, params) end |
#delete(route, body = nil, headers = {}) ⇒ Object
62 63 64 |
# File 'lib/appnexusapi/connection.rb', line 62 def delete(route, body=nil, headers={}) run_request(:delete, route, body, headers) end |
#get(route, params = {}, headers = {}) ⇒ Object
45 46 47 48 |
# File 'lib/appnexusapi/connection.rb', line 45 def get(route, params={}, headers={}) params = params.delete_if {|key, value| value.nil? } run_request(:get, build_url(route, params), nil, headers) end |
#is_authorized? ⇒ Boolean
24 25 26 |
# File 'lib/appnexusapi/connection.rb', line 24 def !@token.nil? end |
#log ⇒ Object
28 29 30 |
# File 'lib/appnexusapi/connection.rb', line 28 def log @logger end |
#login ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/appnexusapi/connection.rb', line 32 def login response = @connection.run_request(:post, 'auth', { 'auth' => { 'username' => @config['username'], 'password' => @config['password'] } }, {}) log.debug(response.body) if response.body['response']['error_code'] fail "#{response.body['response']['error_code']}/#{response.body['response']['error_description']}" end @token = response.body['response']['token'] end |
#logout ⇒ Object
41 42 43 |
# File 'lib/appnexusapi/connection.rb', line 41 def logout @token = nil end |
#post(route, body = nil, headers = {}) ⇒ Object
54 55 56 |
# File 'lib/appnexusapi/connection.rb', line 54 def post(route, body=nil, headers={}) run_request(:post, route, body, headers) end |
#put(route, body = nil, headers = {}) ⇒ Object
58 59 60 |
# File 'lib/appnexusapi/connection.rb', line 58 def put(route, body=nil, headers={}) run_request(:put, route, body, headers) end |
#run_request(method, route, body, headers) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/appnexusapi/connection.rb', line 66 def run_request(method, route, body, headers) login unless response = {} begin loop do response = run_request_only( method, route, body, { 'Authorization' => @token }.merge(headers) ) break if response.body.empty? # Log level data download service returns a body of "" break unless response.body.fetch('response', {})['error_code'] == RATE_EXCEEDED_ERROR wait_time = response.headers['retry-after'] || RATE_EXCEEDED_DEFAULT_TIMEOUT log.info("received rate exceeded. wait time: #{wait_time}s") sleep wait_time.to_i end rescue AppnexusApi::Unauthorized => e if @retry == true raise AppnexusApi::Unauthorized, e else @retry = true logout response = run_request(method, route, body, headers) end rescue Faraday::Error::TimeoutError => _e raise AppnexusApi::Timeout, 'Timeout' ensure @retry = false end log.debug(response.body) response end |
#run_request_only(method, route, body, headers) ⇒ Object
100 101 102 103 104 105 106 107 |
# File 'lib/appnexusapi/connection.rb', line 100 def run_request_only(method, route, body, headers) @connection.run_request( method, route, body, { 'Authorization' => @token }.merge(headers) ) end |