sem4r 0.1.2 → 0.1.3

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.
Files changed (175) hide show
  1. data/Gemfile +13 -2
  2. data/Gemfile.lock +13 -7
  3. data/README.rdoc +44 -7
  4. data/Rakefile +2 -122
  5. data/VERSION.yml +1 -1
  6. data/bin/sem +1 -0
  7. data/examples_sem4r/01_get_account.rb +1 -0
  8. data/examples_sem4r/02_get_info.rb +1 -0
  9. data/examples_sem4r/03_list_ad.rb +1 -0
  10. data/examples_sem4r/04_list_keywords.rb +1 -0
  11. data/examples_sem4r/05_request_report.rb +25 -14
  12. data/examples_sem4r/{05_request_report_2010.rb → 06_request_report_definition.rb} +2 -4
  13. data/examples_sem4r/{06_create_campaigns.rb → 07_create_campaigns.rb} +1 -0
  14. data/examples_sem4r/{07_create_campaigns_block.rb → 08_create_campaigns_block.rb} +1 -0
  15. data/examples_sem4r/{07_create_campaigns_simple.rb → 09_create_campaigns_simple.rb} +1 -0
  16. data/examples_sem4r/{08_ad_params.rb → 10_ad_params.rb} +1 -0
  17. data/examples_sem4r/{09_targeting_idea.rb → 11_targeting_idea.rb} +1 -0
  18. data/examples_sem4r/{10_get_location.rb → 12_get_location.rb} +1 -0
  19. data/examples_sem4r/{11_submit_bulk_job.rb → 13_submit_bulk_job.rb} +1 -1
  20. data/examples_sem4r/{12_list_bulk_job.rb → 14_list_bulk_job.rb} +3 -0
  21. data/examples_sem4r/30_prune_empty_adgroup.rb +1 -0
  22. data/examples_sem4r/31_empty_accounts.rb +1 -0
  23. data/examples_sem4r/example_helper.rb +2 -1
  24. data/lib/sem4r/ad_group/ad_group.rb +22 -7
  25. data/lib/sem4r/ad_group/ad_group_bids.rb +1 -1
  26. data/lib/sem4r/ad_group/ad_group_service.rb +12 -5
  27. data/lib/sem4r/ad_group_ad/ad_group_ad.rb +1 -0
  28. data/lib/sem4r/ad_group_ad/ad_group_ad_operations.rb +1 -0
  29. data/lib/sem4r/ad_group_ad/ad_group_ad_service.rb +14 -9
  30. data/lib/sem4r/ad_group_ad/ad_group_mobile_ad.rb +16 -25
  31. data/lib/sem4r/ad_group_ad/ad_group_text_ad.rb +18 -14
  32. data/lib/sem4r/ad_group_criterion/ad_group_criterion.rb +27 -19
  33. data/lib/sem4r/ad_group_criterion/ad_group_criterion_bids.rb +2 -1
  34. data/lib/sem4r/ad_group_criterion/ad_group_criterion_operations.rb +1 -0
  35. data/lib/sem4r/ad_group_criterion/ad_group_criterion_service.rb +9 -4
  36. data/lib/sem4r/ad_group_criterion/criterion.rb +1 -0
  37. data/lib/sem4r/ad_group_criterion/criterion_keyword.rb +1 -0
  38. data/lib/sem4r/ad_group_criterion/criterion_placement.rb +1 -0
  39. data/lib/sem4r/ad_param/ad_param.rb +24 -8
  40. data/lib/sem4r/ad_param/ad_param_service.rb +8 -5
  41. data/lib/sem4r/adwords.rb +232 -76
  42. data/lib/sem4r/base.rb +1 -1
  43. data/lib/sem4r/bulk_mutate_job/bulk_mutate_job.rb +41 -35
  44. data/lib/sem4r/bulk_mutate_job/bulk_mutate_job_account_extension.rb +49 -15
  45. data/lib/sem4r/bulk_mutate_job/bulk_mutate_job_selector.rb +29 -20
  46. data/lib/sem4r/bulk_mutate_job/bulk_mutate_job_service.rb +13 -14
  47. data/lib/sem4r/bulk_mutate_job/job_operations.rb +1 -1
  48. data/lib/sem4r/campaign/campaign.rb +1 -0
  49. data/lib/sem4r/campaign/campaign_account_extension.rb +2 -1
  50. data/lib/sem4r/campaign/campaign_service.rb +9 -5
  51. data/lib/sem4r/credentials.rb +11 -5
  52. data/lib/sem4r/geo_location/address.rb +56 -0
  53. data/lib/sem4r/geo_location/geo_location_account_extension.rb +27 -6
  54. data/lib/sem4r/geo_location/geo_location_selector.rb +57 -0
  55. data/lib/sem4r/geo_location/geo_location_service.rb +9 -16
  56. data/lib/sem4r/info/info_account_extension.rb +3 -2
  57. data/lib/sem4r/info/info_selector.rb +2 -1
  58. data/lib/sem4r/info/info_service.rb +10 -3
  59. data/lib/sem4r/operation.rb +39 -20
  60. data/lib/sem4r/report_definition/report_definition.rb +37 -19
  61. data/lib/sem4r/report_definition/report_definition_account_extension.rb +66 -16
  62. data/lib/sem4r/report_definition/report_definition_operation.rb +2 -2
  63. data/lib/sem4r/report_definition/report_definition_selector.rb +1 -1
  64. data/lib/sem4r/report_definition/report_definition_service.rb +11 -7
  65. data/lib/sem4r/report_definition/report_field.rb +3 -2
  66. data/lib/sem4r/sem4r_templates.rb +77 -0
  67. data/lib/sem4r/{services/service.rb → service.rb} +23 -23
  68. data/lib/sem4r/targeting_idea/targeting_idea.rb +4 -4
  69. data/lib/sem4r/targeting_idea/targeting_idea_account_extension.rb +1 -1
  70. data/lib/sem4r/targeting_idea/targeting_idea_selector.rb +6 -6
  71. data/lib/sem4r/targeting_idea/targeting_idea_service.rb +7 -5
  72. data/lib/sem4r/v13_account/account_account_extension.rb +7 -10
  73. data/lib/sem4r/v13_account/account_service.rb +10 -4
  74. data/lib/sem4r/v13_account/billing_address.rb +2 -2
  75. data/lib/sem4r/v13_report/report_service.rb +11 -9
  76. data/lib/sem4r.rb +46 -31
  77. data/lib/{sem4r/cli → sem4r_cli}/cli_helpers.rb +3 -2
  78. data/lib/{sem4r/cli/cli_command.rb → sem4r_cli/cli_mini_framework.rb} +77 -32
  79. data/lib/{sem4r/cli/cli_common_args.rb → sem4r_cli/cli_sem.rb} +177 -157
  80. data/lib/{sem4r/cli/commands/cli_list_ads.rb → sem4r_cli/commands/cli_ads.rb} +7 -9
  81. data/lib/sem4r_cli/commands/cli_campaign.rb +69 -0
  82. data/lib/{sem4r/cli/commands/cli_list_client.rb → sem4r_cli/commands/cli_clients.rb} +2 -2
  83. data/lib/{sem4r/cli → sem4r_cli}/commands/cli_ideas.rb +35 -27
  84. data/lib/{sem4r/cli → sem4r_cli}/commands/cli_info.rb +3 -4
  85. data/lib/{sem4r/cli/commands/cli_repdef.rb → sem4r_cli/commands/cli_job.rb} +57 -55
  86. data/lib/{sem4r/cli/commands/cli_list_keywords.rb → sem4r_cli/commands/cli_keywords.rb} +14 -13
  87. data/lib/sem4r_cli/commands/cli_profile.rb +138 -0
  88. data/lib/{sem4r/cli/commands/cli_report.rb → sem4r_cli/commands/cli_repdef.rb} +67 -20
  89. data/lib/{sem4r/cli/commands/cli_request_report.rb → sem4r_cli/commands/cli_report.rb} +82 -19
  90. data/lib/sem4r_cli.rb +5 -7
  91. data/lib/sem4r_soap/http_connector.rb +206 -0
  92. data/lib/{soap_helpers → sem4r_soap}/soap_attributes.rb +8 -3
  93. data/lib/{sem4r/services → sem4r_soap}/soap_dumper.rb +36 -20
  94. data/lib/{sem4r/services → sem4r_soap}/soap_error.rb +5 -2
  95. data/lib/sem4r_soap/soap_response.rb +75 -0
  96. data/lib/sem4r_soap/soap_service.rb +137 -0
  97. data/lib/{sem4r/cli/cli_sem.rb → sem4r_soap/soap_service_v13.rb} +27 -28
  98. data/lib/sem4r_soap/soap_service_v2010.rb +80 -0
  99. data/lib/sem4r_soap.rb +17 -0
  100. data/sem4r.gemspec +93 -58
  101. data/spec/build_fixtures.rb +49 -42
  102. data/spec/fixtures/password.example.yml +3 -0
  103. data/spec/fixtures/sem4r.example.yml +6 -0
  104. data/spec/fixtures/{services/error.xml → soap_error.xml} +0 -0
  105. data/spec/fixtures/soap_error2.xml +29 -0
  106. data/spec/helpers/dump_interceptor.rb +90 -0
  107. data/spec/helpers/fixtures_bulk_mutate_job.rb +48 -0
  108. data/spec/helpers/fixtures_geo_location.rb +45 -0
  109. data/{lib/sem4r/campaign_criterion/campaign_criterion_service.rb → spec/helpers/fixtures_info.rb} +10 -6
  110. data/spec/helpers/fixtures_report_definition.rb +65 -0
  111. data/spec/{rspec_hash.rb → helpers/rspec_hash.rb} +1 -0
  112. data/spec/{rspec_matchers.rb → helpers/rspec_matchers.rb} +46 -19
  113. data/spec/{rspec_sem4r_helper.rb → helpers/rspec_sem4r_helper.rb} +19 -16
  114. data/spec/{sem4r_stubs.rb → helpers/sem4r_stubs.rb} +5 -4
  115. data/spec/rspec_helper.rb +4 -4
  116. data/spec/sem4r/account_spec.rb +2 -3
  117. data/spec/sem4r/ad_group/ad_group_service_spec.rb +1 -1
  118. data/spec/sem4r/ad_group/ad_group_spec.rb +1 -1
  119. data/spec/sem4r/ad_group_ad/ad_group_ad_operation_spec.rb +3 -3
  120. data/spec/sem4r/adwords_spec.rb +62 -39
  121. data/{lib/sem4r/cli/commands/cli_list_campaign.rb → spec/sem4r/bulk_mutate_job/bulk_mutate_job_selector_spec.rb} +14 -11
  122. data/spec/sem4r/bulk_mutate_job/bulk_mutate_job_service_spec.rb +2 -3
  123. data/spec/sem4r/bulk_mutate_job/bulk_mutate_job_spec.rb +23 -17
  124. data/spec/sem4r/bulk_mutate_job/fixtures/get-list_job-req.xml +35 -0
  125. data/spec/sem4r/bulk_mutate_job/fixtures/get-list_job-res.xml +417 -0
  126. data/spec/sem4r/bulk_mutate_job/fixtures/mutate-add_job-req.xml +106 -0
  127. data/spec/sem4r/bulk_mutate_job/fixtures/mutate-add_job-res.xml +48 -0
  128. data/spec/sem4r/bulk_mutate_job/job_operation_spec.rb +5 -7
  129. data/spec/sem4r/campaign/campaign_service_spec.rb +2 -2
  130. data/spec/sem4r/credentials_spec.rb +10 -8
  131. data/spec/sem4r/geo_location/address_spec.rb +62 -0
  132. data/spec/sem4r/geo_location/fixtures/get-req.xml +42 -0
  133. data/spec/sem4r/geo_location/fixtures/get-res.xml +60 -0
  134. data/spec/sem4r/info/fixtures/get-req.xml +34 -0
  135. data/spec/sem4r/info/fixtures/get-res.xml +27 -0
  136. data/spec/sem4r/nokogiri_parsing_spec.rb +1 -0
  137. data/spec/sem4r/operation_spec.rb +72 -0
  138. data/spec/sem4r/report_definition/fixtures/get-list-repdef-req.xml +22 -0
  139. data/spec/sem4r/report_definition/fixtures/get-list-repdef-res.xml +73 -0
  140. data/spec/sem4r/report_definition/fixtures/getReportFields-req.xml +24 -0
  141. data/spec/sem4r/report_definition/fixtures/getReportFields-res.xml +1199 -0
  142. data/spec/sem4r/report_definition/fixtures/mutate-add-report-req.xml +63 -0
  143. data/spec/sem4r/report_definition/fixtures/mutate-add-report-res.xml +68 -0
  144. data/spec/sem4r/report_definition/report_definition_service_spec.rb +5 -5
  145. data/spec/sem4r/report_definition/report_definition_spec.rb +28 -43
  146. data/{lib/sem4r/cli/commands/cli_list_report.rb → spec/sem4r/report_definition/report_field_spec.rb} +12 -10
  147. data/spec/sem4r/rexml_parsing_spec.rb +1 -0
  148. data/spec/sem4r/{services/service_spec.rb → service_spec.rb} +1 -1
  149. data/spec/sem4r/targeting_idea/targeting_idea_selector_spec.rb +1 -1
  150. data/spec/sem4r/targeting_idea/targeting_idea_service_spec.rb +1 -1
  151. data/spec/sem4r/targeting_idea/targeting_idea_spec.rb +1 -1
  152. data/spec/sem4r/v13_account/account_service_spec.rb +2 -2
  153. data/spec/sem4r/v13_report/report_service_spec.rb +2 -2
  154. data/spec/{sem4r/cli → sem4r_cli}/cli_spec.rb +22 -27
  155. data/spec/{soap_helpers → sem4r_soap}/soap_attributes_spec.rb +3 -3
  156. data/spec/{sem4r/services/soap_message_v13_spec.rb → sem4r_soap/soap_response_spec.rb} +10 -15
  157. data/spec/{sem4r/services/soap_call_spec.rb → sem4r_soap/soap_service_spec.rb} +35 -54
  158. data/tasks/jeweler.rake +66 -0
  159. data/tasks/rspec.rake +21 -0
  160. data/tasks/sem4r.rake +25 -0
  161. data/tasks/yard.rake +31 -0
  162. metadata +173 -76
  163. data/lib/sem4r/ad_extension_override/ad_extension_override_service.rb +0 -30
  164. data/lib/sem4r/api_counters.rb +0 -8
  165. data/lib/sem4r/campaign_target/campaign_target_service.rb +0 -30
  166. data/lib/sem4r/cli/commands/cli_download_report.rb +0 -82
  167. data/lib/sem4r/services/http_connector.rb +0 -93
  168. data/lib/sem4r/services/soap_call.rb +0 -122
  169. data/lib/sem4r/services/soap_connector.rb +0 -139
  170. data/lib/sem4r/services/soap_message_v13.rb +0 -135
  171. data/lib/sem4r/services/soap_message_v2010.rb +0 -184
  172. data/lib/sem4r/v13_traffic_estimator/traffic_estimator_service.rb +0 -30
  173. data/spec/aggregates_rspec_helper.rb +0 -59
  174. data/spec/sem4r/report_definition/fixtures/mutate_add-req.xml +0 -24
  175. data/spec/sem4r/report_definition/fixtures/mutate_add-req_orig.xml +0 -45
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -61,7 +62,10 @@ module Sem4r
61
62
  @image = MobileAdImage.new(self, &block)
