adcenter_api 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/adcenter_api.rb +9 -13
- data/lib/adcenter_api/api_config.rb +2 -1
- data/lib/adcenter_api/client_login_header_handler.rb +0 -48
- data/lib/adcenter_api/credential_handler.rb +7 -19
- data/lib/adcenter_api/report_header_handler.rb +1 -1
- data/lib/adcenter_api/version.rb +1 -1
- data/lib/ads_common/savon_service_decorator.rb +6 -1
- metadata +33 -13
data/lib/adcenter_api.rb
CHANGED
@@ -40,23 +40,19 @@ module AdcenterApi
|
|
40
40
|
# - auth_handler: instance of an AdsCommon::Auth::BaseHandler subclass to
|
41
41
|
# handle authentication
|
42
42
|
# - version: intended API version
|
43
|
-
# -
|
43
|
+
# - header_ns: header namespace
|
44
|
+
# - default_ns: default namespace
|
44
45
|
#
|
45
46
|
# Returns:
|
46
|
-
# -
|
47
|
+
# - SOAP header handler
|
47
48
|
#
|
48
|
-
def soap_header_handler(auth_handler, version,
|
49
|
+
def soap_header_handler(auth_handler, version, header_ns, default_ns)
|
49
50
|
auth_method = @config.read('authentication.method', :CLIENTLOGIN)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
AdcenterApi::ClientLoginHeaderHandler.new(@credential_handler, auth_handler, namespace, version)
|
56
|
-
when :OAUTH, :OAUTH2
|
57
|
-
AdsCommon::SavonHeaders::OAuthHeaderHandler.new(@credential_handler, auth_handler, namespace, version)
|
58
|
-
end
|
59
|
-
return handler
|
51
|
+
handler_class = case auth_method
|
52
|
+
when :CLIENTLOGIN then AdcenterApi::ClientLoginHeaderHandler
|
53
|
+
when :OAUTH, :OAUTH2 then AdsCommon::SavonHeaders::OAuthHeaderHandler
|
54
|
+
end
|
55
|
+
return handler_class.new(@credential_handler, auth_handler, header_ns, default_ns, version)
|
60
56
|
end
|
61
57
|
|
62
58
|
# Helper method to provide a simple way of doing an MCC-level operation
|
@@ -51,11 +51,13 @@ module AdcenterApi
|
|
51
51
|
@@environment_config = {
|
52
52
|
:PRODUCTION => {
|
53
53
|
:oauth_scope => '',
|
54
|
+
:header_ns => 'https://adcenter.microsoft.com/api/adcenter/',
|
54
55
|
:v7 => '',
|
55
56
|
:v8 => ''
|
56
57
|
},
|
57
58
|
:SANDBOX => {
|
58
59
|
:oauth_scope => '',
|
60
|
+
:header_ns => 'https://adcenter.microsoft.com/api/adcenter/',
|
59
61
|
:v7 => '',
|
60
62
|
:v8 => ''
|
61
63
|
}
|
@@ -91,7 +93,6 @@ module AdcenterApi
|
|
91
93
|
#TODO: remove client_login_config
|
92
94
|
@@client_login_config = {
|
93
95
|
:AUTH_SERVER => 'https://www.microsoft.com',
|
94
|
-
:AUTH_NAMESPACE_PREAMBLE => 'https://adcenter.microsoft.com/api/adcenter/',
|
95
96
|
:LOGIN_SERVICE_NAME => 'adcenter'
|
96
97
|
}
|
97
98
|
|
@@ -3,56 +3,8 @@ require 'ads_common/savon_headers/base_header_handler'
|
|
3
3
|
|
4
4
|
module AdcenterApi
|
5
5
|
class ClientLoginHeaderHandler < AdsCommon::SavonHeaders::BaseHeaderHandler
|
6
|
-
# Initializes a header handler.
|
7
|
-
#
|
8
|
-
# Args:
|
9
|
-
# - credential_handler: a header with credential data
|
10
|
-
# - auth_handler: a header with auth data
|
11
|
-
# - element_name: an API-specific name of header element
|
12
|
-
# - namespace: default namespace to use
|
13
|
-
# - auth_namespace: namespace to use for auth headers
|
14
|
-
# - version: services version
|
15
|
-
#
|
16
|
-
#def initialize(credential_handler, auth_handler, namespace, auth_namespace, version)
|
17
|
-
def initialize(credential_handler, auth_handler, namespace, version)
|
18
|
-
super(credential_handler, auth_handler, namespace, version)
|
19
|
-
#@auth_namespace = auth_namespace
|
20
|
-
end
|
21
|
-
|
22
|
-
# Enriches soap object with API-specific headers like namespaces, login
|
23
|
-
# credentials etc. Sets the default namespace for the body to the one
|
24
|
-
# specified in initializer.
|
25
|
-
#
|
26
|
-
# Args:
|
27
|
-
# - request: a HTTPI Request for extra configuration (unused)
|
28
|
-
# - soap: a Savon soap object to fill fields in
|
29
|
-
#
|
30
|
-
# Returns:
|
31
|
-
# - modified soap structure
|
32
|
-
#
|
33
|
-
def prepare_request(request, soap)
|
34
|
-
super(request, soap)
|
35
|
-
soap.header[:attributes!] ||= {}
|
36
|
-
header_name = prepend_namespace(get_header_element_name())
|
37
|
-
soap.header[:attributes!][header_name] ||= {}
|
38
|
-
#soap.header[:attributes!][header_name]['xmlns'] = @auth_namespace
|
39
|
-
return soap
|
40
|
-
end
|
41
6
|
|
42
7
|
private
|
43
|
-
# Skips namespace prefixes for all elements except top level. Use default
|
44
|
-
# (inherited) prefixing for the top level key.
|
45
|
-
#
|
46
|
-
# Args:
|
47
|
-
# - str: String to prepend with a namespace
|
48
|
-
#
|
49
|
-
# Returns:
|
50
|
-
# - String with a namespace
|
51
|
-
#
|
52
|
-
def prepend_namespace(str)
|
53
|
-
#return get_header_element_name().eql?(str) ? super(str) : str
|
54
|
-
super(str)
|
55
|
-
end
|
56
8
|
|
57
9
|
# Generates Adcenter API specific request header with ClientLogin data.
|
58
10
|
def generate_request_header()
|
@@ -25,7 +25,7 @@ module AdcenterApi
|
|
25
25
|
validate_headers_for_server(result)
|
26
26
|
|
27
27
|
extra_headers = {
|
28
|
-
'userAgent' =>
|
28
|
+
'userAgent' => generate_user_agent(),
|
29
29
|
'developerToken' => result[:developer_token]
|
30
30
|
}
|
31
31
|
if !@use_mcc and result[:client_customer_id]
|
@@ -38,26 +38,14 @@ module AdcenterApi
|
|
38
38
|
return result
|
39
39
|
end
|
40
40
|
|
41
|
-
# Generates string to
|
42
|
-
def
|
43
|
-
extra_ids, agent_app = get_user_agent_data(extra_ids)
|
44
|
-
super(extra_ids, agent_app)
|
45
|
-
end
|
46
|
-
|
47
|
-
# Generates string to user as user agent in SOAP headers.
|
48
|
-
def generate_soap_user_agent(extra_ids = [])
|
49
|
-
extra_ids, agent_app = get_user_agent_data(extra_ids)
|
50
|
-
super(extra_ids, agent_app)
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
# Returns agent name and data for user-agent string generation.
|
56
|
-
def get_user_agent_data(extra_ids)
|
41
|
+
# Generates string to use as user agent in headers.
|
42
|
+
def generate_user_agent(extra_ids = [])
|
57
43
|
agent_app = @config.read('authentication.user_agent')
|
58
44
|
extra_ids << ['AwApi-Ruby/%s' % AdcenterApi::ApiConfig::CLIENT_LIB_VERSION]
|
59
|
-
|
60
|
-
|
45
|
+
super(extra_ids, agent_app)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
61
49
|
|
62
50
|
# Validates that the right credentials are being used for the chosen
|
63
51
|
# environment.
|
@@ -32,7 +32,7 @@ module AdcenterApi
|
|
32
32
|
'Content-Type' => 'application/x-www-form-urlencoded',
|
33
33
|
'Authorization' =>
|
34
34
|
@auth_handler.auth_string(credentials, HTTPI::Request.new(url)),
|
35
|
-
'User-Agent' => @credential_handler.
|
35
|
+
'User-Agent' => @credential_handler.generate_user_agent(),
|
36
36
|
'clientCustomerId' => credentials[:client_customer_id].to_s,
|
37
37
|
'developerToken' => credentials[:developer_token]
|
38
38
|
}
|
data/lib/adcenter_api/version.rb
CHANGED
@@ -27,6 +27,7 @@ AdsCommon::SavonService.class_eval do
|
|
27
27
|
additional_headers = args.delete(:headers) unless args.nil?
|
28
28
|
prepend_namespace_to_hash(args, ns)
|
29
29
|
prepend_namespace_to_hash(additional_headers, ns)
|
30
|
+
puts "**************************************args = #{args}"
|
30
31
|
response = @client.request(ns, original_input_name) do |soap|
|
31
32
|
@client.http.headers["SOAPAction"] = original_action_name
|
32
33
|
soap.body = args
|
@@ -39,7 +40,11 @@ AdsCommon::SavonService.class_eval do
|
|
39
40
|
if h.is_a?(Hash)
|
40
41
|
h.dup.each do |k,v|
|
41
42
|
h.delete(k)
|
42
|
-
|
43
|
+
if k.to_s=~/!$/ || k.to_s=~/:/ #on ne transforme pas les noms finissant par ! ou contenant : (exemple: attributes! ou xsi:type)
|
44
|
+
h[k] = prepend_namespace_to_hash(v, namespace)
|
45
|
+
else
|
46
|
+
h[k.to_s=~ /^#{namespace}:/ ? k : prepend_namespace(k.to_s.camelize, namespace)] = prepend_namespace_to_hash(v, namespace)
|
47
|
+
end
|
43
48
|
end
|
44
49
|
elsif h.is_a?(Array) # e.g: h = {:campaigns => {:campaign => [{:name => 'foo'}, {:name => 'foofoo'}]}}
|
45
50
|
h.map!{|e| prepend_namespace_to_hash(e, namespace)}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adcenter_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,21 +21,31 @@ dependencies:
|
|
21
21
|
version: 3.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.1.0
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: google-ads-common
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
|
-
- -
|
35
|
+
- - ~>
|
31
36
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
37
|
+
version: 0.8.0
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.8.0
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rake
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: rspec
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ~>
|
@@ -54,7 +69,12 @@ dependencies:
|
|
54
69
|
version: '2.8'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.8'
|
58
78
|
description: Ruby wrapper for Microsoft Adcenter API
|
59
79
|
email:
|
60
80
|
- arambert@optimeez.com
|
@@ -128,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
148
|
version: '0'
|
129
149
|
requirements: []
|
130
150
|
rubyforge_project:
|
131
|
-
rubygems_version: 1.8.
|
151
|
+
rubygems_version: 1.8.24
|
132
152
|
signing_key:
|
133
153
|
specification_version: 3
|
134
154
|
summary: Ruby wrapper for Microsoft Adcenter API
|