adapi 0.1.5 → 0.2.0

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/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