62
63
  end
63
64
 
64
- def xml(t)
65
+ #
66
+ # @private
67
+ #
68
+ def _xml(t)
65
69
  t.adGroupId ad_group.id
66
70
  t.ad("xsi:type" => "MobileAd") do |ad|
67
71
  ad.headline headline
@@ -83,32 +87,19 @@ module Sem4r
83
87
  t.status status
84
88
  end
85
89
 
86
- def to_xml(tag)
87
- builder = Builder::XmlMarkup.new
88
- builder.tag!(tag, "xsi:type" => "AdGroupAd") do |t|
89
- xml(t)
90
- # t.adGroupId ad_group.id
91
- # t.ad("xsi:type" => "MobileAd") do |ad|
92
- # ad.headline headline
93
- # ad.description description
94
- # unless markups.empty?
95
- # markups.each do |m|
96
- # ad.markupLanguages m
97
- # end
98
- # end
99
- # unless carriers.empty?
100
- # carriers.each do |carrier|
101
- # ad.mobileCarriers carrier
102
- # end
103
- # end
104
- # ad.businessName business_name
105
- # ad.countryCode country_code
106
- # ad.phoneNumber phone_number
107
- # end
108
- # t.status status
90
+ def xml(t, tag = nil)
91
+ if tag
92
+ t.__send__(tag, {"xsi:type" => "AdGroupAd"}) { |t| _xml(t) }
93
+ else
94
+ _xml(t)
109
95
  end
