adapi 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/.gitignore +3 -0
  2. data/GUIDELINES.markdown +61 -0
  3. data/README.markdown +79 -45
  4. data/Rakefile +31 -3
  5. data/adapi.gemspec +10 -3
  6. data/examples/add_ad_group.rb +1 -1
  7. data/examples/add_bare_ad_group.rb +1 -4
  8. data/examples/add_campaign.rb +1 -0
  9. data/examples/add_campaign_criteria.rb +27 -0
  10. data/examples/add_invalid_ad_group.rb +3 -1
  11. data/examples/add_invalid_text_ad.rb +1 -1
  12. data/examples/add_keywords.rb +1 -1
  13. data/examples/add_negative_campaign_criteria.rb +23 -0
  14. data/examples/add_text_ad.rb +1 -1
  15. data/examples/customize_configuration.rb +1 -2
  16. data/examples/delete_keyword.rb +1 -1
  17. data/examples/find_campaign.rb +5 -5
  18. data/examples/find_campaign_ad_groups.rb +1 -1
  19. data/examples/find_campaign_criteria.rb +103 -0
  20. data/examples/find_locations.rb +21 -0
  21. data/examples/rollback_campaign.rb +7 -6
  22. data/examples/update_campaign.rb +1 -1
  23. data/examples/update_campaign_status.rb +1 -1
  24. data/lib/adapi.rb +11 -9
  25. data/lib/adapi/ad/text_ad.rb +2 -1
  26. data/lib/adapi/ad_group.rb +13 -9
  27. data/lib/adapi/ad_param.rb +89 -0
  28. data/lib/adapi/api.rb +8 -0
  29. data/lib/adapi/campaign.rb +27 -18
  30. data/lib/adapi/campaign_criterion.rb +278 -0
  31. data/lib/adapi/campaign_target.rb +5 -123
  32. data/lib/adapi/config.rb +36 -31
  33. data/lib/adapi/constant_data.rb +13 -0
  34. data/lib/adapi/constant_data/language.rb +45 -0
  35. data/lib/adapi/keyword.rb +15 -5
  36. data/lib/adapi/location.rb +91 -0
  37. data/lib/adapi/version.rb +8 -1
  38. data/lib/httpi_request_monkeypatch.rb +4 -0
  39. data/test/config/adapi.yml.template +21 -0
  40. data/test/config/adwords_api.yml.template +10 -0
  41. data/test/integration/create_campaign_test.rb +54 -0
  42. data/test/test_helper.rb +2 -3
  43. data/test/unit/ad_group_test.rb +3 -4
  44. data/test/unit/ad_test.rb +1 -1
  45. data/test/unit/campaign_criterion_test.rb +23 -0
  46. data/test/unit/config_test.rb +52 -0
  47. metadata +48 -35
  48. data/examples/add_campaign_targets.rb +0 -26
  49. data/test/unit/campaign_target_test.rb +0 -51
data/test/unit/ad_test.rb CHANGED
@@ -4,7 +4,7 @@ require 'test_helper'
4
4
 
5
5
  module Adapi
6
6
  class AdTest < Test::Unit::TestCase
7
- include ActiveModel::Lint::Tests
7
+ # include ActiveModel::Lint::Tests
8
8
 
9
9
  def setup
10
10
  @model = Ad.new
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test_helper'
4
+
5
+ module Adapi
6
+ class CampaignCriterionTest < Test::Unit::TestCase
7
+
8
+ context "language alias" do
9
+
10
+ should "be converted to language id " do
11
+ assert_equal CampaignCriterion.create_criterion(:language, 'en'),
12
+ {:xsi_type => 'Language', :id => 1000}
13
+ end
14
+
15
+ should "be automatically converted to lowercase" do
16
+ assert_equal CampaignCriterion.create_criterion(:language, 'CS'),
17
+ {:xsi_type => 'Language', :id => 1021}
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ module Adapi
5
+ class ConfigTest < Test::Unit::TestCase
6
+
7
+ # FIXME how come that tests work without custom configurations settings?
8
+ # Adapi::Config.dir = 'test/config'
9
+ # Adapi::Config.filename = 'adapi.yml.template'
10
+
11
+ context "Loading adapi.yml" do
12
+ should "load the configuration" do
13
+ # because it could have been set in another test
14
+ # set default values
15
+ Adapi::Config.dir = 'test/config'
16
+ Adapi::Config.filename = 'adapi.yml.template'
17
+ @settings = Adapi::Config.settings(true)
18
+
19
+ assert_equal '555-666-7777', @settings[:default][:authentication][:client_customer_id]
20
+ assert_equal 'adapi_yml@example.com', @settings[:default][:authentication][:email]
21
+ assert_equal 'sandbox_email@example.com', @settings[:sandbox][:authentication][:email]
22
+ end
23
+ end
24
+
25
+ context "Loading adwords_api.yml" do
26
+ should "loads the configuration" do
27
+ # because it could have been set in another test
28
+ # set default values
29
+ Adapi::Config.dir = 'test/config'
30
+ Adapi::Config.filename = 'adwords_api.yml.template'
31
+ @settings = Adapi::Config.settings(true)
32
+
33
+ assert_equal '555-666-7777', @settings[:default][:authentication][:client_customer_id]
34
+ assert_equal 'adwords_api_yml@example.com', @settings[:default][:authentication][:email]
35
+ assert_nil @settings[:sandbox]
36
+ end
37
+ end
38
+
39
+
40
+ context "Config params can be overwritten and " do
41
+ should "correctly set Adapi::Config.adapi_dir" do
42
+ Adapi::Config.dir = 'adapi_dir'
43
+ assert_equal 'adapi_dir', Adapi::Config.dir
44
+ end
45
+
46
+ should "correctly set Adapi::Config.adapi_filename" do
47
+ Adapi::Config.filename = 'adapi_filename'
48
+ assert_equal 'adapi_filename', Adapi::Config.filename
49
+ end
50
+ end
51
+ end
52
+ end
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.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,33 +9,33 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-22 00:00:00.000000000Z
12
+ date: 2012-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-ads-common
16
- requirement: &15506360 !ruby/object:Gem::Requirement
16
+ requirement: &10751680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - =
20
20
  - !ruby/object:Gem::Version
