google-adwords-api 0.6.1 → 0.6.2
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/ChangeLog +4 -0
- data/adwords_api.yml +17 -2
- data/examples/v201109/misc/use_oauth.rb +4 -1
- data/examples/v201109/misc/use_oauth2.rb +97 -0
- data/examples/v201109_1/misc/use_oauth.rb +4 -1
- data/examples/v201109_1/misc/use_oauth2.rb +97 -0
- data/lib/adwords_api.rb +1 -1
- data/lib/adwords_api/api_config.rb +0 -2
- data/lib/adwords_api/client_login_header_handler.rb +3 -3
- data/lib/adwords_api/credential_handler.rb +1 -1
- data/lib/adwords_api/errors.rb +1 -1
- data/lib/adwords_api/report_header_handler.rb +1 -1
- data/lib/adwords_api/report_utils.rb +7 -7
- data/lib/adwords_api/utils.rb +2 -1
- data/lib/adwords_api/version.rb +1 -1
- data/test/adwords_api/test_report_utils.rb +9 -9
- data/test/adwords_api/test_utils.rb +4 -3
- data/test/bugs/test_issue_00000031.rb +5 -4
- data/test/bugs/test_issue_00000063.rb +4 -4
- data/test/suite_unittests.rb +2 -2
- metadata +157 -151
data/ChangeLog
CHANGED
data/adwords_api.yml
CHANGED
@@ -2,10 +2,24 @@
|
|
2
2
|
# This is an example configuration file for the AdWords API client library.
|
3
3
|
# Please fill in the required fields, and copy it over to your home directory.
|
4
4
|
:authentication:
|
5
|
-
# Authentication method, methods currently supported:
|
5
|
+
# Authentication method, methods currently supported:
|
6
|
+
# OAuth2, OAuth, ClientLogin.
|
6
7
|
:method: ClientLogin
|
7
8
|
|
8
|
-
# Auth parameters for
|
9
|
+
# Auth parameters for OAuth2.0 method.
|
10
|
+
# Set the OAuth2 client id and secret. Register your application here to
|
11
|
+
# obtain these values:
|
12
|
+
# https://code.google.com/apis/console#access
|
13
|
+
#:oauth2_client_id: INSERT_OAUTH2_CLIENT_ID_HERE
|
14
|
+
#:oauth2_client_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE
|
15
|
+
# Optional, see: https://developers.google.com/accounts/docs/OAuth2WebServer
|
16
|
+
#:oauth2_callback: INSERT_OAUTH2_CALLBACK_URL_HERE
|
17
|
+
#:oauth2_state: INSERT_OAUTH2_STATE_HERE
|
18
|
+
#:oauth2_access_type: INSERT_OAUTH2_ACCESS_TYPE_HERE
|
19
|
+
#:oauth2_approval_prompt: INSERT_OAUTH2_APPROVAL_PROMPT_HERE
|
20
|
+
|
21
|
+
# Auth parameters for OAuth1.0a method.
|
22
|
+
# NOTE: OAuth1.0a method is deprecated, use OAuth2.0 instead.
|
9
23
|
# Set the OAuth consumer key and secret. Anonymous values can be used for
|
10
24
|
# testing, and real values can be obtained by registering your application:
|
11
25
|
# http://code.google.com/apis/accounts/docs/RegistrationForWebAppsAuto.html
|
@@ -19,6 +33,7 @@
|
|
19
33
|
#:oauth_token_secret: INSERT_OAUTH_TOKEN_SECRET_HERE
|
20
34
|
|
21
35
|
# Auth parameters for ClientLogin method.
|
36
|
+
# NOTE: ClientLogin method is deprecated, use OAuth2.0 instead.
|
22
37
|
:password: INSERT_YOUR_PASSWORD_HERE
|
23
38
|
:email: INSERT_YOUR_LOGIN_EMAIL_HERE
|
24
39
|
# To manage your auth tokens manually, use the 'auth_token' property.
|
@@ -18,7 +18,10 @@
|
|
18
18
|
# See the License for the specific language governing permissions and
|
19
19
|
# limitations under the License.
|
20
20
|
#
|
21
|
-
# This example illustrates how to use
|
21
|
+
# This example illustrates how to use OAuth1.0a authentication method.
|
22
|
+
#
|
23
|
+
# NOTE: OAuth1.0a authorization method is deprecated, use OAuth2.0 instead.
|
24
|
+
# See use_oauth2.rb for an example.
|
22
25
|
#
|
23
26
|
# Tags: CampaignService.get
|
24
27
|
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Encoding: utf-8
|
3
|
+
#
|
4
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
5
|
+
#
|
6
|
+
# Copyright:: Copyright 2012, Google Inc. All Rights Reserved.
|
7
|
+
#
|
8
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
17
|
+
# implied.
|
18
|
+
# See the License for the specific language governing permissions and
|
19
|
+
# limitations under the License.
|
20
|
+
#
|
21
|
+
# This example illustrates how to use OAuth2.0 authentication method.
|
22
|
+
#
|
23
|
+
# Tags: CampaignService.get
|
24
|
+
|
25
|
+
require 'adwords_api'
|
26
|
+
|
27
|
+
def use_oauth2()
|
28
|
+
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
29
|
+
# when called without parameters.
|
30
|
+
adwords = AdwordsApi::Api.new
|
31
|
+
|
32
|
+
# To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
|
33
|
+
# the configuration file or provide your own logger:
|
34
|
+
# adwords.logger = Logger.new('adwords_xml.log')
|
35
|
+
|
36
|
+
campaign_srv = adwords.service(:CampaignService, API_VERSION)
|
37
|
+
|
38
|
+
# Get all the campaigns for this account; empty selector.
|
39
|
+
selector = {
|
40
|
+
:fields => ['Id', 'Name', 'Status'],
|
41
|
+
:ordering => [
|
42
|
+
{:field => 'Name', :sort_order => 'ASCENDING'}
|
43
|
+
]
|
44
|
+
}
|
45
|
+
|
46
|
+
retry_count = 0
|
47
|
+
|
48
|
+
begin
|
49
|
+
response = campaign_srv.get(selector)
|
50
|
+
rescue AdsCommon::Errors::OAuth2VerificationRequired => e
|
51
|
+
if retry_count < MAX_RETRIES
|
52
|
+
puts "Hit Auth error, please navigate to URL:\n\t%s" % e.oauth_url
|
53
|
+
print 'log in and type the verification code: '
|
54
|
+
verification_code = gets.chomp
|
55
|
+
adwords.credential_handler.set_credential(
|
56
|
+
:oauth2_verification_code, verification_code)
|
57
|
+
retry_count += 1
|
58
|
+
retry
|
59
|
+
else
|
60
|
+
raise AdsCommon::Errors::AuthError, 'Failed to authenticate.'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if response and response[:entries]
|
65
|
+
campaigns = response[:entries]
|
66
|
+
campaigns.each do |campaign|
|
67
|
+
puts "Campaign ID %d, name '%s' and status '%s'" %
|
68
|
+
[campaign[:id], campaign[:name], campaign[:status]]
|
69
|
+
end
|
70
|
+
else
|
71
|
+
puts 'No campaigns were found.'
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
if __FILE__ == $0
|
76
|
+
API_VERSION = :v201109
|
77
|
+
MAX_RETRIES = 3
|
78
|
+
|
79
|
+
begin
|
80
|
+
use_oauth2()
|
81
|
+
|
82
|
+
# HTTP errors.
|
83
|
+
rescue AdsCommon::Errors::HttpError => e
|
84
|
+
puts "HTTP Error: %s" % e
|
85
|
+
|
86
|
+
# API errors.
|
87
|
+
rescue AdwordsApi::Errors::ApiException => e
|
88
|
+
puts "Message: %s" % e.message
|
89
|
+
puts 'Errors:'
|
90
|
+
e.errors.each_with_index do |error, index|
|
91
|
+
puts "\tError [%d]:" % (index + 1)
|
92
|
+
error.each do |field, value|
|
93
|
+
puts "\t\t%s: %s" % [field, value]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -18,7 +18,10 @@
|
|
18
18
|
# See the License for the specific language governing permissions and
|
19
19
|
# limitations under the License.
|
20
20
|
#
|
21
|
-
# This example illustrates how to use
|
21
|
+
# This example illustrates how to use OAuth1.0a authentication method.
|
22
|
+
#
|
23
|
+
# NOTE: OAuth1.0a authorization method is deprecated, use OAuth2.0 instead.
|
24
|
+
# See use_oauth2.rb for an example.
|
22
25
|
#
|
23
26
|
# Tags: CampaignService.get
|
24
27
|
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Encoding: utf-8
|
3
|
+
#
|
4
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
5
|
+
#
|
6
|
+
# Copyright:: Copyright 2012, Google Inc. All Rights Reserved.
|
7
|
+
#
|
8
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
17
|
+
# implied.
|
18
|
+
# See the License for the specific language governing permissions and
|
19
|
+
# limitations under the License.
|
20
|
+
#
|
21
|
+
# This example illustrates how to use OAuth2.0 authentication method.
|
22
|
+
#
|
23
|
+
# Tags: CampaignService.get
|
24
|
+
|
25
|
+
require 'adwords_api'
|
26
|
+
|
27
|
+
def use_oauth2()
|
28
|
+
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
29
|
+
# when called without parameters.
|
30
|
+
adwords = AdwordsApi::Api.new
|
31
|
+
|
32
|
+
# To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
|
33
|
+
# the configuration file or provide your own logger:
|
34
|
+
# adwords.logger = Logger.new('adwords_xml.log')
|
35
|
+
|
36
|
+
campaign_srv = adwords.service(:CampaignService, API_VERSION)
|
37
|
+
|
38
|
+
# Get all the campaigns for this account; empty selector.
|
39
|
+
selector = {
|
40
|
+
:fields => ['Id', 'Name', 'Status'],
|
41
|
+
:ordering => [
|
42
|
+
{:field => 'Name', :sort_order => 'ASCENDING'}
|
43
|
+
]
|
44
|
+
}
|
45
|
+
|
46
|
+
retry_count = 0
|
47
|
+
|
48
|
+
begin
|
49
|
+
response = campaign_srv.get(selector)
|
50
|
+
rescue AdsCommon::Errors::OAuth2VerificationRequired => e
|
51
|
+
if retry_count < MAX_RETRIES
|
52
|
+
puts "Hit Auth error, please navigate to URL:\n\t%s" % e.oauth_url
|
53
|
+
print 'log in and type the verification code: '
|
54
|
+
verification_code = gets.chomp
|
55
|
+
adwords.credential_handler.set_credential(
|
56
|
+
:oauth2_verification_code, verification_code)
|
57
|
+
retry_count += 1
|
58
|
+
retry
|
59
|
+
else
|
60
|
+
raise AdsCommon::Errors::AuthError, 'Failed to authenticate.'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if response and response[:entries]
|
65
|
+
campaigns = response[:entries]
|
66
|
+
campaigns.each do |campaign|
|
67
|
+
puts "Campaign ID %d, name '%s' and status '%s'" %
|
68
|
+
[campaign[:id], campaign[:name], campaign[:status]]
|
69
|
+
end
|
70
|
+
else
|
71
|
+
puts 'No campaigns were found.'
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
if __FILE__ == $0
|
76
|
+
API_VERSION = :v201109_1
|
77
|
+
MAX_RETRIES = 3
|
78
|
+
|
79
|
+
begin
|
80
|
+
use_oauth2()
|
81
|
+
|
82
|
+
# HTTP errors.
|
83
|
+
rescue AdsCommon::Errors::HttpError => e
|
84
|
+
puts "HTTP Error: %s" % e
|
85
|
+
|
86
|
+
# API errors.
|
87
|
+
rescue AdwordsApi::Errors::ApiException => e
|
88
|
+
puts "Message: %s" % e.message
|
89
|
+
puts 'Errors:'
|
90
|
+
e.errors.each_with_index do |error, index|
|
91
|
+
puts "\tError [%d]:" % (index + 1)
|
92
|
+
error.each do |field, value|
|
93
|
+
puts "\t\t%s: %s" % [field, value]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/adwords_api.rb
CHANGED
@@ -67,7 +67,7 @@ module AdwordsApi
|
|
67
67
|
version.to_s
|
68
68
|
AdwordsApi::ClientLoginHeaderHandler.new(
|
69
69
|
@credential_handler, auth_handler, namespace, auth_ns, version)
|
70
|
-
when :OAUTH
|
70
|
+
when :OAUTH, :OAUTH2
|
71
71
|
AdsCommon::SavonHeaders::OAuthHeaderHandler.new(
|
72
72
|
@credential_handler, auth_handler, namespace, version)
|
73
73
|
end
|
@@ -34,7 +34,7 @@ module AdwordsApi
|
|
34
34
|
# - version: services version
|
35
35
|
#
|
36
36
|
def initialize(credential_handler, auth_handler, namespace, auth_namespace,
|
37
|
-
|
37
|
+
version)
|
38
38
|
super(credential_handler, auth_handler, namespace, version)
|
39
39
|
@auth_namespace = auth_namespace
|
40
40
|
end
|
@@ -46,10 +46,9 @@ module AdwordsApi
|
|
46
46
|
# Args:
|
47
47
|
# - request: a HTTPI Request for extra configuration (unused)
|
48
48
|
# - soap: a Savon soap object to fill fields in
|
49
|
-
# - args: request parameters to adjust for namespaces
|
50
49
|
#
|
51
50
|
# Returns:
|
52
|
-
# -
|
51
|
+
# - modified soap structure
|
53
52
|
#
|
54
53
|
def prepare_request(request, soap)
|
55
54
|
super(request, soap)
|
@@ -57,6 +56,7 @@ module AdwordsApi
|
|
57
56
|
header_name = prepend_namespace(get_header_element_name())
|
58
57
|
soap.header[:attributes!][header_name] ||= {}
|
59
58
|
soap.header[:attributes!][header_name]['xmlns'] = @auth_namespace
|
59
|
+
return soap
|
60
60
|
end
|
61
61
|
|
62
62
|
private
|
@@ -74,7 +74,7 @@ module AdwordsApi
|
|
74
74
|
# Returns agent name and data for user-agent string generation.
|
75
75
|
def get_user_agent_data(extra_ids)
|
76
76
|
agent_app = @config.read('authentication.user_agent')
|
77
|
-
extra_ids << [
|
77
|
+
extra_ids << ['AwApi-Ruby/%s' % AdwordsApi::ApiConfig::CLIENT_LIB_VERSION]
|
78
78
|
return [extra_ids, agent_app]
|
79
79
|
end
|
80
80
|
|
data/lib/adwords_api/errors.rb
CHANGED
@@ -52,7 +52,7 @@ module AdwordsApi
|
|
52
52
|
'Authorization' =>
|
53
53
|
@auth_handler.auth_string(credentials, HTTPI::Request.new(url)),
|
54
54
|
'User-Agent' => @credential_handler.generate_http_user_agent(),
|
55
|
-
'clientCustomerId' => credentials[:client_customer_id],
|
55
|
+
'clientCustomerId' => credentials[:client_customer_id].to_s,
|
56
56
|
'developerToken' => credentials[:developer_token]
|
57
57
|
}
|
58
58
|
money_in_micros = @config.read('library.return_money_in_micros')
|
@@ -97,7 +97,7 @@ module AdwordsApi
|
|
97
97
|
# Send POST request for a report and returns Response object.
|
98
98
|
def get_report_response(report_definition, cid)
|
99
99
|
definition_text = get_report_definition_text(report_definition)
|
100
|
-
data =
|
100
|
+
data = '__rdxml=%s' % CGI.escape(definition_text)
|
101
101
|
url = @api.api_config.adhoc_report_download_url(
|
102
102
|
@api.config.read('service.environment'), @version)
|
103
103
|
headers = get_report_request_headers(url, cid)
|
@@ -115,7 +115,7 @@ module AdwordsApi
|
|
115
115
|
when Hash then report_definition_to_xml(report_definition)
|
116
116
|
else
|
117
117
|
raise AdwordsApi::Errors::InvalidReportDefinitionError,
|
118
|
-
|
118
|
+
'Unknown object for report definition: %s' %
|
119
119
|
report_definition.class
|
120
120
|
end
|
121
121
|
end
|
@@ -136,8 +136,8 @@ module AdwordsApi
|
|
136
136
|
def log_request(url, headers, body)
|
137
137
|
logger = @api.logger
|
138
138
|
logger.debug("Report request to: '%s'" % url)
|
139
|
-
logger.debug(
|
140
|
-
(headers.map {|k, v| [k, v].join(': ')}.join(', ')))
|
139
|
+
logger.debug('HTTP headers: [%s]' %
|
140
|
+
(headers.map { |k, v| [k, v].join(': ') }.join(', ')))
|
141
141
|
logger.debug(body)
|
142
142
|
end
|
143
143
|
|
@@ -154,13 +154,13 @@ module AdwordsApi
|
|
154
154
|
if matches
|
155
155
|
message = (matches[3].nil?) ? data : matches[3]
|
156
156
|
raise AdwordsApi::Errors::ReportError.new(response.code,
|
157
|
-
|
157
|
+
'Report download error occured: %s' % message)
|
158
158
|
end
|
159
159
|
end
|
160
160
|
# Check for error code.
|
161
161
|
unless response.code == 200
|
162
162
|
raise AdwordsApi::Errors::ReportError.new(response.code,
|
163
|
-
|
163
|
+
'Report download error occured, http code: %d, body: %s' %
|
164
164
|
[response.code, response.body])
|
165
165
|
end
|
166
166
|
return nil
|
@@ -202,7 +202,7 @@ module AdwordsApi
|
|
202
202
|
# Adds fields order hint to generator based on specification.
|
203
203
|
def add_report_definition_hash_order(node, name = :root)
|
204
204
|
def_order = REPORT_DEFINITION_ORDER[name]
|
205
|
-
var_order = def_order.reject {|field| !node.include?(field)}
|
205
|
+
var_order = def_order.reject { |field| !node.include?(field) }
|
206
206
|
node.keys.each do |key|
|
207
207
|
if REPORT_DEFINITION_ORDER.include?(key)
|
208
208
|
case node[key]
|
data/lib/adwords_api/utils.rb
CHANGED
data/lib/adwords_api/version.rb
CHANGED
@@ -57,13 +57,13 @@ GZIPPED_REPORT = "\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x00Sr.-.\xC9\xCFUptq\x0F\xF
|
|
57
57
|
|
58
58
|
class TestReportUtils < Test::Unit::TestCase
|
59
59
|
# Initialize tests.
|
60
|
-
def setup
|
60
|
+
def setup()
|
61
61
|
@api = AdwordsApi::Api.new
|
62
62
|
@report_utils = @api.report_utils(API_VERSION)
|
63
63
|
end
|
64
64
|
|
65
65
|
# Testing HTTP code 400.
|
66
|
-
def test_check_for_errors_400
|
66
|
+
def test_check_for_errors_400()
|
67
67
|
REPLY_TYPES.each do |reply_type|
|
68
68
|
begin
|
69
69
|
response = ResponseStub.new(400, reply_type[:reply])
|
@@ -77,7 +77,7 @@ class TestReportUtils < Test::Unit::TestCase
|
|
77
77
|
end
|
78
78
|
|
79
79
|
# Testing HTTP code 500.
|
80
|
-
def test_check_for_errors_500
|
80
|
+
def test_check_for_errors_500()
|
81
81
|
REPLY_TYPES.each do |reply_type|
|
82
82
|
begin
|
83
83
|
response = ResponseStub.new(500, nil)
|
@@ -90,7 +90,7 @@ class TestReportUtils < Test::Unit::TestCase
|
|
90
90
|
end
|
91
91
|
|
92
92
|
# Testing HTTP code 200 with success.
|
93
|
-
def test_check_for_errors_200_success
|
93
|
+
def test_check_for_errors_200_success()
|
94
94
|
response = ResponseStub.new(200, VALID_REPORT)
|
95
95
|
assert_nothing_raised do
|
96
96
|
@report_utils.check_for_errors(response)
|
@@ -98,7 +98,7 @@ class TestReportUtils < Test::Unit::TestCase
|
|
98
98
|
end
|
99
99
|
|
100
100
|
# Testing HTTP code 200 with failure.
|
101
|
-
def test_check_for_errors_200_success
|
101
|
+
def test_check_for_errors_200_success()
|
102
102
|
REPLY_TYPES.each do |reply_type|
|
103
103
|
begin
|
104
104
|
response = ResponseStub.new(200, reply_type[:reply])
|
@@ -112,7 +112,7 @@ class TestReportUtils < Test::Unit::TestCase
|
|
112
112
|
end
|
113
113
|
|
114
114
|
# Testing correct gzipped reply.
|
115
|
-
def test_gzipped_data
|
115
|
+
def test_gzipped_data()
|
116
116
|
report = (RUBY_VERSION >= '1.9.1') ?
|
117
117
|
GZIPPED_REPORT.force_encoding('UTF-8') : GZIPPED_REPORT
|
118
118
|
response = ResponseStub.new(200, report)
|
@@ -122,7 +122,7 @@ class TestReportUtils < Test::Unit::TestCase
|
|
122
122
|
end
|
123
123
|
|
124
124
|
# Tests generated hash order for root (complete set).
|
125
|
-
def test_add_report_definition_hash_order_root1
|
125
|
+
def test_add_report_definition_hash_order_root1()
|
126
126
|
node = {
|
127
127
|
:include_zero_impressions => false,
|
128
128
|
:download_format => 'CSV',
|
@@ -139,7 +139,7 @@ class TestReportUtils < Test::Unit::TestCase
|
|
139
139
|
end
|
140
140
|
|
141
141
|
# Tests generated hash order for root (incomplete set).
|
142
|
-
def test_add_report_definition_hash_order_root2
|
142
|
+
def test_add_report_definition_hash_order_root2()
|
143
143
|
node = {
|
144
144
|
:download_format => 'CSV',
|
145
145
|
:report_type => 'CRITERIA_PERFORMANCE_REPORT',
|
@@ -155,7 +155,7 @@ class TestReportUtils < Test::Unit::TestCase
|
|
155
155
|
end
|
156
156
|
|
157
157
|
# Tests generated hash order for whole structure.
|
158
|
-
def test_add_report_definition_hash_order_deep
|
158
|
+
def test_add_report_definition_hash_order_deep()
|
159
159
|
node = {
|
160
160
|
:report_name => 'report_name',
|
161
161
|
:report_type => 'CRITERIA_PERFORMANCE_REPORT',
|
@@ -25,7 +25,8 @@ require 'test/unit'
|
|
25
25
|
require 'adwords_api/utils'
|
26
26
|
|
27
27
|
class TestUtils < Test::Unit::TestCase
|
28
|
-
|
28
|
+
|
29
|
+
def test_map()
|
29
30
|
param1 = [
|
30
31
|
{:key => 'foo', :value => 'bar'},
|
31
32
|
{:key => 'baz', :value => 'zar'},
|
@@ -38,7 +39,7 @@ class TestUtils < Test::Unit::TestCase
|
|
38
39
|
assert_equal(result2, AdwordsApi::Utils::map(param2))
|
39
40
|
end
|
40
41
|
|
41
|
-
def test_operation_index_for_error
|
42
|
+
def test_operation_index_for_error()
|
42
43
|
error1 = {:field_path => 'operations[0].operand.adGroupId'}
|
43
44
|
assert_equal(0, AdwordsApi::Utils::operation_index_for_error(error1))
|
44
45
|
|
@@ -49,7 +50,7 @@ class TestUtils < Test::Unit::TestCase
|
|
49
50
|
assert_equal(nil, AdwordsApi::Utils::operation_index_for_error(error3))
|
50
51
|
end
|
51
52
|
|
52
|
-
def test_format_id
|
53
|
+
def test_format_id()
|
53
54
|
assert_equal('123-456-7890', AdwordsApi::Utils::format_id(1234567890))
|
54
55
|
assert_equal('234-567-8901', AdwordsApi::Utils::format_id('2345678901'))
|
55
56
|
assert_equal('345-678-9012', AdwordsApi::Utils::format_id('345-678-9012'))
|
@@ -28,8 +28,9 @@ require 'adwords_api'
|
|
28
28
|
require 'adwords_api/v201109/targeting_idea_service_registry'
|
29
29
|
|
30
30
|
class TestIssue31 < Test::Unit::TestCase
|
31
|
-
def setup
|
32
|
-
@registry =
|
31
|
+
def setup()
|
32
|
+
@registry =
|
33
|
+
AdwordsApi::V201109::TargetingIdeaService::TargetingIdeaServiceRegistry
|
33
34
|
end
|
34
35
|
|
35
36
|
def run_test(selector)
|
@@ -38,7 +39,7 @@ class TestIssue31 < Test::Unit::TestCase
|
|
38
39
|
return Gyoku.xml(result_hash)
|
39
40
|
end
|
40
41
|
|
41
|
-
def test_issue_31_single_xsi_type
|
42
|
+
def test_issue_31_single_xsi_type()
|
42
43
|
selector = {
|
43
44
|
:search_parameters => [
|
44
45
|
{:xsi_type => 'KeywordMatchTypeSearchParameter',
|
@@ -52,7 +53,7 @@ class TestIssue31 < Test::Unit::TestCase
|
|
52
53
|
'KeywordMatchTypeSearchParameter')
|
53
54
|
end
|
54
55
|
|
55
|
-
def test_issue_31_multiple_xsi_types
|
56
|
+
def test_issue_31_multiple_xsi_types()
|
56
57
|
selector = {
|
57
58
|
:search_parameters => [
|
58
59
|
{:xsi_type => 'AverageTargetedMonthlySearchesSearchParameter',
|
@@ -29,7 +29,7 @@ require 'adwords_api'
|
|
29
29
|
require 'adwords_api/v201109_1/mutate_job_service_registry'
|
30
30
|
|
31
31
|
class TestIssue63 < Test::Unit::TestCase
|
32
|
-
def setup
|
32
|
+
def setup()
|
33
33
|
@registry =
|
34
34
|
AdwordsApi::V201109_1::MutateJobService::MutateJobServiceRegistry
|
35
35
|
end
|
@@ -40,21 +40,21 @@ class TestIssue63 < Test::Unit::TestCase
|
|
40
40
|
return extractor.extract_result(data, :get_result)
|
41
41
|
end
|
42
42
|
|
43
|
-
def test_issue_63_single_mutate_error
|
43
|
+
def test_issue_63_single_mutate_error()
|
44
44
|
result = run_test(single_error_xml)
|
45
45
|
errors = result[:simple_mutate_result][:errors]
|
46
46
|
assert_kind_of(Array, errors)
|
47
47
|
assert_equal(1, errors.size)
|
48
48
|
end
|
49
49
|
|
50
|
-
def test_issue_63_multiple_mutate_errors
|
50
|
+
def test_issue_63_multiple_mutate_errors()
|
51
51
|
result = run_test(multiple_errors_xml)
|
52
52
|
errors = result[:simple_mutate_result][:errors]
|
53
53
|
assert_kind_of(Array, errors)
|
54
54
|
assert_equal(2, errors.size)
|
55
55
|
end
|
56
56
|
|
57
|
-
def single_error_xml
|
57
|
+
def single_error_xml()
|
58
58
|
return <<EOT
|
59
59
|
<?xml version="1.0"?>
|
60
60
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
data/test/suite_unittests.rb
CHANGED
@@ -27,8 +27,8 @@ $:.unshift File.expand_path('../../', __FILE__)
|
|
27
27
|
|
28
28
|
# AdWords API units tests.
|
29
29
|
adwords_mask = File.join(File.dirname(__FILE__), 'adwords_api', 'test_*.rb')
|
30
|
-
Dir.glob(adwords_mask).each {|file| require file}
|
30
|
+
Dir.glob(adwords_mask).each { |file| require file }
|
31
31
|
|
32
32
|
# Reported bugs tests.
|
33
33
|
bugs_mask = File.join(File.dirname(__FILE__), 'bugs', 'test_*.rb')
|
34
|
-
Dir.glob(bugs_mask).each {|file| require file}
|
34
|
+
Dir.glob(bugs_mask).each { |file| require file }
|
metadata
CHANGED
@@ -1,159 +1,48 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-adwords-api
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 6
|
9
|
+
- 2
|
10
|
+
version: 0.6.2
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Danial Klimkin
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 0.9.9
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0.9.9
|
30
|
-
- !ruby/object:Gem::Dependency
|
17
|
+
|
18
|
+
date: 2012-06-21 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
31
21
|
name: google-ads-common
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 0.7.1
|
38
|
-
type: :runtime
|
39
22
|
prerelease: false
|
40
|
-
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
41
24
|
none: false
|
42
|
-
requirements:
|
25
|
+
requirements:
|
43
26
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 5
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 7
|
32
|
+
- 3
|
33
|
+
version: 0.7.3
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
46
36
|
description: google-adwords-api is a AdWords API client library for Ruby
|
47
|
-
email:
|
37
|
+
email:
|
48
38
|
- api.dklimkin@gmail.com
|
49
39
|
executables: []
|
40
|
+
|
50
41
|
extensions: []
|
42
|
+
|
51
43
|
extra_rdoc_files: []
|
52
|
-
|
53
|
-
|
54
|
-
- examples/v201109_1/reporting/get_defined_reports.rb
|
55
|
-
- examples/v201109_1/reporting/get_campaign_stats.rb
|
56
|
-
- examples/v201109_1/reporting/parallel_report_download.rb
|
57
|
-
- examples/v201109_1/reporting/get_report_fields.rb
|
58
|
-
- examples/v201109_1/error_handling/handle_policy_violation_error.rb
|
59
|
-
- examples/v201109_1/error_handling/handle_two_factor_authorization_error.rb
|
60
|
-
- examples/v201109_1/error_handling/handle_captcha_challenge.rb
|
61
|
-
- examples/v201109_1/error_handling/handle_partial_failures.rb
|
62
|
-
- examples/v201109_1/targeting/lookup_location.rb
|
63
|
-
- examples/v201109_1/targeting/get_targetable_languages_and_carriers.rb
|
64
|
-
- examples/v201109_1/targeting/add_campaign_targeting_criteria.rb
|
65
|
-
- examples/v201109_1/targeting/get_campaign_targeting_criteria.rb
|
66
|
-
- examples/v201109_1/campaign_management/validate_text_ad.rb
|
67
|
-
- examples/v201109_1/campaign_management/add_experiment.rb
|
68
|
-
- examples/v201109_1/campaign_management/set_ad_parameters.rb
|
69
|
-
- examples/v201109_1/campaign_management/add_location_extension.rb
|
70
|
-
- examples/v201109_1/campaign_management/add_keywords_in_bulk.rb
|
71
|
-
- examples/v201109_1/campaign_management/promote_experiment.rb
|
72
|
-
- examples/v201109_1/campaign_management/get_all_disapproved_ads.rb
|
73
|
-
- examples/v201109_1/campaign_management/add_location_extension_override.rb
|
74
|
-
- examples/v201109_1/account_management/get_account_hierarchy.rb
|
75
|
-
- examples/v201109_1/account_management/get_account_changes.rb
|
76
|
-
- examples/v201109_1/account_management/get_client_unit_usage.rb
|
77
|
-
- examples/v201109_1/account_management/get_client_customer_id.rb
|
78
|
-
- examples/v201109_1/account_management/get_account_alerts.rb
|
79
|
-
- examples/v201109_1/account_management/create_account.rb
|
80
|
-
- examples/v201109_1/optimization/estimate_keyword_traffic.rb
|
81
|
-
- examples/v201109_1/optimization/get_keyword_bid_simulations.rb
|
82
|
-
- examples/v201109_1/optimization/get_keyword_ideas.rb
|
83
|
-
- examples/v201109_1/optimization/get_placement_ideas.rb
|
84
|
-
- examples/v201109_1/basic_operations/update_campaign.rb
|
85
|
-
- examples/v201109_1/basic_operations/get_campaigns.rb
|
86
|
-
- examples/v201109_1/basic_operations/get_ad_groups.rb
|
87
|
-
- examples/v201109_1/basic_operations/add_campaigns.rb
|
88
|
-
- examples/v201109_1/basic_operations/delete_ad_group.rb
|
89
|
-
- examples/v201109_1/basic_operations/delete_keyword.rb
|
90
|
-
- examples/v201109_1/basic_operations/delete_ad.rb
|
91
|
-
- examples/v201109_1/basic_operations/add_ad_groups.rb
|
92
|
-
- examples/v201109_1/basic_operations/update_ad_group.rb
|
93
|
-
- examples/v201109_1/basic_operations/get_keywords.rb
|
94
|
-
- examples/v201109_1/basic_operations/delete_campaign.rb
|
95
|
-
- examples/v201109_1/basic_operations/get_text_ads.rb
|
96
|
-
- examples/v201109_1/basic_operations/add_keywords.rb
|
97
|
-
- examples/v201109_1/basic_operations/add_text_ads.rb
|
98
|
-
- examples/v201109_1/basic_operations/pause_ad.rb
|
99
|
-
- examples/v201109_1/basic_operations/update_keyword.rb
|
100
|
-
- examples/v201109_1/misc/upload_image.rb
|
101
|
-
- examples/v201109_1/misc/get_all_images_and_videos.rb
|
102
|
-
- examples/v201109_1/misc/use_oauth.rb
|
103
|
-
- examples/v201109_1/remarketing/add_conversion_tracker.rb
|
104
|
-
- examples/v201109_1/remarketing/add_audience.rb
|
105
|
-
- examples/v201109/reporting/download_criteria_report.rb
|
106
|
-
- examples/v201109/reporting/get_defined_reports.rb
|
107
|
-
- examples/v201109/reporting/get_campaign_stats.rb
|
108
|
-
- examples/v201109/reporting/parallel_report_download.rb
|
109
|
-
- examples/v201109/reporting/get_report_fields.rb
|
110
|
-
- examples/v201109/error_handling/handle_policy_violation_error.rb
|
111
|
-
- examples/v201109/error_handling/handle_two_factor_authorization_error.rb
|
112
|
-
- examples/v201109/error_handling/handle_captcha_challenge.rb
|
113
|
-
- examples/v201109/error_handling/handle_partial_failures.rb
|
114
|
-
- examples/v201109/targeting/lookup_location.rb
|
115
|
-
- examples/v201109/targeting/get_targetable_languages_and_carriers.rb
|
116
|
-
- examples/v201109/targeting/add_campaign_targeting_criteria.rb
|
117
|
-
- examples/v201109/targeting/get_campaign_targeting_criteria.rb
|
118
|
-
- examples/v201109/campaign_management/validate_text_ad.rb
|
119
|
-
- examples/v201109/campaign_management/add_experiment.rb
|
120
|
-
- examples/v201109/campaign_management/set_ad_parameters.rb
|
121
|
-
- examples/v201109/campaign_management/add_location_extension.rb
|
122
|
-
- examples/v201109/campaign_management/add_keywords_in_bulk.rb
|
123
|
-
- examples/v201109/campaign_management/promote_experiment.rb
|
124
|
-
- examples/v201109/campaign_management/get_all_disapproved_ads.rb
|
125
|
-
- examples/v201109/campaign_management/add_location_extension_override.rb
|
126
|
-
- examples/v201109/account_management/get_account_hierarchy.rb
|
127
|
-
- examples/v201109/account_management/get_account_changes.rb
|
128
|
-
- examples/v201109/account_management/get_client_unit_usage.rb
|
129
|
-
- examples/v201109/account_management/get_client_customer_id.rb
|
130
|
-
- examples/v201109/account_management/get_account_alerts.rb
|
131
|
-
- examples/v201109/account_management/create_account.rb
|
132
|
-
- examples/v201109/optimization/estimate_keyword_traffic.rb
|
133
|
-
- examples/v201109/optimization/get_keyword_bid_simulations.rb
|
134
|
-
- examples/v201109/optimization/get_keyword_ideas.rb
|
135
|
-
- examples/v201109/optimization/get_placement_ideas.rb
|
136
|
-
- examples/v201109/basic_operations/update_campaign.rb
|
137
|
-
- examples/v201109/basic_operations/get_campaigns.rb
|
138
|
-
- examples/v201109/basic_operations/get_ad_groups.rb
|
139
|
-
- examples/v201109/basic_operations/add_campaigns.rb
|
140
|
-
- examples/v201109/basic_operations/delete_ad_group.rb
|
141
|
-
- examples/v201109/basic_operations/delete_keyword.rb
|
142
|
-
- examples/v201109/basic_operations/delete_ad.rb
|
143
|
-
- examples/v201109/basic_operations/add_ad_groups.rb
|
144
|
-
- examples/v201109/basic_operations/update_ad_group.rb
|
145
|
-
- examples/v201109/basic_operations/get_keywords.rb
|
146
|
-
- examples/v201109/basic_operations/delete_campaign.rb
|
147
|
-
- examples/v201109/basic_operations/get_text_ads.rb
|
148
|
-
- examples/v201109/basic_operations/add_keywords.rb
|
149
|
-
- examples/v201109/basic_operations/add_text_ads.rb
|
150
|
-
- examples/v201109/basic_operations/pause_ad.rb
|
151
|
-
- examples/v201109/basic_operations/update_keyword.rb
|
152
|
-
- examples/v201109/misc/upload_image.rb
|
153
|
-
- examples/v201109/misc/get_all_images_and_videos.rb
|
154
|
-
- examples/v201109/misc/use_oauth.rb
|
155
|
-
- examples/v201109/remarketing/add_conversion_tracker.rb
|
156
|
-
- examples/v201109/remarketing/add_audience.rb
|
44
|
+
|
45
|
+
files:
|
157
46
|
- lib/adwords_api/utils.rb
|
158
47
|
- lib/adwords_api/version.rb
|
159
48
|
- lib/adwords_api/report_utils.rb
|
@@ -306,33 +195,150 @@ files:
|
|
306
195
|
- test/adwords_api/test_credential_handler.rb
|
307
196
|
- test/adwords_api/test_api_config.rb
|
308
197
|
- test/adwords_api/test_utils.rb
|
198
|
+
- examples/v201109_1/reporting/download_criteria_report.rb
|
199
|
+
- examples/v201109_1/reporting/get_defined_reports.rb
|
200
|
+
- examples/v201109_1/reporting/get_campaign_stats.rb
|
201
|
+
- examples/v201109_1/reporting/parallel_report_download.rb
|
202
|
+
- examples/v201109_1/reporting/get_report_fields.rb
|
203
|
+
- examples/v201109_1/error_handling/handle_policy_violation_error.rb
|
204
|
+
- examples/v201109_1/error_handling/handle_two_factor_authorization_error.rb
|
205
|
+
- examples/v201109_1/error_handling/handle_captcha_challenge.rb
|
206
|
+
- examples/v201109_1/error_handling/handle_partial_failures.rb
|
207
|
+
- examples/v201109_1/targeting/lookup_location.rb
|
208
|
+
- examples/v201109_1/targeting/get_targetable_languages_and_carriers.rb
|
209
|
+
- examples/v201109_1/targeting/add_campaign_targeting_criteria.rb
|
210
|
+
- examples/v201109_1/targeting/get_campaign_targeting_criteria.rb
|
211
|
+
- examples/v201109_1/campaign_management/validate_text_ad.rb
|
212
|
+
- examples/v201109_1/campaign_management/add_experiment.rb
|
213
|
+
- examples/v201109_1/campaign_management/set_ad_parameters.rb
|
214
|
+
- examples/v201109_1/campaign_management/add_location_extension.rb
|
215
|
+
- examples/v201109_1/campaign_management/add_keywords_in_bulk.rb
|
216
|
+
- examples/v201109_1/campaign_management/promote_experiment.rb
|
217
|
+
- examples/v201109_1/campaign_management/get_all_disapproved_ads.rb
|
218
|
+
- examples/v201109_1/campaign_management/add_location_extension_override.rb
|
219
|
+
- examples/v201109_1/account_management/get_account_hierarchy.rb
|
220
|
+
- examples/v201109_1/account_management/get_account_changes.rb
|
221
|
+
- examples/v201109_1/account_management/get_client_unit_usage.rb
|
222
|
+
- examples/v201109_1/account_management/get_client_customer_id.rb
|
223
|
+
- examples/v201109_1/account_management/get_account_alerts.rb
|
224
|
+
- examples/v201109_1/account_management/create_account.rb
|
225
|
+
- examples/v201109_1/optimization/estimate_keyword_traffic.rb
|
226
|
+
- examples/v201109_1/optimization/get_keyword_bid_simulations.rb
|
227
|
+
- examples/v201109_1/optimization/get_keyword_ideas.rb
|
228
|
+
- examples/v201109_1/optimization/get_placement_ideas.rb
|
229
|
+
- examples/v201109_1/basic_operations/update_campaign.rb
|
230
|
+
- examples/v201109_1/basic_operations/get_campaigns.rb
|
231
|
+
- examples/v201109_1/basic_operations/get_ad_groups.rb
|
232
|
+
- examples/v201109_1/basic_operations/add_campaigns.rb
|
233
|
+
- examples/v201109_1/basic_operations/delete_ad_group.rb
|
234
|
+
- examples/v201109_1/basic_operations/delete_keyword.rb
|
235
|
+
- examples/v201109_1/basic_operations/delete_ad.rb
|
236
|
+
- examples/v201109_1/basic_operations/add_ad_groups.rb
|
237
|
+
- examples/v201109_1/basic_operations/update_ad_group.rb
|
238
|
+
- examples/v201109_1/basic_operations/get_keywords.rb
|
239
|
+
- examples/v201109_1/basic_operations/delete_campaign.rb
|
240
|
+
- examples/v201109_1/basic_operations/get_text_ads.rb
|
241
|
+
- examples/v201109_1/basic_operations/add_keywords.rb
|
242
|
+
- examples/v201109_1/basic_operations/add_text_ads.rb
|
243
|
+
- examples/v201109_1/basic_operations/pause_ad.rb
|
244
|
+
- examples/v201109_1/basic_operations/update_keyword.rb
|
245
|
+
- examples/v201109_1/misc/upload_image.rb
|
246
|
+
- examples/v201109_1/misc/get_all_images_and_videos.rb
|
247
|
+
- examples/v201109_1/misc/use_oauth.rb
|
248
|
+
- examples/v201109_1/misc/use_oauth2.rb
|
249
|
+
- examples/v201109_1/remarketing/add_conversion_tracker.rb
|
250
|
+
- examples/v201109_1/remarketing/add_audience.rb
|
251
|
+
- examples/v201109/reporting/download_criteria_report.rb
|
252
|
+
- examples/v201109/reporting/get_defined_reports.rb
|
253
|
+
- examples/v201109/reporting/get_campaign_stats.rb
|
254
|
+
- examples/v201109/reporting/parallel_report_download.rb
|
255
|
+
- examples/v201109/reporting/get_report_fields.rb
|
256
|
+
- examples/v201109/error_handling/handle_policy_violation_error.rb
|
257
|
+
- examples/v201109/error_handling/handle_two_factor_authorization_error.rb
|
258
|
+
- examples/v201109/error_handling/handle_captcha_challenge.rb
|
259
|
+
- examples/v201109/error_handling/handle_partial_failures.rb
|
260
|
+
- examples/v201109/targeting/lookup_location.rb
|
261
|
+
- examples/v201109/targeting/get_targetable_languages_and_carriers.rb
|
262
|
+
- examples/v201109/targeting/add_campaign_targeting_criteria.rb
|
263
|
+
- examples/v201109/targeting/get_campaign_targeting_criteria.rb
|
264
|
+
- examples/v201109/campaign_management/validate_text_ad.rb
|
265
|
+
- examples/v201109/campaign_management/add_experiment.rb
|
266
|
+
- examples/v201109/campaign_management/set_ad_parameters.rb
|
267
|
+
- examples/v201109/campaign_management/add_location_extension.rb
|
268
|
+
- examples/v201109/campaign_management/add_keywords_in_bulk.rb
|
269
|
+
- examples/v201109/campaign_management/promote_experiment.rb
|
270
|
+
- examples/v201109/campaign_management/get_all_disapproved_ads.rb
|
271
|
+
- examples/v201109/campaign_management/add_location_extension_override.rb
|
272
|
+
- examples/v201109/account_management/get_account_hierarchy.rb
|
273
|
+
- examples/v201109/account_management/get_account_changes.rb
|
274
|
+
- examples/v201109/account_management/get_client_unit_usage.rb
|
275
|
+
- examples/v201109/account_management/get_client_customer_id.rb
|
276
|
+
- examples/v201109/account_management/get_account_alerts.rb
|
277
|
+
- examples/v201109/account_management/create_account.rb
|
278
|
+
- examples/v201109/optimization/estimate_keyword_traffic.rb
|
279
|
+
- examples/v201109/optimization/get_keyword_bid_simulations.rb
|
280
|
+
- examples/v201109/optimization/get_keyword_ideas.rb
|
281
|
+
- examples/v201109/optimization/get_placement_ideas.rb
|
282
|
+
- examples/v201109/basic_operations/update_campaign.rb
|
283
|
+
- examples/v201109/basic_operations/get_campaigns.rb
|
284
|
+
- examples/v201109/basic_operations/get_ad_groups.rb
|
285
|
+
- examples/v201109/basic_operations/add_campaigns.rb
|
286
|
+
- examples/v201109/basic_operations/delete_ad_group.rb
|
287
|
+
- examples/v201109/basic_operations/delete_keyword.rb
|
288
|
+
- examples/v201109/basic_operations/delete_ad.rb
|
289
|
+
- examples/v201109/basic_operations/add_ad_groups.rb
|
290
|
+
- examples/v201109/basic_operations/update_ad_group.rb
|
291
|
+
- examples/v201109/basic_operations/get_keywords.rb
|
292
|
+
- examples/v201109/basic_operations/delete_campaign.rb
|
293
|
+
- examples/v201109/basic_operations/get_text_ads.rb
|
294
|
+
- examples/v201109/basic_operations/add_keywords.rb
|
295
|
+
- examples/v201109/basic_operations/add_text_ads.rb
|
296
|
+
- examples/v201109/basic_operations/pause_ad.rb
|
297
|
+
- examples/v201109/basic_operations/update_keyword.rb
|
298
|
+
- examples/v201109/misc/upload_image.rb
|
299
|
+
- examples/v201109/misc/get_all_images_and_videos.rb
|
300
|
+
- examples/v201109/misc/use_oauth.rb
|
301
|
+
- examples/v201109/misc/use_oauth2.rb
|
302
|
+
- examples/v201109/remarketing/add_conversion_tracker.rb
|
303
|
+
- examples/v201109/remarketing/add_audience.rb
|
309
304
|
- COPYING
|
310
305
|
- README
|
311
306
|
- ChangeLog
|
312
307
|
- adwords_api.yml
|
313
308
|
homepage: http://code.google.com/p/google-api-ads-ruby/
|
314
309
|
licenses: []
|
310
|
+
|
315
311
|
post_install_message:
|
316
312
|
rdoc_options: []
|
317
|
-
|
313
|
+
|
314
|
+
require_paths:
|
318
315
|
- lib
|
319
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
316
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
320
317
|
none: false
|
321
|
-
requirements:
|
322
|
-
- -
|
323
|
-
- !ruby/object:Gem::Version
|
324
|
-
|
325
|
-
|
318
|
+
requirements:
|
319
|
+
- - ">="
|
320
|
+
- !ruby/object:Gem::Version
|
321
|
+
hash: 3
|
322
|
+
segments:
|
323
|
+
- 0
|
324
|
+
version: "0"
|
325
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
326
326
|
none: false
|
327
|
-
requirements:
|
328
|
-
- -
|
329
|
-
- !ruby/object:Gem::Version
|
327
|
+
requirements:
|
328
|
+
- - ">="
|
329
|
+
- !ruby/object:Gem::Version
|
330
|
+
hash: 23
|
331
|
+
segments:
|
332
|
+
- 1
|
333
|
+
- 3
|
334
|
+
- 6
|
330
335
|
version: 1.3.6
|
331
336
|
requirements: []
|
337
|
+
|
332
338
|
rubyforge_project: google-adwords-api
|
333
339
|
rubygems_version: 1.8.24
|
334
340
|
signing_key:
|
335
341
|
specification_version: 3
|
336
342
|
summary: Ruby Client libraries for AdWords API
|
337
|
-
test_files:
|
343
|
+
test_files:
|
338
344
|
- test/suite_unittests.rb
|