110
96
  end
111
97
 
98
+ def to_xml(tag)
99
+ xml(Builder::XmlMarkup.new, tag)
100
+ end
101
+
102
+
112
103
  def self.from_element(ad_group, el)
113
104
  new(ad_group) do
114
105
  @id = el.at_xpath("id").text.strip.to_i
@@ -124,7 +115,7 @@ module Sem4r
124
115
 
125
116
  def save
126
117
  unless @id
127
- soap_message = service.ad_group_ad.create(credentials, to_xml("operand"))
118
+ soap_message = service.ad_group_ad.create( credentials, to_xml("operand") )
128
119
  add_counters( soap_message.counters )
129
120
  rval = soap_message.response.xpath("//mutateResponse/rval", soap_message.response_headers).first
130
121
  id = rval.xpath("value/ad/id").first
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -38,7 +39,10 @@ module Sem4r
38
39
  "#{@id} textad '#{headline}' #{url}"
39
40
  end
40
41
 
41
- def xml(t)
42
+ #
43
+ # @private
44
+ #
45
+ def _xml(t)
42
46
  t.adGroupId ad_group.id
43
47
  t.ad("xsi:type" => "TextAd") do |ad|
44
48
  ad.url url
@@ -50,22 +54,22 @@ module Sem4r
50
54
  t.status status
