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 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: *v201206*.
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
- There are several options to choose from:
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
- If you already have `google-adwords-api` gem configured and use just one account,
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(:in_hash => {
55
- :sandbox => {
56
- :authentication => {
57
- :method => "ClientLogin"
58
- :email => "sandbox_email@gmail.com",
59
- :password => "sandbox_password",
60
- :developer_token => "sandbox_token",
61
- :client_customer_id => "555-666-7777",
62
- :user_agent => "Adwords API Test"
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
- :service => {
65
- :environment => "SANDBOX"
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(:sandbox)
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(:in_hash => {
80
- :coca_cola => {
81
- :authentication => {
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: ClientLogin
126
- :email: default_email@gmail.com
127
- :password: default_password
128
- :developer_token: default_token
129
- :client_customer_id: 777-666-5555
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(:sandbox)
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
- ### Authentication workflow
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
- * try to load configuration from `~/adapi.yml`
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: *v201206*.
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, because older versions of AdWords API are
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. However,
182
- they will be implemented (this also serves as TODO list):
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-2012 Lukas Stejskal, Ataxo Interactive, a.s.
438
+ 2011-2013 Lukas Stejskal, Ataxo Interactive, a.s.
437
439
 
@@ -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
- # Errors will appear only in production, not in sandbox
6
- #
7
- # Adapi performs exemption requests on receiving policy violation errors.
8
- # If keyword errors are exemptable, they will eventually pass.
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
- # PS: exemptable PolicyViolationError is triggered by "ho":
17
- # legimitateword in Czech, but suspicious word in English
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",
@@ -8,4 +8,4 @@ $ad_group.delete
8
8
 
9
9
  $ad_group = Adapi::AdGroup.find(:first, :id => $ad_group.id, :campaign_id => $campaign.id)
10
10
 
11
- puts "AdGroup status is now set to: " + $ad_group.status
11
+ puts "TRYING TO FIND IT: " + ($ad_group.present? ? $ad_group.attributes : "nil")
@@ -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 => 'SANDBOX'
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 => 'SANDBOX'
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
@@ -4,7 +4,7 @@ require 'adapi'
4
4
  require_relative 'add_text_ad'
5
5
 
6
6
  $new_ad = $ad.update(
7
- :status => 'ACTIVE',
7
+ :status => 'ENABLED',
8
8
  :headline => "Code like Trinity",
9
9
  :description1 => 'Need mad update skills?',
10
10
  :description2 => 'Check out my updates!',
@@ -47,7 +47,7 @@ HTTPI.adapter = :curb
47
47
  HTTPI.log = false # supress HTTPI output
48
48
 
49
49
  module Adapi
50
- API_VERSION = :v201206
50
+ API_VERSION = :v201209
51
51
  end
52
52
 
53
53
  if RUBY_VERSION < '1.9'
@@ -44,9 +44,31 @@ module Adapi
44
44
 
45
45
  raise "Missing Service Name" unless params[:service_name]
46
46
 
47
- # if params[:api_login] in nil, default login data are used
48
- # from ~/adwords_api.yml
49
- @adwords = params[:adwords_api_instance] || AdwordsApi::Api.new(Adapi::Config.read)
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)
@@ -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, :target_content_contextual, :target_partner_search_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,
@@ -1,10 +1,17 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Adapi
4
- VERSION = "0.1.5"
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
@@ -1,30 +1,21 @@
1
1
 
2
2
  :default:
3
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
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/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
20
+ :log_path: /tmp/adapi.log
30
21
  :log_pretty_format: true
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'test_helper'
4
+ require 'integration_test_helper'
4
5
 
5
6
  module Adapi
6
7
  class AdGroupCreateTest < Test::Unit::TestCase
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'test_helper'
4
+ require 'integration_test_helper'
4
5
 
5
6
  module Adapi
6
7
  class CampaignCreateTest < Test::Unit::TestCase
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'test_helper'
4
+ require 'integration_test_helper'
4
5
 
5
6
  module Adapi
6
7
  class FindLocationTest < Test::Unit::TestCase
@@ -0,0 +1,11 @@
1
+
2
+ # this is a monkeypatch for integration tests
3
+ #
4
+ class Test::Unit::TestCase
5
+ FakeWeb.allow_net_connect = true
6
+
7
+ def setup
8
+ # allow OAuth2 authorization for integration tests
9
+ AdwordsApi::Api.any_instance.unstub(:authorize)
10
+ end
11
+ end
@@ -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
  #
@@ -4,11 +4,6 @@ require 'test_helper'
4
4
 
5
5
  module Adapi
6
6
  class AdGroupTest < Test::Unit::TestCase
7
- # include ActiveModel::Lint::Tests
8
-
9
- def setup
10
- @model = AdGroup.new
11
- end
12
7
 
13
8
  context "valid new instance" do
14
9
  setup do
@@ -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
- assert_equal 'default_email@gmail.com', @settings[:default][:authentication][:email]
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.1.5
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-02-22 00:00:00.000000000 Z
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: &25836340 !ruby/object:Gem::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: *25836340
24
+ version_requirements: *6871560
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: google-adwords-api
27
- requirement: &25835220 !ruby/object:Gem::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: *25835220
35
+ version_requirements: *6884860
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activemodel
38
- requirement: &25833860 !ruby/object:Gem::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: *25833860
46
+ version_requirements: *6878440
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
- requirement: &25867140 !ruby/object:Gem::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: *25867140
57
+ version_requirements: *6891600
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &25865140 !ruby/object:Gem::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: *25865140
68
+ version_requirements: *6897540
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: curb
71
- requirement: &25864680 !ruby/object:Gem::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: *25864680
79
+ version_requirements: *6908740
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: yard
82
- requirement: &25863940 !ruby/object:Gem::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: *25863940
90
+ version_requirements: *6905520
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: turn
93
- requirement: &25862600 !ruby/object:Gem::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: *25862600
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: &25861480 !ruby/object:Gem::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: *25861480
123
+ version_requirements: *6924660
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: fakeweb
115
- requirement: &25895380 !ruby/object:Gem::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: *25895380
134
+ version_requirements: *6922840
124
135
  - !ruby/object:Gem::Dependency
125
136
  name: factory_girl
126
- requirement: &25894140 !ruby/object:Gem::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: *25894140
145
+ version_requirements: *6935460
135
146
  - !ruby/object:Gem::Dependency
136
147
  name: minitest
137
- requirement: &25893240 !ruby/object:Gem::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: *25893240
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: -3720972372896659817
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: -3720972372896659817
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
@@ -1,14 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'test_helper'
4
-
5
- module Adapi
6
- class AdTest < Test::Unit::TestCase
7
- # include ActiveModel::Lint::Tests
8
-
9
- def setup
10
- @model = Ad.new
11
- end
12
-
13
- end
14
- end