appnexusapi 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +18 -7
- data/appnexusapi.gemspec +5 -2
- data/lib/appnexusapi/bidder_profile_service.rb +2 -2
- data/lib/appnexusapi/connection.rb +22 -16
- data/lib/appnexusapi/creative_template_resource.rb +2 -0
- data/lib/appnexusapi/creative_template_service.rb +18 -0
- data/lib/appnexusapi/log_level_data_download_service.rb +68 -0
- data/lib/appnexusapi/log_level_data_resource.rb +20 -0
- data/lib/appnexusapi/log_level_data_service.rb +20 -0
- data/lib/appnexusapi/service.rb +15 -7
- data/lib/appnexusapi/version.rb +1 -1
- metadata +64 -26
- data/lib/appnexusapi/faraday/encode_json.rb +0 -15
- data/lib/appnexusapi/faraday/parse_json.rb +0 -61
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dcb81e6d6e3e396e606b8f5f34133564bb1e23d4
|
4
|
+
data.tar.gz: c818e90587d6ea29f0732b4e0d26e6b4632c2a73
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fbf3d7e3efe189261e35340b03ed7b06f34c5e99f8a11a3c3b1d0de6a93738a034dab5f7cbc867419dc03a027a01e97c2da35dbfbe53c762e7ad47c0ff69a467
|
7
|
+
data.tar.gz: 4a09f2255dc0e823f18b4c436ea959959afd087842389f125d5785dec9a18816a5fa5ad7396fb99091db7fd16c7761146cb5f16da58bdc0511fbecfb80d2f7a4
|
data/README.md
CHANGED
@@ -20,13 +20,14 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
Establish a connection:
|
22
22
|
|
23
|
-
connection = AppnexusApi::Connection.new(
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
23
|
+
connection = AppnexusApi::Connection.new(
|
24
|
+
'username' => 'username',
|
25
|
+
'password' => 'password'
|
26
|
+
|
27
|
+
# Defaults to connecting to https://api.appnexus.com/ but you can optionally pass a uri to
|
28
|
+
# connect to another endpoint, e.g. the staging site could be
|
29
|
+
# uri: 'http://api.sand-08.adnxs.net'
|
30
|
+
)
|
30
31
|
|
31
32
|
Use a Service:
|
32
33
|
|
@@ -47,6 +48,16 @@ Use a Service:
|
|
47
48
|
creative = creative_service.create(new_creative)
|
48
49
|
creative.update("campaign" => "Testing")
|
49
50
|
|
51
|
+
## Debugging
|
52
|
+
|
53
|
+
The APPNEXUS_API_DEBUG environment variable will trigger full printouts of Faraday's debug output to STDERR.
|
54
|
+
|
55
|
+
```bash
|
56
|
+
cd /my/app
|
57
|
+
export APPNEXUS_API_DEBUG=true
|
58
|
+
bundle exec rails whatever
|
59
|
+
```
|
60
|
+
|
50
61
|
## Contributing
|
51
62
|
|
52
63
|
1. Fork it
|
data/appnexusapi.gemspec
CHANGED
@@ -15,7 +15,10 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = AppnexusApi::VERSION
|
17
17
|
|
18
|
-
gem.add_dependency 'faraday', '~>0.
|
19
|
-
gem.add_dependency
|
18
|
+
gem.add_dependency 'faraday', '~> 0.9'
|
19
|
+
gem.add_dependency 'faraday_middleware'
|
20
|
+
gem.add_dependency 'multi_json'
|
21
|
+
gem.add_dependency 'pester'
|
22
|
+
|
20
23
|
gem.add_development_dependency 'bundler', '>= 1.2.0'
|
21
24
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AppnexusApi::
|
1
|
+
class AppnexusApi::BidderProfileService < AppnexusApi::Service
|
2
2
|
|
3
3
|
def initialize(connection, bidder_id)
|
4
4
|
@bidder_id = bidder_id
|
@@ -14,7 +14,7 @@ class AppnexusApi::BidderProfileResource < AppnexusApi::Service
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def uri_suffix
|
17
|
-
"
|
17
|
+
"profile/#{@bidder_id}"
|
18
18
|
end
|
19
19
|
|
20
20
|
def delete(id)
|
@@ -1,16 +1,19 @@
|
|
1
|
-
require '
|
2
|
-
require 'appnexusapi/faraday/parse_json'
|
1
|
+
require 'faraday_middleware'
|
3
2
|
require 'appnexusapi/faraday/raise_http_error'
|
4
3
|
|
5
4
|
class AppnexusApi::Connection
|
6
5
|
def initialize(config)
|
7
|
-
config["uri"] = "http://api.adnxs.com/" unless config.has_key?("uri")
|
8
6
|
@config = config
|
9
|
-
@
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
@config['uri'] ||= 'https://api.appnexus.com/'
|
8
|
+
@connection = Faraday.new(@config['uri']) do |conn|
|
9
|
+
if ENV['APPNEXUS_API_DEBUG'].to_s =~ /^(true|1)$/i
|
10
|
+
conn.response :logger, Logger.new(STDERR), bodies: true
|
11
|
+
end
|
12
|
+
|
13
|
+
conn.request :json
|
14
|
+
conn.response :json, :content_type => /\bjson$/
|
15
|
+
conn.use AppnexusApi::Faraday::Response::RaiseHttpError
|
16
|
+
conn.adapter Faraday.default_adapter
|
14
17
|
end
|
15
18
|
end
|
16
19
|
|
@@ -19,8 +22,11 @@ class AppnexusApi::Connection
|
|
19
22
|
end
|
20
23
|
|
21
24
|
def login
|
22
|
-
response = @connection.run_request(:post, 'auth', {
|
23
|
-
|
25
|
+
response = @connection.run_request(:post, 'auth', { 'auth' => { 'username' => @config['username'], 'password' => @config['password'] } }, {})
|
26
|
+
if response.body['response']['error_code']
|
27
|
+
fail "#{response.body['response']['error_code']}/#{response.body['response']['error_description']}"
|
28
|
+
end
|
29
|
+
@token = response.body['response']['token']
|
24
30
|
end
|
25
31
|
|
26
32
|
def logout
|
@@ -29,25 +35,25 @@ class AppnexusApi::Connection
|
|
29
35
|
|
30
36
|
def get(route, params={}, headers={})
|
31
37
|
params = params.delete_if {|key, value| value.nil? }
|
32
|
-
run_request(:get, @connection.build_url(route, params), nil, headers)
|
38
|
+
run_request(:get, @connection.build_url(route, params), nil, headers)
|
33
39
|
end
|
34
40
|
|
35
41
|
def post(route, body=nil, headers={})
|
36
|
-
run_request(:post, route, body, headers)
|
42
|
+
run_request(:post, route, body, headers)
|
37
43
|
end
|
38
44
|
|
39
45
|
def put(route, body=nil, headers={})
|
40
|
-
run_request(:put, route, body, headers)
|
46
|
+
run_request(:put, route, body, headers)
|
41
47
|
end
|
42
48
|
|
43
49
|
def delete(route, body=nil, headers={})
|
44
|
-
run_request(:delete, route, body, headers)
|
50
|
+
run_request(:delete, route, body, headers)
|
45
51
|
end
|
46
52
|
|
47
53
|
def run_request(method, route, body, headers)
|
48
54
|
login if !is_authorized?
|
49
55
|
begin
|
50
|
-
@connection.run_request(method, route, body, {
|
56
|
+
@connection.run_request(method, route, body, { 'Authorization' => @token }.merge(headers))
|
51
57
|
rescue AppnexusApi::Unauthorized => e
|
52
58
|
if @retry == true
|
53
59
|
raise AppnexusApi::Unauthorized, e
|
@@ -57,7 +63,7 @@ class AppnexusApi::Connection
|
|
57
63
|
run_request(method, route, body, headers)
|
58
64
|
end
|
59
65
|
rescue Faraday::Error::TimeoutError => e
|
60
|
-
raise AppnexusApi::Timeout,
|
66
|
+
raise AppnexusApi::Timeout, 'Timeout'
|
61
67
|
ensure
|
62
68
|
@retry = false
|
63
69
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class AppnexusApi::CreativeTemplateService < AppnexusApi::Service
|
2
|
+
def name
|
3
|
+
"template"
|
4
|
+
end
|
5
|
+
|
6
|
+
def resource_class
|
7
|
+
AppnexusApi::CreativeTemplateResource
|
8
|
+
end
|
9
|
+
|
10
|
+
def uri_suffix
|
11
|
+
"template"
|
12
|
+
end
|
13
|
+
|
14
|
+
def delete(id)
|
15
|
+
raise AppnexusApi::NotImplemented
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
class AppnexusApi::LogLevelDataDownloadService < AppnexusApi::Service
|
2
|
+
class BadChecksumException < Exception
|
3
|
+
end
|
4
|
+
|
5
|
+
def initialize(connection, options = {})
|
6
|
+
@read_only = true
|
7
|
+
@downloaded_files_path = options[:downloaded_files_path] || '.'
|
8
|
+
super(connection)
|
9
|
+
end
|
10
|
+
|
11
|
+
def download_location(params = {})
|
12
|
+
@connection.get(uri_suffix, params).headers['location']
|
13
|
+
end
|
14
|
+
|
15
|
+
# Parameter is a LogLevelDataResource
|
16
|
+
# Downloads a gzipped file
|
17
|
+
# Returns an array of paths to downloaded files
|
18
|
+
def download_resource(data_resource)
|
19
|
+
data_resource.download_params.map do |params|
|
20
|
+
uri = URI.parse(download_location(params.reject { |k,v| k == :checksum }))
|
21
|
+
filename = File.join(@downloaded_files_path, "#{params[:siphon_name]}_#{params[:hour]}_#{params[:split_part]}.gz")
|
22
|
+
Pester.retry_with_exponential_backoff do
|
23
|
+
download_file(uri, filename)
|
24
|
+
calculated_checksum = Digest::MD5.hexdigest(File.read(filename))
|
25
|
+
if calculated_checksum != params[:checksum]
|
26
|
+
error_message = "Calculated checksum of #{calculated_checksum} doesn't match API provided checksum #{params[:checksum]}"
|
27
|
+
puts error_message
|
28
|
+
fail(BadChecksumException, error_message)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
filename
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def get
|
37
|
+
fail(AppnexusApi::NotImplemented, 'This service is designed to work through download_location method.')
|
38
|
+
end
|
39
|
+
|
40
|
+
def uri_name
|
41
|
+
'siphon-download'
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def download_file(uri, filename)
|
47
|
+
puts "Starting HTTP download for: #{uri.to_s}..."
|
48
|
+
http_object = Net::HTTP.new(uri.host, uri.port)
|
49
|
+
http_object.use_ssl = true if uri.scheme == 'https'
|
50
|
+
begin
|
51
|
+
http_object.start do |http|
|
52
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
53
|
+
http.read_timeout = 500
|
54
|
+
http.request(request) do |response|
|
55
|
+
open(filename, 'wb') do |io|
|
56
|
+
response.read_body do |chunk|
|
57
|
+
io.write(chunk)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
rescue StandardError => e
|
63
|
+
puts "=> Exception: '#{e}'. Skipping download."
|
64
|
+
return
|
65
|
+
end
|
66
|
+
puts "Stored download as #{filename}"
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class AppnexusApi::LogLevelDataResource < AppnexusApi::Resource
|
2
|
+
# Extract an array of hashes of params to pass to the LogLevelDownloadService
|
3
|
+
def download_params
|
4
|
+
fail 'Missing necessaray information!' unless name && hour && timestamp && splits
|
5
|
+
splits.map do |split_part|
|
6
|
+
if split_part['checksum'].blank?
|
7
|
+
# In the case of regenerated files, there can be no checksum. These replaced hourly files should not be downloaded.
|
8
|
+
nil
|
9
|
+
else
|
10
|
+
{
|
11
|
+
split_part: split_part['part'],
|
12
|
+
siphon_name: name,
|
13
|
+
timestamp: timestamp,
|
14
|
+
hour: hour,
|
15
|
+
checksum: split_part['checksum']
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end.compact
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class AppnexusApi::LogLevelDataService < AppnexusApi::Service
|
2
|
+
def initialize(connection, options = {})
|
3
|
+
@read_only = true
|
4
|
+
@siphon_name = options[:siphon_name]
|
5
|
+
|
6
|
+
super(connection)
|
7
|
+
end
|
8
|
+
|
9
|
+
def since(time = nil)
|
10
|
+
params = {}
|
11
|
+
params[:siphon_name] = @siphon_name if @siphon_name
|
12
|
+
params[:updated_since] = time.strftime('%Y_%m_%d_%H') if time
|
13
|
+
|
14
|
+
get(params)
|
15
|
+
end
|
16
|
+
|
17
|
+
def uri_name
|
18
|
+
'siphon'
|
19
|
+
end
|
20
|
+
end
|
data/lib/appnexusapi/service.rb
CHANGED
@@ -21,15 +21,15 @@ class AppnexusApi::Service
|
|
21
21
|
AppnexusApi.const_get(resource_name + "Resource")
|
22
22
|
end
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def uri_name
|
26
26
|
name.gsub('_', '-')
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def plural_uri_name
|
30
30
|
uri_name + 's'
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def uri_suffix
|
34
34
|
uri_name
|
35
35
|
end
|
@@ -40,7 +40,7 @@ class AppnexusApi::Service
|
|
40
40
|
"num_elements" => 100,
|
41
41
|
"start_element" => 0
|
42
42
|
}.merge(params)
|
43
|
-
response = @connection.get(uri_suffix, params)
|
43
|
+
response = @connection.get(uri_suffix, params).body['response']
|
44
44
|
if return_response
|
45
45
|
response
|
46
46
|
elsif response.has_key?(plural_name) || response.has_key?(plural_uri_name)
|
@@ -57,20 +57,28 @@ class AppnexusApi::Service
|
|
57
57
|
def create(attributes={})
|
58
58
|
raise(AppnexusApi::NotImplemented, "Service is read-only.") if @read_only
|
59
59
|
attributes = { name => attributes }
|
60
|
-
response = @connection.post(uri_suffix, attributes)
|
60
|
+
response = @connection.post(uri_suffix, attributes).body['response']
|
61
|
+
if response['error_id']
|
62
|
+
response.delete('dbg')
|
63
|
+
raise AppnexusApi::BadRequest.new(response.inspect)
|
64
|
+
end
|
61
65
|
get("id" => response["id"]).first
|
62
66
|
end
|
63
67
|
|
64
68
|
def update(id, attributes={})
|
65
69
|
raise(AppnexusApi::NotImplemented, "Service is read-only.") if @read_only
|
66
70
|
attributes = { name => attributes }
|
67
|
-
response = @connection.put([uri_suffix, id].join('/'), attributes)
|
71
|
+
response = @connection.put([uri_suffix, id].join('/'), attributes).body['response']
|
72
|
+
if response['error_id']
|
73
|
+
response.delete('dbg')
|
74
|
+
raise AppnexusApi::BadRequest.new(response.inspect)
|
75
|
+
end
|
68
76
|
get("id" => response["id"]).first
|
69
77
|
end
|
70
78
|
|
71
79
|
def delete(id)
|
72
80
|
raise(AppnexusApi::NotImplemented, "Service is read-only.") if @read_only
|
73
|
-
@connection.delete([uri_suffix, id].join('/'))
|
81
|
+
@connection.delete([uri_suffix, id].join('/')).body['response']
|
74
82
|
end
|
75
83
|
|
76
84
|
end
|
data/lib/appnexusapi/version.rb
CHANGED
metadata
CHANGED
@@ -1,49 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appnexusapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.6
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Brandon Aaron
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-06-16 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: faraday
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
19
|
+
version: '0.9'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.9'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday_middleware
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
25
41
|
- !ruby/object:Gem::Dependency
|
26
42
|
name: multi_json
|
27
|
-
requirement:
|
28
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
29
44
|
requirements:
|
30
|
-
- -
|
45
|
+
- - ">="
|
31
46
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
47
|
+
version: '0'
|
33
48
|
type: :runtime
|
34
49
|
prerelease: false
|
35
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pester
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
36
69
|
- !ruby/object:Gem::Dependency
|
37
70
|
name: bundler
|
38
|
-
requirement:
|
39
|
-
none: false
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
40
72
|
requirements:
|
41
|
-
- -
|
73
|
+
- - ">="
|
42
74
|
- !ruby/object:Gem::Version
|
43
75
|
version: 1.2.0
|
44
76
|
type: :development
|
45
77
|
prerelease: false
|
46
|
-
version_requirements:
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.2.0
|
47
83
|
description: ''
|
48
84
|
email:
|
49
85
|
- brandon.aaron@gmail.com
|
@@ -51,7 +87,7 @@ executables: []
|
|
51
87
|
extensions: []
|
52
88
|
extra_rdoc_files: []
|
53
89
|
files:
|
54
|
-
- .gitignore
|
90
|
+
- ".gitignore"
|
55
91
|
- Gemfile
|
56
92
|
- LICENSE
|
57
93
|
- README.md
|
@@ -77,11 +113,11 @@ files:
|
|
77
113
|
- lib/appnexusapi/content_category_service.rb
|
78
114
|
- lib/appnexusapi/creative_resource.rb
|
79
115
|
- lib/appnexusapi/creative_service.rb
|
116
|
+
- lib/appnexusapi/creative_template_resource.rb
|
117
|
+
- lib/appnexusapi/creative_template_service.rb
|
80
118
|
- lib/appnexusapi/domain_list_resource.rb
|
81
119
|
- lib/appnexusapi/domain_list_service.rb
|
82
120
|
- lib/appnexusapi/error.rb
|
83
|
-
- lib/appnexusapi/faraday/encode_json.rb
|
84
|
-
- lib/appnexusapi/faraday/parse_json.rb
|
85
121
|
- lib/appnexusapi/faraday/raise_http_error.rb
|
86
122
|
- lib/appnexusapi/inventory_attribute_resource.rb
|
87
123
|
- lib/appnexusapi/inventory_attribute_service.rb
|
@@ -91,6 +127,9 @@ files:
|
|
91
127
|
- lib/appnexusapi/language_service.rb
|
92
128
|
- lib/appnexusapi/line_item_resource.rb
|
93
129
|
- lib/appnexusapi/line_item_service.rb
|
130
|
+
- lib/appnexusapi/log_level_data_download_service.rb
|
131
|
+
- lib/appnexusapi/log_level_data_resource.rb
|
132
|
+
- lib/appnexusapi/log_level_data_service.rb
|
94
133
|
- lib/appnexusapi/member_resource.rb
|
95
134
|
- lib/appnexusapi/member_service.rb
|
96
135
|
- lib/appnexusapi/operating_system_service.rb
|
@@ -109,27 +148,26 @@ files:
|
|
109
148
|
- lib/appnexusapi/version.rb
|
110
149
|
homepage: http://simpli.fi
|
111
150
|
licenses: []
|
151
|
+
metadata: {}
|
112
152
|
post_install_message:
|
113
153
|
rdoc_options: []
|
114
154
|
require_paths:
|
115
155
|
- lib
|
116
156
|
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
-
none: false
|
118
157
|
requirements:
|
119
|
-
- -
|
158
|
+
- - ">="
|
120
159
|
- !ruby/object:Gem::Version
|
121
160
|
version: '0'
|
122
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
-
none: false
|
124
162
|
requirements:
|
125
|
-
- -
|
163
|
+
- - ">="
|
126
164
|
- !ruby/object:Gem::Version
|
127
165
|
version: '0'
|
128
166
|
requirements: []
|
129
167
|
rubyforge_project:
|
130
|
-
rubygems_version:
|
168
|
+
rubygems_version: 2.2.3
|
131
169
|
signing_key:
|
132
|
-
specification_version:
|
170
|
+
specification_version: 4
|
133
171
|
summary: Unofficial Ruby API Wrapper for Appnexus
|
134
172
|
test_files: []
|
135
173
|
has_rdoc:
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module AppnexusApi
|
2
|
-
module Faraday
|
3
|
-
module Request
|
4
|
-
class JsonEncode < ::Faraday::Middleware
|
5
|
-
def call(env)
|
6
|
-
if env[:request_headers]["Content-Type"] == nil
|
7
|
-
env[:body] = MultiJson.encode(env[:body]) if env[:body] != nil
|
8
|
-
env[:request_headers]["Content-Type"] = "application/json"
|
9
|
-
end
|
10
|
-
@app.call(env)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
module AppnexusApi
|
2
|
-
module Faraday
|
3
|
-
module Response
|
4
|
-
class ParseJson < ::Faraday::Middleware
|
5
|
-
dependency 'multi_json'
|
6
|
-
|
7
|
-
def call(env)
|
8
|
-
@app.call(env).on_complete do
|
9
|
-
if env[:response_headers]["content-type"].include?("application/json")
|
10
|
-
env[:body] = convert_to_json(env[:body])["response"]
|
11
|
-
check_for_error(env)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
protected
|
17
|
-
|
18
|
-
def convert_to_json(body)
|
19
|
-
case body.strip
|
20
|
-
when ''
|
21
|
-
nil
|
22
|
-
when 'true'
|
23
|
-
true
|
24
|
-
when 'false'
|
25
|
-
false
|
26
|
-
else
|
27
|
-
begin
|
28
|
-
::MultiJson.decode(body)
|
29
|
-
rescue Exception => exception
|
30
|
-
raise AppnexusApi::InvalidJson
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def check_for_error(env)
|
36
|
-
if env[:body].has_key?("error")
|
37
|
-
case env[:body]["error_id"]
|
38
|
-
when "NOAUTH"
|
39
|
-
raise AppnexusApi::Unauthorized, error_message(env)
|
40
|
-
when "UNAUTH"
|
41
|
-
raise AppnexusApi::Forbidden, error_message(env)
|
42
|
-
when "SYNTAX"
|
43
|
-
raise AppnexusApi::UnprocessableEntity, error_message(env)
|
44
|
-
when "SYSTEM"
|
45
|
-
raise AppnexusApi::InternalServerError, error_message(env)
|
46
|
-
when "INTEGRITY"
|
47
|
-
raise AppnexusApi::UnprocessableEntity, error_message(env)
|
48
|
-
else
|
49
|
-
raise AppnexusApi::Error, error_message(env)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def error_message(env)
|
55
|
-
"#{env[:method].to_s.upcase} #{env[:url].to_s} (#{env[:body]["error_id"]}): #{env[:body]["error"]}"
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|