51
55
  end
52
56
 
53
- def to_xml(tag)
54
- builder = Builder::XmlMarkup.new
55
- builder.tag!(tag, "xsi:type" => "AdGroupAd") do |t|
56
- xml(t)
57
- # t.adGroupId ad_group.id
58
- # t.ad("xsi:type" => "TextAd") do |ad|
59
- # ad.url url
60
- # ad.displayUrl display_url
61
- # ad.headline headline
62
- # ad.description1 description1
63
- # ad.description2 description2
64
- # end
65
- # t.status status
57
+ #
58
+ # Marshall with Builder::XmlMarkup
59
+ #
60
+ def xml(t, tag = nil)
61
+ if tag
62
+ t.__send__(tag, "xsi:type" => "AdGroupAd") { |t| _xml(t) }
63
+ else
64
+ _xml(t)
66
65
  end
67
66
  end
68
67
 
68
+ def to_xml(tag)
69
+ xml(Builder::XmlMarkup.new, tag)
70
+ end
71
+
72
+
69
73
  def self.from_element(ad_group, el)
70
74
  new(ad_group) do
71
75
  @id = el.at_xpath("id").text.strip.to_i
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -27,7 +28,7 @@ module Sem4r
27
28
  # http://code.google.com/apis/adwords/v2009/docs/reference/AdGroupCriterionService.AdGroupCriterion.html