21
- version: 0.5.0
21
+ version: 0.6.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *15506360
24
+ version_requirements: *10751680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: google-adwords-api
27
- requirement: &15455540 !ruby/object:Gem::Requirement
27
+ requirement: &10749800 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
- - - ~>
30
+ - - =
31
31
  - !ruby/object:Gem::Version
32
- version: 0.4.0
32
+ version: 0.5.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *15455540
35
+ version_requirements: *10749800
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activemodel
38
- requirement: &15454880 !ruby/object:Gem::Requirement
38
+ requirement: &10748340 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.1'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *15454880
46
+ version_requirements: *10748340
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
- requirement: &15454300 !ruby/object:Gem::Requirement
49
+ requirement: &10747280 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '3.1'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *15454300
57
+ version_requirements: *10747280
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &15453760 !ruby/object:Gem::Requirement
60
+ requirement: &10743320 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.9.2
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *15453760
68
+ version_requirements: *10743320
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: curb
71
- requirement: &15453080 !ruby/object:Gem::Requirement
71
+ requirement: &10742640 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0.7'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *15453080
79
+ version_requirements: *10742640
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: yard
82
- requirement: &15452120 !ruby/object:Gem::Requirement
82
+ requirement: &10740660 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0.7'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *15452120
90
+ version_requirements: *10740660
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rcov
93
- requirement: &15449500 !ruby/object:Gem::Requirement
93
+ requirement: &10739480 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0.9'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *15449500
101
+ version_requirements: *10739480
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: turn
104
- requirement: &15423440 !ruby/object:Gem::Requirement
104
+ requirement: &10738540 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - =
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: 0.8.2
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *15423440
112
+ version_requirements: *10738540
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: shoulda
115
- requirement: &15420900 !ruby/object:Gem::Requirement
115
+ requirement: &10737680 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *15420900
123
+ version_requirements: *10737680
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: fakeweb
126
- requirement: &15419460 !ruby/object:Gem::Requirement
126
+ requirement: &10732740 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *15419460
134
+ version_requirements: *10732740
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: factory_girl
137
- requirement: &15418480 !ruby/object:Gem::Requirement
137
+ requirement: &10729600 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *15418480
145
+ version_requirements: *10729600
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: minitest
148
- requirement: &15417640 !ruby/object:Gem::Requirement
148
+ requirement: &10726800 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,7 +153,7 @@ dependencies:
153
153
  version: '0'
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *15417640
156
+ version_requirements: *10726800
157
157
  description: This gem provides user-friendly interface to Google Adwords API.
158
158
  email:
159
159
  - lucastej@gmail.com
@@ -162,6 +162,7 @@ extensions: []
162
162
  extra_rdoc_files: []
163
163
  files:
164
164
  - .gitignore
165
+ - GUIDELINES.markdown
165
166
  - Gemfile
166
167
  - LICENSE
167
168
  - README.markdown
@@ -171,10 +172,11 @@ files:
171
172
  - examples/add_bare_ad_group.rb
172
173
  - examples/add_bare_campaign.rb
173
174
  - examples/add_campaign.rb
174
- - examples/add_campaign_targets.rb
175
+ - examples/add_campaign_criteria.rb
175
176
  - examples/add_invalid_ad_group.rb
176
177
  - examples/add_invalid_text_ad.rb
177
178
  - examples/add_keywords.rb
179
+ - examples/add_negative_campaign_criteria.rb
178
180
  - examples/add_text_ad.rb
179
181
  - examples/custom_settings.yml
180
182
  - examples/customize_configuration.rb
@@ -182,6 +184,8 @@ files:
182
184
  - examples/find_all_campaigns.rb
183
185
  - examples/find_campaign.rb
184
186
  - examples/find_campaign_ad_groups.rb
