adapi 0.1.5 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +77 -75
- data/adapi.gemspec +5 -0
- data/examples/add_invalid_keywords.rb +4 -9
- data/examples/add_invalid_text_ad.rb +4 -13
- data/examples/delete_ad_group.rb +1 -1
- data/examples/log_to_specific_account.rb +6 -2
- data/examples/update_text_ad.rb +1 -1
- data/lib/adapi.rb +1 -1
- data/lib/adapi/api.rb +25 -3
- data/lib/adapi/campaign.rb +1 -1
- data/lib/adapi/version.rb +8 -36
- data/test/fixtures/adapi.yml +12 -21
- data/test/integration/create_ad_group_test.rb +1 -0
- data/test/integration/create_campaign_test.rb +1 -0
- data/test/integration/find_location_test.rb +1 -0
- data/test/integration_test_helper.rb +11 -0
- data/test/test_helper.rb +6 -0
- data/test/unit/ad_group_test.rb +0 -5
- data/test/unit/config_test.rb +1 -14
- metadata +51 -32
- data/examples/custom_settings.yml +0 -30
- data/examples/customize_configuration.rb +0 -18
- data/test/fixtures/adwords_api.yml +0 -14
- data/test/unit/ad_test.rb +0 -14
data/README.md
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# Adapi [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/lstejskal/adapi)
|
2
2
|
|
3
|
-
*NEWS:* new version with support for AdWords API v201209 and test accounts will be released before the end of February 2013.
|
4
|
-
|
5
3
|
## Description
|
6
4
|
|
7
5
|
Adapi (ADwords API) is a Ruby library for easy and painless work with Google
|
@@ -23,7 +21,7 @@ come from there, but adapi takes it several steps further:
|
|
23
21
|
Adapi is *still in development* and not nearly done yet! Version 1.0.0 should
|
24
22
|
have all planned functionality.
|
25
23
|
|
26
|
-
Adapi supports the latest version of AdWords API: *
|
24
|
+
Adapi supports the latest version of AdWords API: *v201209*.
|
27
25
|
|
28
26
|
## Installation
|
29
27
|
|
@@ -40,34 +38,38 @@ rake install
|
|
40
38
|
|
41
39
|
## Configuration
|
42
40
|
|
43
|
-
This section explains how to connect to specific AdWords account and client.
|
44
|
-
|
45
|
-
|
46
|
-
#### Configuration by adwords_api.yml
|
41
|
+
This section explains how to connect to specific AdWords account and client. The configuration
|
42
|
+
structure is quite similar to the configuration of `google-adwords-api` gem.
|
47
43
|
|
48
|
-
|
49
|
-
the same configuration will also work for adapi: `~/adwords_api.yml`
|
44
|
+
There are several options to choose from:
|
50
45
|
|
51
46
|
#### Single account set directly in code
|
52
47
|
|
53
48
|
```ruby
|
54
|
-
Adapi::Config.load_settings(:
|
55
|
-
:
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
:
|
62
|
-
:
|
49
|
+
Adapi::Config.load_settings( in_hash: {
|
50
|
+
production: {
|
51
|
+
authentication: {
|
52
|
+
method: "OAuth2",
|
53
|
+
oauth2_client_id: "abc",
|
54
|
+
oauth2_client_secret: "def",
|
55
|
+
oauth2_token: {
|
56
|
+
access_token: "123",
|
57
|
+
refresh_token: "456",
|
58
|
+
issued_at: "2013-03-03 13:33:39.734203841 +01:00",
|
59
|
+
expires_in: 3600,
|
60
|
+
id_token: nil
|
63
61
|
},
|
64
|
-
:
|
65
|
-
|
66
|
-
|
62
|
+
developer_token: "789",
|
63
|
+
user_agent: "My Adwords API Client",
|
64
|
+
client_customer_id: "555-666-7777"
|
65
|
+
},
|
66
|
+
service: {
|
67
|
+
environment: "PRODUCTION"
|
68
|
+
}
|
67
69
|
}
|
68
70
|
})
|
69
71
|
|
70
|
-
Adapi::Config.set(:
|
72
|
+
Adapi::Config.set(:production)
|
71
73
|
```
|
72
74
|
|
73
75
|
#### Multiple accounts set directly in code
|
@@ -76,31 +78,9 @@ You can set many AdWords accounts to connect to and switch between while running
|
|
76
78
|
the application. You can even update single values of the settings on-the-fly.
|
77
79
|
|
78
80
|
```ruby
|
79
|
-
Adapi::Config.load_settings(:
|
80
|
-
:
|
81
|
-
|
82
|
-
:method => 'ClientLogin',
|
83
|
-
:email => 'coca_cola_email@gmail.com',
|
84
|
-
:password => 'coca_cola_password',
|
85
|
-
:developer_token => 'coca_cola_developer_token',
|
86
|
-
:user_agent => 'Coca-Cola Adwords API Test'
|
87
|
-
},
|
88
|
-
:service => {
|
89
|
-
:environment => 'SANDBOX'
|
90
|
-
}
|
91
|
-
},
|
92
|
-
:pepsi => {
|
93
|
-
:authentication => {
|
94
|
-
:method => 'ClientLogin',
|
95
|
-
:email => 'pepsi_email@gmail.com',
|
96
|
-
:password => 'pepsi_password',
|
97
|
-
:developer_token => 'pepsi_developer_token',
|
98
|
-
:user_agent => 'Pepsi Adwords API Test'
|
99
|
-
},
|
100
|
-
:service => {
|
101
|
-
:environment => 'SANDBOX'
|
102
|
-
}
|
103
|
-
}
|
81
|
+
Adapi::Config.load_settings( in_hash: {
|
82
|
+
coca_cola: config_hash_for_coca_cola,
|
83
|
+
pepsi: config_hash_for_pepsi
|
104
84
|
})
|
105
85
|
|
106
86
|
# set to pepsi and specific client
|
@@ -120,54 +100,76 @@ Stored in `~/adapi.yml`. Supports multiple accounts, which are identifed by
|
|
120
100
|
aliases. Example:
|
121
101
|
|
122
102
|
```
|
103
|
+
|
123
104
|
:default:
|
124
105
|
:authentication:
|
125
|
-
:method:
|
126
|
-
:
|
127
|
-
:
|
128
|
-
:
|
129
|
-
|
106
|
+
:method: OAuth2
|
107
|
+
:oauth2_client_id: "abc"
|
108
|
+
:oauth2_client_secret: "def"
|
109
|
+
:oauth2_token:
|
110
|
+
:access_token: "123"
|
111
|
+
:refresh_token: "456"
|
112
|
+
:issued_at: 2013-03-03 13:33:39.734203841 +01:00
|
113
|
+
:expires_in: 3600
|
114
|
+
:id_token:
|
115
|
+
:developer_token: "789"
|
130
116
|
:user_agent: My Adwords API Client
|
117
|
+
:client_customer_id: 555-666-7777
|
131
118
|
:service:
|
132
119
|
:environment: PRODUCTION
|
120
|
+
:library:
|
121
|
+
:log_level: WARN
|
122
|
+
:log_path: /tmp/adapi.log
|
123
|
+
:log_pretty_format: true
|
133
124
|
|
134
|
-
:sandbox:
|
135
|
-
:authentication:
|
136
|
-
:method: ClientLogin
|
137
|
-
:email: sandbox_email@gmail.com
|
138
|
-
:password: sandbox_password
|
139
|
-
:developer_token: sandbox_token
|
140
|
-
:client_customer_id: 555-666-7777
|
141
|
-
:user_agent: Adwords API Test
|
142
|
-
:service:
|
143
|
-
:environment: SANDBOX
|
144
125
|
```
|
145
126
|
|
146
127
|
To tell adapi which account to use:
|
147
128
|
|
148
129
|
```ruby
|
149
|
-
Adapi::Config.set(:
|
130
|
+
Adapi::Config.set(:production)
|
150
131
|
```
|
151
132
|
|
152
133
|
`:default` account is, as name implies, used by default. If you don't have
|
153
134
|
`:default` account available, you have to manually set account alias to
|
154
135
|
`Adapi::Config`.
|
155
136
|
|
156
|
-
###
|
137
|
+
### How to get OAuth2 token
|
138
|
+
|
139
|
+
* get `oauth2_client_id` and `oauth2_client_secret`: [https://code.google.com/p/google-api-ads-ruby/wiki/OAuth2][https://code.google.com/p/google-api-ads-ruby/wiki/OAuth2]
|
140
|
+
|
141
|
+
* put them into adapi configuration file
|
142
|
+
|
143
|
+
* run following script:
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
require 'adapi'
|
147
|
+
require 'yaml'
|
148
|
+
|
149
|
+
adapi_object = Adapi::Location.new() # load any adapi object
|
150
|
+
adwords_api = adapi_object.adwords # get adwords object
|
151
|
+
|
152
|
+
# got to url and paste verification code to the script
|
153
|
+
oauth2_token = adwords.authorize() do |auth_url|
|
154
|
+
puts "Go to URL:\n\t%s" % auth_url
|
155
|
+
print 'log in and type the verification code: '
|
156
|
+
gets.chomp
|
157
|
+
end
|
158
|
+
|
159
|
+
puts oauth2_token.to_yaml
|
160
|
+
```
|
161
|
+
|
162
|
+
* put `oauth2_token` hash adapi configuration file
|
157
163
|
|
158
|
-
|
159
|
-
* if `~/adapi.yml`doesn't exist, try to load configuration from
|
160
|
-
`~/adwords_api.yml` (used by adwords-api gem)
|
161
|
-
* if there are no configuration files available, set configuration directly to
|
162
|
-
`Adapi::Config` (overrides previous settings)
|
164
|
+
Code taken from this google-adwords-api example: [https://code.google.com/p/google-api-ads-ruby/source/browse/adwords_api/examples/v201209/misc/use_oauth2.rb][https://code.google.com/p/google-api-ads-ruby/source/browse/adwords_api/examples/v201209/misc/use_oauth2.rb]
|
163
165
|
|
164
166
|
## API Version Support
|
165
167
|
|
166
|
-
Adapi supports the latest version of AdWords API: *
|
168
|
+
Adapi supports the latest version of AdWords API: *v201209*.
|
167
169
|
|
168
170
|
For support of earlier versions of AdWords API, downgrade to earlier
|
169
|
-
versions of adapi: 0.0.9 for *v201109_1*, 0.07 for *v201109*.
|
170
|
-
(You shoudn't need it though,
|
171
|
+
versions of adapi: 0.1.5 for *v201206*, 0.0.9 for *v201109_1*, 0.07 for *v201109*.
|
172
|
+
(You shoudn't need it though, older versions of AdWords API are
|
171
173
|
eventually shut down.) Latest revision for specific AdWords API version
|
172
174
|
is also marked by a tag.
|
173
175
|
|
@@ -178,8 +180,8 @@ and update your code accordingly. Adapi won't accept obsolete attributes etc.
|
|
178
180
|
|
179
181
|
## Unsupported AdWords services
|
180
182
|
|
181
|
-
Following AdWords services are not supported by adapi at the moment
|
182
|
-
|
183
|
+
Following AdWords services are not supported by adapi at the moment, and exist
|
184
|
+
only on my TODO list:
|
183
185
|
|
184
186
|
* Campaign Data Management
|
185
187
|
* ConversionTrackerService
|
@@ -433,5 +435,5 @@ Example of logger configuration:
|
|
433
435
|
|
434
436
|
## Author
|
435
437
|
|
436
|
-
2011-
|
438
|
+
2011-2013 Lukas Stejskal, Ataxo Interactive, a.s.
|
437
439
|
|
data/adapi.gemspec
CHANGED
@@ -37,9 +37,14 @@ Gem::Specification.new do |s|
|
|
37
37
|
|
38
38
|
s.add_development_dependency "yard", "~> 0.8"
|
39
39
|
s.add_development_dependency "turn", "~> 0.9.6"
|
40
|
+
# if this breaks budnle, run: bundle update shoulda-matchers
|
41
|
+
# this is a HOTFIX, can be removed when this bug is resolved:
|
42
|
+
# https://github.com/thoughtbot/shoulda-matchers/issues/235
|
43
|
+
s.add_development_dependency "shoulda-matchers", "1.4.1"
|
40
44
|
s.add_development_dependency "shoulda", "~> 3.1"
|
41
45
|
s.add_development_dependency "fakeweb", "~> 1.3"
|
42
46
|
s.add_development_dependency "factory_girl", "~> 3.3"
|
43
47
|
s.add_development_dependency "minitest", "~> 3.3"
|
48
|
+
s.add_development_dependency('mocha', '~> 0.13.3')
|
44
49
|
|
45
50
|
end
|
@@ -2,15 +2,10 @@
|
|
2
2
|
|
3
3
|
require 'adapi'
|
4
4
|
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#Adapi::Config.load_settings
|
11
|
-
#Adapi::Config.set(:production_settings)
|
12
|
-
#
|
13
|
-
#pp "Running in #{Adapi::Config.read[:service][:environment]}"
|
5
|
+
# Example work-flow:
|
6
|
+
# * try to add keywords which will trigger policy violation errors (PolicyViolationError)
|
7
|
+
# * adapi will perform exemption requests (check the adapi log for more details)
|
8
|
+
# * if keyword errors are exemptable, they will be eventually added
|
14
9
|
|
15
10
|
# create ad group
|
16
11
|
require_relative 'add_bare_ad_group'
|
@@ -1,21 +1,12 @@
|
|
1
1
|
|
2
2
|
require 'adapi'
|
3
3
|
|
4
|
-
# PolicyViolations will appear only in production, not in sandbox
|
5
|
-
#
|
6
|
-
# Adapi performs exemption requests on receiving policy violation errors.
|
7
|
-
# If text_ad errors are exemptable, they will eventually pass.
|
8
|
-
#
|
9
|
-
#Adapi::Config.load_settings
|
10
|
-
#Adapi::Config.set(:production_settings)
|
11
|
-
#
|
12
|
-
#pp "Running in #{Adapi::Config.read[:service][:environment]}"
|
13
|
-
|
14
4
|
require_relative 'add_bare_ad_group'
|
15
5
|
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
6
|
+
# Example workflow:
|
7
|
+
# * "ho", which is suspicious word in English, will trigger exemptable PolicyViolationError
|
8
|
+
# * adapi performs exemption request(s) and text_ad will eventually pass
|
9
|
+
|
19
10
|
$ad = Adapi::Ad::TextAd.create(
|
20
11
|
:ad_group_id => $ad_group[:id],
|
21
12
|
:headline => "Neo Blog - poznej ho",
|
data/examples/delete_ad_group.rb
CHANGED
@@ -12,7 +12,7 @@ Adapi::Config.load_settings(:in_hash => {
|
|
12
12
|
:user_agent => 'Coca-Cola Adwords API Test'
|
13
13
|
},
|
14
14
|
:service => {
|
15
|
-
:environment => '
|
15
|
+
:environment => 'PRODUCTION'
|
16
16
|
}
|
17
17
|
},
|
18
18
|
:pepsi => {
|
@@ -24,11 +24,15 @@ Adapi::Config.load_settings(:in_hash => {
|
|
24
24
|
:user_agent => 'Pepsi Adwords API Test'
|
25
25
|
},
|
26
26
|
:service => {
|
27
|
-
:environment => '
|
27
|
+
:environment => 'PRODUCTION'
|
28
28
|
}
|
29
29
|
}
|
30
30
|
})
|
31
31
|
|
32
32
|
Adapi::Config.set(:pepsi, :client_customer_id => '555-666-7777')
|
33
|
+
p "PEPSI"
|
34
|
+
p Adapi::Config.read
|
33
35
|
|
36
|
+
Adapi::Config.set(:coca_cola, :client_customer_id => '111-222-3333')
|
37
|
+
p "COCA_COLA"
|
34
38
|
p Adapi::Config.read
|
data/examples/update_text_ad.rb
CHANGED
data/lib/adapi.rb
CHANGED
data/lib/adapi/api.rb
CHANGED
@@ -44,9 +44,31 @@ module Adapi
|
|
44
44
|
|
45
45
|
raise "Missing Service Name" unless params[:service_name]
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
@adwords = params[:adwords_api_instance]
|
48
|
+
|
49
|
+
# REFACTOR
|
50
|
+
unless @adwords
|
51
|
+
@adwords = AdwordsApi::Api.new(Adapi::Config.read)
|
52
|
+
|
53
|
+
authentication_method = Adapi::Config.read[:authentication][:method].to_s.upcase
|
54
|
+
|
55
|
+
case authentication_method
|
56
|
+
when "CLIENTLOGIN", "OAUTH"
|
57
|
+
warn "#{authentication_method} is nearly obsolete, please update to OAuth2"
|
58
|
+
when "OAUTH2_JWT"
|
59
|
+
raise "OAUTH2_JWT is not yet implemented, please use OAUTH2 instead"
|
60
|
+
# authorize to oauth2
|
61
|
+
when "OAUTH2"
|
62
|
+
oauth2_token = Adapi::Config.read[:authentication][:oauth2_token]
|
63
|
+
|
64
|
+
if oauth2_token.nil? || oauth2_token.class != Hash
|
65
|
+
raise "Missing or invalid OAuth2 token"
|
66
|
+
end
|
67
|
+
|
68
|
+
@adwords.authorize({:oauth2_verification_code => $token})
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
50
72
|
@adwords.logger = LOGGER if LOGGER
|
51
73
|
@version = API_VERSION
|
52
74
|
@service = @adwords.service(params[:service_name].to_sym, @version)
|
data/lib/adapi/campaign.rb
CHANGED
@@ -8,7 +8,7 @@ module Adapi
|
|
8
8
|
class Campaign < Api
|
9
9
|
|
10
10
|
NETWORK_SETTING_KEYS = [ :target_google_search, :target_search_network,
|
11
|
-
:target_content_network, :
|
11
|
+
:target_content_network, :target_partner_search_network ]
|
12
12
|
|
13
13
|
ATTRIBUTES = [ :name, :status, :serving_status, :start_date, :end_date, :budget,
|
14
14
|
:bidding_strategy, :network_setting, :campaign_stats, :criteria, :ad_groups,
|
data/lib/adapi/version.rb
CHANGED
@@ -1,10 +1,17 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module Adapi
|
4
|
-
VERSION = "0.
|
4
|
+
VERSION = "0.2.0"
|
5
5
|
|
6
6
|
# CHANGELOG:
|
7
7
|
#
|
8
|
+
# 0.2.0
|
9
|
+
# updated to AdWords API version v201209
|
10
|
+
# switched authentication to OAuth2
|
11
|
+
# updated README
|
12
|
+
# updated tests and examples
|
13
|
+
# removed compatibility of config setting with adwords-api
|
14
|
+
#
|
8
15
|
# 0.1.5
|
9
16
|
# updated gems - second try to fix the "bundle install" infinite loop
|
10
17
|
#
|
@@ -44,39 +51,4 @@ module Adapi
|
|
44
51
|
# added conversion of legacy province_code to province_name in location search
|
45
52
|
# added tests for Campaign, CampaignCriterion and Location service
|
46
53
|
# added Getting Started section to README
|
47
|
-
#
|
48
|
-
# 0.0.7
|
49
|
-
# fix Location search by country code
|
50
|
-
# hotfix OAuth
|
51
|
-
#
|
52
|
-
# 0.0.6
|
53
|
-
# updated to latest adwords-api and ads-common gems, which fix many issues with AdWords API version v201109
|
54
|
-
# fix CampaignCriterion service
|
55
|
-
# fix examples
|
56
|
-
#
|
57
|
-
# 0.0.5
|
58
|
-
# converted to AdWords API version v201109
|
59
|
-
# moved from CampaignTarget to CampaignCriterion
|
60
|
-
# implemented Location and Language finders
|
61
|
-
# started writing integration tests
|
62
|
-
# added logging of SOAP requests
|
63
|
-
#
|
64
|
-
# 0.0.4
|
65
|
-
# changed README to markdown format
|
66
|
-
# updated DSL for creating campaign and campaign target
|
67
|
-
# implemented find methods for campaigns and ad groups
|
68
|
-
# implemented getting complete campaigns (in one hash with targets, ad groups, keywords and ads)
|
69
|
-
#
|
70
|
-
# 0.0.3
|
71
|
-
# converted to ActiveModel
|
72
|
-
# moved common functionality to Api class
|
73
|
-
# changed http client to curb and hotfix ssl authentication bug in HTTPI
|
74
|
-
# added basic error handling
|
75
|
-
# changed DSL for Campaign attributes
|
76
|
-
# changed Ad model to general Ad model and moved TextAd to separate model
|
77
|
-
# added support for more target types and changed DSL for CampaignTarget
|
78
|
-
# converted to Ruby 1.9.2 (should work in Ruby 1.8.7 as well)
|
79
|
-
#
|
80
|
-
# 0.0.2
|
81
|
-
# [FIX] switched google gem dependencies from edge to stable release
|
82
54
|
end
|
data/test/fixtures/adapi.yml
CHANGED
@@ -1,30 +1,21 @@
|
|
1
1
|
|
2
2
|
:default:
|
3
3
|
:authentication:
|
4
|
-
:method:
|
5
|
-
:
|
6
|
-
:
|
7
|
-
:
|
8
|
-
|
4
|
+
:method: OAuth2
|
5
|
+
:oauth2_client_id: "abc"
|
6
|
+
:oauth2_client_secret: "def"
|
7
|
+
:oauth2_token:
|
8
|
+
:access_token: "123"
|
9
|
+
:refresh_token: "456"
|
10
|
+
:issued_at: 2013-03-03 13:33:39.734203841 +01:00
|
11
|
+
:expires_in: 3600
|
12
|
+
:id_token:
|
13
|
+
:developer_token: "789"
|
9
14
|
:user_agent: My Adwords API Client
|
15
|
+
:client_customer_id: 555-666-7777
|
10
16
|
:service:
|
11
17
|
:environment: PRODUCTION
|
12
18
|
:library:
|
13
19
|
:log_level: WARN
|
14
|
-
:log_path: /tmp/
|
15
|
-
# :log_pretty_format is set to :false by default
|
16
|
-
|
17
|
-
:sandbox:
|
18
|
-
:authentication:
|
19
|
-
:method: ClientLogin
|
20
|
-
:email: sandbox_email@gmail.com
|
21
|
-
:password: sandbox_password
|
22
|
-
:developer_token: sandbox_token
|
23
|
-
:client_customer_id: 555-666-7777
|
24
|
-
:user_agent: Adwords API Test
|
25
|
-
:service:
|
26
|
-
:environment: SANDBOX
|
27
|
-
:library:
|
28
|
-
:log_level: DEBUG
|
29
|
-
:log_path: /tmp/adapi_sandbox.log
|
20
|
+
:log_path: /tmp/adapi.log
|
30
21
|
:log_pretty_format: true
|
data/test/test_helper.rb
CHANGED
@@ -9,6 +9,7 @@ require 'turn'
|
|
9
9
|
require 'shoulda'
|
10
10
|
require 'fakeweb'
|
11
11
|
require 'factory_girl'
|
12
|
+
require 'mocha/setup'
|
12
13
|
|
13
14
|
# always test the latest version of the gem
|
14
15
|
# TODO make it an option only through ENV variable switch
|
@@ -20,6 +21,11 @@ Dir[ File.join(File.dirname(__FILE__), 'factories', '*.rb') ].each { |f| require
|
|
20
21
|
class Test::Unit::TestCase
|
21
22
|
FakeWeb.allow_net_connect = false
|
22
23
|
|
24
|
+
def setup
|
25
|
+
# omit OAuth2 authorization for tests
|
26
|
+
AdwordsApi::Api.any_instance.stubs(:authorize).returns(nil)
|
27
|
+
end
|
28
|
+
|
23
29
|
# many integration tests need to use campaign or ad group
|
24
30
|
# instead of creating them in every test, we do it here
|
25
31
|
#
|
data/test/unit/ad_group_test.rb
CHANGED
data/test/unit/config_test.rb
CHANGED
@@ -12,20 +12,7 @@ module Adapi
|
|
12
12
|
@settings = Adapi::Config.settings(true)
|
13
13
|
|
14
14
|
assert_equal '555-666-7777', @settings[:default][:authentication][:client_customer_id]
|
15
|
-
|
16
|
-
assert_equal 'sandbox_email@gmail.com', @settings[:sandbox][:authentication][:email]
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context "Loading adwords_api.yml" do
|
21
|
-
should "loads the configuration" do
|
22
|
-
Adapi::Config.dir = 'test/fixtures'
|
23
|
-
Adapi::Config.filename = 'adwords_api.yml'
|
24
|
-
@settings = Adapi::Config.settings(true)
|
25
|
-
|
26
|
-
assert_equal '555-666-7777', @settings[:default][:authentication][:client_customer_id]
|
27
|
-
assert_equal 'default_email@gmail.com', @settings[:default][:authentication][:email]
|
28
|
-
assert_nil @settings[:sandbox]
|
15
|
+
assert_instance_of Hash, @settings[:default][:authentication][:oauth2_token]
|
29
16
|
end
|
30
17
|
end
|
31
18
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
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: 2013-
|
12
|
+
date: 2013-03-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-ads-common
|
16
|
-
requirement: &
|
16
|
+
requirement: &6871560 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - =
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.9.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *6871560
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: google-adwords-api
|
27
|
-
requirement: &
|
27
|
+
requirement: &6884860 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - =
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.8.1
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *6884860
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activemodel
|
38
|
-
requirement: &
|
38
|
+
requirement: &6878440 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 3.2.12
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *6878440
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activesupport
|
49
|
-
requirement: &
|
49
|
+
requirement: &6891600 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 3.2.12
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *6891600
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rake
|
60
|
-
requirement: &
|
60
|
+
requirement: &6897540 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.9.6
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *6897540
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: curb
|
71
|
-
requirement: &
|
71
|
+
requirement: &6908740 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.8.3
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *6908740
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: yard
|
82
|
-
requirement: &
|
82
|
+
requirement: &6905520 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0.8'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *6905520
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: turn
|
93
|
-
requirement: &
|
93
|
+
requirement: &6903680 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,21 @@ dependencies:
|
|
98
98
|
version: 0.9.6
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *6903680
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: shoulda-matchers
|
104
|
+
requirement: &6912040 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - =
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.4.1
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *6912040
|
102
113
|
- !ruby/object:Gem::Dependency
|
103
114
|
name: shoulda
|
104
|
-
requirement: &
|
115
|
+
requirement: &6924660 !ruby/object:Gem::Requirement
|
105
116
|
none: false
|
106
117
|
requirements:
|
107
118
|
- - ~>
|
@@ -109,10 +120,10 @@ dependencies:
|
|
109
120
|
version: '3.1'
|
110
121
|
type: :development
|
111
122
|
prerelease: false
|
112
|
-
version_requirements: *
|
123
|
+
version_requirements: *6924660
|
113
124
|
- !ruby/object:Gem::Dependency
|
114
125
|
name: fakeweb
|
115
|
-
requirement: &
|
126
|
+
requirement: &6922840 !ruby/object:Gem::Requirement
|
116
127
|
none: false
|
117
128
|
requirements:
|
118
129
|
- - ~>
|
@@ -120,10 +131,10 @@ dependencies:
|
|
120
131
|
version: '1.3'
|
121
132
|
type: :development
|
122
133
|
prerelease: false
|
123
|
-
version_requirements: *
|
134
|
+
version_requirements: *6922840
|
124
135
|
- !ruby/object:Gem::Dependency
|
125
136
|
name: factory_girl
|
126
|
-
requirement: &
|
137
|
+
requirement: &6935460 !ruby/object:Gem::Requirement
|
127
138
|
none: false
|
128
139
|
requirements:
|
129
140
|
- - ~>
|
@@ -131,10 +142,10 @@ dependencies:
|
|
131
142
|
version: '3.3'
|
132
143
|
type: :development
|
133
144
|
prerelease: false
|
134
|
-
version_requirements: *
|
145
|
+
version_requirements: *6935460
|
135
146
|
- !ruby/object:Gem::Dependency
|
136
147
|
name: minitest
|
137
|
-
requirement: &
|
148
|
+
requirement: &6934660 !ruby/object:Gem::Requirement
|
138
149
|
none: false
|
139
150
|
requirements:
|
140
151
|
- - ~>
|
@@ -142,7 +153,18 @@ dependencies:
|
|
142
153
|
version: '3.3'
|
143
154
|
type: :development
|
144
155
|
prerelease: false
|
145
|
-
version_requirements: *
|
156
|
+
version_requirements: *6934660
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: mocha
|
159
|
+
requirement: &6934040 !ruby/object:Gem::Requirement
|
160
|
+
none: false
|
161
|
+
requirements:
|
162
|
+
- - ~>
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: 0.13.3
|
165
|
+
type: :development
|
166
|
+
prerelease: false
|
167
|
+
version_requirements: *6934040
|
146
168
|
description: This gem provides user-friendly interface to Google Adwords API.
|
147
169
|
email:
|
148
170
|
- lucastej@gmail.com
|
@@ -169,8 +191,6 @@ files:
|
|
169
191
|
- examples/add_negative_campaign_criteria.rb
|
170
192
|
- examples/add_text_ad.rb
|
171
193
|
- examples/add_text_ads.rb
|
172
|
-
- examples/custom_settings.yml
|
173
|
-
- examples/customize_configuration.rb
|
174
194
|
- examples/delete_ad_group.rb
|
175
195
|
- examples/delete_keyword.rb
|
176
196
|
- examples/delete_text_ad.rb
|
@@ -216,15 +236,14 @@ files:
|
|
216
236
|
- test/factories/ad_text_factory.rb
|
217
237
|
- test/factories/campaign_factory.rb
|
218
238
|
- test/fixtures/adapi.yml
|
219
|
-
- test/fixtures/adwords_api.yml
|
220
239
|
- test/integration/create_ad_group_test.rb
|
221
240
|
- test/integration/create_campaign_test.rb
|
222
241
|
- test/integration/find_location_test.rb
|
242
|
+
- test/integration_test_helper.rb
|
223
243
|
- test/test_helper.rb
|
224
244
|
- test/unit/.gitignore
|
225
245
|
- test/unit/ad/ad_text_test.rb
|
226
246
|
- test/unit/ad_group_test.rb
|
227
|
-
- test/unit/ad_test.rb
|
228
247
|
- test/unit/campaign_criterion_test.rb
|
229
248
|
- test/unit/campaign_test.rb
|
230
249
|
- test/unit/config_test.rb
|
@@ -243,7 +262,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
243
262
|
version: '0'
|
244
263
|
segments:
|
245
264
|
- 0
|
246
|
-
hash:
|
265
|
+
hash: 153566960593043723
|
247
266
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
248
267
|
none: false
|
249
268
|
requirements:
|
@@ -252,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
252
271
|
version: '0'
|
253
272
|
segments:
|
254
273
|
- 0
|
255
|
-
hash:
|
274
|
+
hash: 153566960593043723
|
256
275
|
requirements: []
|
257
276
|
rubyforge_project: adapi
|
258
277
|
rubygems_version: 1.8.15
|
@@ -1,30 +0,0 @@
|
|
1
|
-
|
2
|
-
:default:
|
3
|
-
:authentication:
|
4
|
-
:method: ClientLogin
|
5
|
-
:email: default_email@gmail.com
|
6
|
-
:password: default_password
|
7
|
-
:developer_token: default_token
|
8
|
-
:client_customer_id: 555-666-7777
|
9
|
-
:user_agent: My Adwords API Client
|
10
|
-
:service:
|
11
|
-
:environment: PRODUCTION
|
12
|
-
:library:
|
13
|
-
:log_level: WARN
|
14
|
-
:log_path: /tmp/adapi_production.log
|
15
|
-
# :log_pretty_format is set to :false by default
|
16
|
-
|
17
|
-
:sandbox:
|
18
|
-
:authentication:
|
19
|
-
:method: ClientLogin
|
20
|
-
:email: sandbox_email@gmail.com
|
21
|
-
:password: sandbox_password
|
22
|
-
:developer_token: sandbox_token
|
23
|
-
:client_customer_id: 555-666-7777
|
24
|
-
:user_agent: Adwords API Test
|
25
|
-
:service:
|
26
|
-
:environment: SANDBOX
|
27
|
-
:library:
|
28
|
-
:log_level: DEBUG
|
29
|
-
:log_path: /tmp/adapi_sandbox.log
|
30
|
-
:log_pretty_format: true
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'adapi'
|
4
|
-
|
5
|
-
# this example shows how to load custom settings
|
6
|
-
|
7
|
-
Adapi::Config.load_settings(
|
8
|
-
:dir => File.expand_path(File.dirname(__FILE__)),
|
9
|
-
:filename => 'custom_settings.yml'
|
10
|
-
)
|
11
|
-
|
12
|
-
# :default account is set automatically
|
13
|
-
p "Default settings:"
|
14
|
-
p Adapi::Config.read[:authentication][:email]
|
15
|
-
|
16
|
-
Adapi::Config.set(:sandbox)
|
17
|
-
p "Set :sandbox account:"
|
18
|
-
p Adapi::Config.read[:authentication][:email]
|
@@ -1,14 +0,0 @@
|
|
1
|
-
|
2
|
-
:authentication:
|
3
|
-
:method: ClientLogin
|
4
|
-
:email: default_email@gmail.com
|
5
|
-
:password: default_password
|
6
|
-
:developer_token: default_token
|
7
|
-
:client_customer_id: 555-666-7777
|
8
|
-
:user_agent: My Adwords API Client
|
9
|
-
:service:
|
10
|
-
:environment: PRODUCTION
|
11
|
-
:library:
|
12
|
-
:log_level: WARN
|
13
|
-
:log_path: /tmp/adapi_production.log
|
14
|
-
# :log_pretty_format is set to :false by default
|