28
29
  #
29
30
  class AdGroupCriterion
30
- include SoapAttributes
31
+ include Sem4rSoap::SoapAttributes
31
32
 
32
33
  g_accessor :criterion
33
34
 
@@ -51,7 +52,7 @@ module Sem4r
51
52
  unless criterion.saved?
52
53
  o = AdGroupCriterionOperation.new.add(self)
53
54
  soap_message =
54
- criterion.service.ad_group_criterion.mutate(criterion.credentials, o.to_xml("operations"))
55
+ criterion.service.ad_group_criterion.mutate( credentials, o.to_xml("operations") )
55
56
  criterion.add_counters( soap_message.counters )
56
57
  rval = soap_message.response.xpath("//mutateResponse/rval").first
57
58
  id = rval.xpath("value/criterion/id").first
@@ -84,24 +85,25 @@ module Sem4r
84
85
  end
85
86
  end
86
87
 
87
- def xml(t)
88
+ def _xml(t)
88
89
  t.adGroupId @ad_group.id
89
90
  # t.status "ENABLED"
90
91
  criterion.xml(t)
91
92
  @bids.xml(t) if @bids
92
93
  end
93
94
 
94
- def to_xml(tag)
95
- builder = Builder::XmlMarkup.new
96
- builder.tag!(tag, "xsi:type" => "BiddableAdGroupCriterion") do |t|
97
- xml(t)
98
- # t.adGroupId @ad_group.id
99
- # # t.status "ENABLED"
100
- # criterion.to_xml(t)
101
- # @bids.to_xml(t) if @bids
95
+ def xml(t, tag = nil)
96
+ if tag
97
+ t.__send__(tag, {"xsi:type" => "BiddableAdGroupCriterion"}) { |t| _xml(t) }
98
+ else
99
+ _xml(t)
102
100
  end