187
+ - examples/find_campaign_criteria.rb
188
+ - examples/find_locations.rb
185
189
  - examples/log_to_specific_account.rb
186
190
  - examples/rollback_campaign.rb
187
191
  - examples/update_campaign.rb
@@ -191,23 +195,32 @@ files:
191
195
  - lib/adapi/ad/text_ad.rb
192
196
  - lib/adapi/ad_group.rb
193
197
  - lib/adapi/ad_group_criterion.rb
198
+ - lib/adapi/ad_param.rb
194
199
  - lib/adapi/api.rb
195
200
  - lib/adapi/campaign.rb
201
+ - lib/adapi/campaign_criterion.rb
196
202
  - lib/adapi/campaign_target.rb
197
203
  - lib/adapi/config.rb
204
+ - lib/adapi/constant_data.rb
205
+ - lib/adapi/constant_data/language.rb
198
206
  - lib/adapi/keyword.rb
207
+ - lib/adapi/location.rb
199
208
  - lib/adapi/version.rb
200
209
  - lib/httpi_request_monkeypatch.rb
210
+ - test/config/adapi.yml.template
211
+ - test/config/adwords_api.yml.template
201
212
  - test/factories/.gitignore
202
213
  - test/factories/ad_group_factory.rb
203
214
  - test/factories/ad_text_factory.rb
215
+ - test/integration/create_campaign_test.rb
204
216
  - test/test_helper.rb
205
217
  - test/unit/.gitignore
206
218
  - test/unit/ad/ad_text_test.rb
207
219
  - test/unit/ad_group_test.rb
208
220
  - test/unit/ad_test.rb
209
- - test/unit/campaign_target_test.rb
210
- homepage: ''
221
+ - test/unit/campaign_criterion_test.rb
222
+ - test/unit/config_test.rb
223
+ homepage: https://github.com/lstejskal/adapi
211
224
  licenses: []
212
225
  post_install_message:
213
226
  rdoc_options: []
@@ -1,26 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'adapi'
4
-
5
- # create campaign
6
- require File.join(File.dirname(__FILE__), 'add_bare_campaign')
7
-
8
- # TODO we should be able call it from campaign instance, for example:
9
- # $campaign.set_targets(:language => [ 'en' ], ...)
10
-
11
- $campaign_target = Adapi::CampaignTarget.new(
12
- :campaign_id => $campaign[:id],
13
- :targets => {
14
- :language => [ 'en' ],
15
- :geo => {
16
- # :country => 'CZ'
17
- # :province => 'CZ-PR'
18
- # :city => { :city_name => 'Prague', :province_code => 'CZ-PR', :country_code => 'CZ' }
19
- :proximity => { :geo_point => '50.083333,14.366667', :radius => '50 km' }
20
- }
21
- }
22
- )
23
-
24
- $campaign_target.create
25
-
26
- p $campaign_target.attributes
@@ -1,51 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'test_helper'
4
-
5
- module Adapi
6
- class CampaignTargetTest < Test::Unit::TestCase
7
-
8
- context "self.create_targets" do
9
-
10
- should "parse :language targets" do
11
- assert_equal CampaignTarget.create_targets(:language, ['en', 'cs']),
12
- [{:language_code => 'en'}, {:language_code => 'cs'}]
13
- end
14
-
15
- should "automatically convert :language targets to lowercase" do
16
- assert_equal CampaignTarget.create_targets(:language, ['EN', 'CS']),
17
- [{:language_code => 'en'}, {:language_code => 'cs'}]
18
- end
19
-
20
- should "parse :geo / :country and :province targets" do
21
- assert_equal CampaignTarget.create_targets(:geo, {:country => 'CZ', :province => 'CZ-PR'}),
22
- [
23
- {:xsi_type => 'CountryTarget', :excluded => false, :country_code => 'CZ'},
24
- {:xsi_type => 'ProvinceTarget', :excluded => false, :province_code => 'CZ-PR'}
25
- ]
26
- end
27
-
28
- should "automatically convert :geo / :country and :province targets to uppercase" do
29
- assert_equal CampaignTarget.create_targets(:geo, {:country => 'cz', :province => 'cz-pr'}),
30
- [
31
- {:xsi_type => 'CountryTarget', :excluded => false, :country_code => 'CZ'},
32
- {:xsi_type => 'ProvinceTarget', :excluded => false, :province_code => 'CZ-PR'}
33
- ]
34
- end
35
-
36
- should "parse :geo / :proximity targets" do
37
- assert_equal CampaignTarget.create_targets(:geo,
38
- {:proximity => {:geo_point => '38.89859,-77.035971', :radius => '10 km'}}),
39
- [{ :xsi_type => 'ProximityTarget', :excluded => false,
40
- :radius_in_units => 10, :radius_distance_units => 'KILOMETERS',
41
- :geo_point => {
42
- :longitude_in_micro_degrees => 38898590,
43
- :latitude_in_micro_degrees => -77035971
44
- }
45
- }]
46
- end
47
-
48
- end
49
-
50
- end
51
- end