103
101
  end
104
102
 
103
+ def to_xml(tag)
104
+ xml(Builder::XmlMarkup.new, tag)
105
+ end
106
+
105
107
  end
106
108
 
107
109
  class NegativeAdGroupCriterion < AdGroupCriterion
@@ -123,22 +125,28 @@ module Sem4r
123
125
  end
124
126
  end
125
127
 
126
- def xml(t)
128
+ # @private
129
+ #
130
+ #
131
+ def _xml(t)
127
132
  t.adGroupId criterion.ad_group.id
128
133
  # t.status "ENABLED"
129
134
  criterion.xml(t)
130
135
  end
131
136
 
132
- def to_xml(tag)
133
- builder = Builder::XmlMarkup.new
134
- builder.tag!(tag, "xsi:type" => "NegativeAdGroupCriterion") do |t|
135
- xml(t)
136
- # t.adGroupId criterion.ad_group.id
137
- # # t.status "ENABLED"
138
- # criterion.to_xml(t)
137
+ def xml(t, tag = nil)
138
+ if tag
139
+ t.__send__(tag, {"xsi:type" => "NegativeAdGroupCriterion"}) { |t| _xml(t) }
140
+ else
141
+ _xml(t)
139
142
  end
140
143
  end
141
144
 
145
+ def to_xml(tag)
146
+ xml(Builder::XmlMarkup.new, tag)
147
+ end
148
+
149
+
142
150
  end
143
151
 
144
152
  end
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -25,7 +26,7 @@
25
26
  module Sem4r
26
27
 
27
28
  class AdGroupCriterionBids
28
- include SoapAttributes
29
+ include Sem4rSoap::SoapAttributes
29
30
 
30
31
  enum :Types, [
31
32
  :BudgetOptimizerAdGroupCriterionBids,
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -22,8 +23,11 @@
22
23
  # -------------------------------------------------------------------
23
24
 
24
25
  module Sem4r
25
- class AdGroupCriterionService
26
- include SoapCall
26
+
27
+ #
28
+ # @private
29
+ #
30
+ class AdGroupCriterionService < Sem4rSoap::SoapServiceV2010 #:nodoc: all
27
31
 
28
32
  def initialize(connector)
29
33
  @connector = connector
@@ -31,10 +35,11 @@ module Sem4r
31
35
  @header_namespace = @service_namespace
32
36
 
33
37
  @sandbox_service_url = "https://adwords-sandbox.google.com/api/adwords/cm/v201008/AdGroupCriterionService"
38
+ init(@header_namespace, @service_namespace)
34
39
  end
35
40
 
36
- soap_call_v2010 :all, :mutate => false
37
- soap_call_v2010 :mutate
41
+ soap_call :all, :mutate => false
42
+ soap_call :mutate
38
43
 
39
44
  private
40
45
 
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -52,6 +52,8 @@ module Sem4r
52
52
  "#{@id} #{@index} #{@text}"
53
53
  end
54
54
 
55
+ # @private
56
+ #
55
57
  # adGroupId Id of ad_group This field is required and should not be null.
56
58
  # criterionId The id of the Keyword criterion that this ad parameter applies to.
57
59
  # The keyword must be associated with the same ad_group as this AdParam.
@@ -61,16 +63,30 @@ module Sem4r
61
63
  # within Operators : SET. The length of this string should be
62
64
  # between 1 and 25, inclusive.
63
65
  # paramIndex
64
- def to_xml(tag)
65
- builder = Builder::XmlMarkup.new
66
- builder.tag!(tag) do |t|
67
- t.adGroupId @ad_group.id
68
- t.criterionId @criterion.id
69
- t.insertionText @text
70
- t.paramIndex @index
66
+ def _xml(t)
67
+ t.adGroupId @ad_group.id
68
+ t.criterionId @criterion.id
69
+ t.insertionText @text
70
+ t.paramIndex @index
71
+ end
72
+
73
+ #
74
+ # Marshall to xml
75
+ # @param [Builder::XmlMarkup]
76
+ #
77
+ def xml(t, tag = nil)
78
+ if tag
79
+ t.__send__(tag) { |t| _xml(t) }
80
+ else
81
+ _xml(t)
71
82
  end
72
83
  end
73
84
 
85
+ def to_xml(tag)
86
+ xml(Builder::XmlMarkup.new, tag)
87
+ end
88
+
89
+
74
90
  def self.from_element(ad_group, el)
75
91
  criterion_id = el.at_xpath("criterionId").text.strip.to_i
76
92
  criterion = ad_group.find_criterion(criterion_id)
@@ -85,7 +101,7 @@ module Sem4r
85
101
  def save
86
102
  return if @saved
87
103
  o = AdParamOperation.new.set( self )
88
- soap_message = service.ad_param.mutate(credentials, o.to_xml("operations") )
104
+ soap_message = service.ad_param.mutate( credentials, o.to_xml("operations") )
89
105
  add_counters( soap_message.counters )
90
106
  # ignore response ad_param doesn't have id
91
107
  @saved = true
@@ -23,21 +23,24 @@
23
23
  # -------------------------------------------------------------------------
24
24
 
25
25
  module Sem4r
26
- class AdParamService
27
- include SoapCall
26
+
27
+ #
28
+ # @private
29
+ #
30
+ class AdParamService < Sem4rSoap::SoapServiceV2010
28
31
 
29
32
  def initialize(connector)
30
33
  @connector = connector
31
-
32
34
  @service_namespace = "https://adwords.google.com/api/adwords/cm/v201008"
33
35
  @header_namespace = @service_namespace
34
36
 
35
37
  @sandbox_service_url = "https://adwords-sandbox.google.com/api/adwords/cm/v201008/AdParamService"
36
38
  @production_service_url = "https://adwords.google.com/api/adwords/cm/v201008/AdParamService"
39
+ init(@header_namespace, @service_namespace)
37
40
  end
38
41
 
39
- soap_call_v2010 :all, :mutate => false
40
- soap_call_v2010 :mutate
42
+ soap_call :all, :mutate => false
43
+ soap_call :mutate
41
44
 
42
45
  private
43
46