sem4r 0.1.1 → 0.1.2

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 (199) hide show
  1. data/Gemfile +11 -0
  2. data/Gemfile.lock +36 -0
  3. data/README.rdoc +30 -0
  4. data/Rakefile +15 -12
  5. data/VERSION.yml +1 -1
  6. data/examples_blog/2009-11-29-hello-world.rb +0 -1
  7. data/examples_sem4r/01_get_account.rb +1 -1
  8. data/examples_sem4r/02_get_info.rb +6 -2
  9. data/examples_sem4r/03_list_ad.rb +1 -1
  10. data/examples_sem4r/04_list_keywords.rb +1 -1
  11. data/examples_sem4r/05_request_report.rb +1 -2
  12. data/examples_sem4r/05_request_report_2010.rb +19 -4
  13. data/examples_sem4r/06_create_campaigns.rb +1 -1
  14. data/examples_sem4r/07_create_campaigns_block.rb +1 -1
  15. data/examples_sem4r/07_create_campaigns_simple.rb +1 -1
  16. data/examples_sem4r/08_ad_params.rb +1 -1
  17. data/examples_sem4r/09_targeting_idea.rb +1 -1
  18. data/examples_sem4r/10_get_location.rb +1 -1
  19. data/examples_sem4r/11_submit_bulk_job.rb +1 -1
  20. data/examples_sem4r/12_list_bulk_job.rb +1 -1
  21. data/examples_sem4r/30_prune_empty_adgroup.rb +1 -1
  22. data/examples_sem4r/31_empty_accounts.rb +1 -1
  23. data/examples_sem4r/example_helper.rb +5 -10
  24. data/lib/sem4r/account.rb +3 -306
  25. data/lib/sem4r/ad_group/ad_group.rb +16 -14
  26. data/lib/sem4r/ad_group/ad_group_bids.rb +11 -10
  27. data/lib/sem4r/ad_group/ad_group_service.rb +5 -5
  28. data/lib/sem4r/ad_group_ad/ad_group_ad.rb +1 -1
  29. data/lib/sem4r/ad_group_ad/ad_group_ad_service.rb +5 -5
  30. data/lib/sem4r/ad_group_ad/ad_group_mobile_ad.rb +9 -9
  31. data/lib/sem4r/ad_group_ad/ad_group_text_ad.rb +9 -9
  32. data/lib/sem4r/ad_group_criterion/ad_group_criterion.rb +6 -6
  33. data/lib/sem4r/ad_group_criterion/ad_group_criterion_bids.rb +5 -6
  34. data/lib/sem4r/ad_group_criterion/ad_group_criterion_operations.rb +0 -1
  35. data/lib/sem4r/ad_group_criterion/ad_group_criterion_service.rb +4 -4
  36. data/lib/sem4r/ad_group_criterion/criterion.rb +3 -3
  37. data/lib/sem4r/ad_group_criterion/criterion_keyword.rb +3 -3
  38. data/lib/sem4r/ad_group_criterion/criterion_placement.rb +2 -2
  39. data/lib/sem4r/ad_param/ad_param.rb +3 -3
  40. data/lib/sem4r/ad_param/ad_param_service.rb +5 -5
  41. data/lib/sem4r/adwords.rb +1 -0
  42. data/lib/sem4r/api_counters.rb +1 -0
  43. data/lib/sem4r/base.rb +1 -0
  44. data/lib/sem4r/bulk_mutate_job/bulk_mutate_job.rb +2 -2
  45. data/lib/sem4r/bulk_mutate_job/bulk_mutate_job_account_extension.rb +59 -0
  46. data/lib/sem4r/bulk_mutate_job/bulk_mutate_job_service.rb +5 -5
  47. data/lib/sem4r/campaign/campaign.rb +10 -10
  48. data/lib/sem4r/campaign/campaign_account_extension.rb +87 -0
  49. data/lib/sem4r/campaign/campaign_service.rb +6 -6
  50. data/lib/sem4r/campaign_target/campaign_target_service.rb +22 -22
  51. data/lib/sem4r/cli/cli_command.rb +1 -0
  52. data/lib/sem4r/cli/cli_common_args.rb +10 -3
  53. data/lib/sem4r/cli/cli_helpers.rb +1 -0
  54. data/lib/sem4r/cli/cli_sem.rb +1 -0
  55. data/lib/sem4r/cli/{cli_download_report.rb → commands/cli_download_report.rb} +2 -1
  56. data/lib/sem4r/cli/{cli_ideas.rb → commands/cli_ideas.rb} +1 -0
  57. data/lib/sem4r/cli/{cli_commands.rb → commands/cli_info.rb} +3 -23
  58. data/lib/sem4r/cli/{cli_list_ads.rb → commands/cli_list_ads.rb} +1 -0
  59. data/lib/sem4r/cli/commands/cli_list_campaign.rb +35 -0
  60. data/lib/sem4r/cli/commands/cli_list_client.rb +36 -0
  61. data/lib/sem4r/cli/{cli_list_keywords.rb → commands/cli_list_keywords.rb} +1 -0
  62. data/lib/sem4r/cli/commands/cli_list_report.rb +34 -0
  63. data/lib/sem4r/cli/commands/cli_repdef.rb +109 -0
  64. data/lib/sem4r/cli/commands/cli_report.rb +78 -0
  65. data/lib/sem4r/cli/{cli_request_report.rb → commands/cli_request_report.rb} +1 -0
  66. data/lib/sem4r/credentials.rb +1 -0
  67. data/lib/sem4r/extensions.rb +22 -1
  68. data/lib/sem4r/geo_location/geo_location_account_extension.rb +43 -0
  69. data/lib/sem4r/geo_location/geo_location_service.rb +4 -4
  70. data/lib/sem4r/info/info_account_extension.rb +48 -0
  71. data/lib/sem4r/info/info_selector.rb +108 -0
  72. data/lib/sem4r/info/info_service.rb +11 -66
  73. data/lib/sem4r/{common/operation.rb → operation.rb} +3 -1
  74. data/lib/sem4r/report_definition/report_definition.rb +75 -15
  75. data/lib/sem4r/report_definition/report_definition_account_extension.rb +79 -0
  76. data/lib/sem4r/report_definition/report_definition_operation.rb +3 -1
  77. data/lib/sem4r/report_definition/report_definition_service.rb +7 -7
  78. data/lib/sem4r/report_definition/report_field.rb +57 -0
  79. data/lib/sem4r/sem4r_error.rb +1 -0
  80. data/lib/sem4r/services/http_connector.rb +93 -0
  81. data/lib/sem4r/services/service.rb +1 -1
  82. data/lib/sem4r/services/soap_call.rb +27 -5
  83. data/lib/sem4r/services/soap_connector.rb +2 -147
  84. data/lib/sem4r/services/soap_dumper.rb +105 -0
  85. data/lib/sem4r/services/soap_message_v13.rb +15 -9
  86. data/lib/sem4r/services/{soap_message_v2009.rb → soap_message_v2010.rb} +26 -12
  87. data/lib/sem4r/targeting_idea/targeting_idea.rb +16 -11
  88. data/lib/sem4r/targeting_idea/targeting_idea_account_extension.rb +52 -0
  89. data/lib/sem4r/targeting_idea/targeting_idea_selector.rb +36 -10
  90. data/lib/sem4r/targeting_idea/targeting_idea_service.rb +5 -5
  91. data/lib/sem4r/v13_account/account_account_extension.rb +103 -0
  92. data/lib/sem4r/v13_account/billing_address.rb +10 -21
  93. data/lib/sem4r/v13_report/report.rb +8 -8
  94. data/lib/sem4r/v13_report/report_account_extension.rb +63 -0
  95. data/lib/sem4r/v13_report/report_job.rb +1 -1
  96. data/lib/sem4r.rb +27 -6
  97. data/lib/sem4r_cli.rb +4 -6
  98. data/lib/{sem4r → soap_helpers}/soap_attributes.rb +105 -13
  99. data/sem4r.gemspec +229 -190
  100. data/spec/{aggregates_spec_helper.rb → aggregates_rspec_helper.rb} +0 -0
  101. data/spec/build_fixtures.rb +84 -0
  102. data/spec/rspec_hash.rb +66 -0
  103. data/spec/{spec_helper.rb → rspec_helper.rb} +4 -2
  104. data/spec/rspec_matchers.rb +102 -0
  105. data/spec/rspec_sem4r_helper.rb +88 -0
  106. data/spec/sem4r/account_spec.rb +3 -4
  107. data/spec/sem4r/ad_group/ad_group_bids_spec.rb +4 -3
  108. data/spec/sem4r/ad_group/ad_group_service_spec.rb +8 -7
  109. data/spec/sem4r/ad_group/ad_group_spec.rb +5 -4
  110. data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/get-first-req.xml +0 -0
  111. data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/get-first-res.xml +0 -0
  112. data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/get-manual-cpm-bids-req.xml +0 -0
  113. data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/get-manual-cpm-bids-res.xml +0 -0
  114. data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/mutate_add-req.xml +0 -0
  115. data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/mutate_add-res.xml +0 -0
  116. data/spec/sem4r/ad_group_ad/ad_group_ad_operation_spec.rb +3 -3
  117. data/spec/sem4r/ad_group_ad/ad_group_ad_service_spec.rb +6 -5
  118. data/spec/sem4r/ad_group_ad/ad_group_ad_spec.rb +6 -5
  119. data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/get_mobile_ad-req.xml +0 -0
  120. data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/get_mobile_ad-res.xml +0 -0
  121. data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/get_text_ad-req.xml +0 -0
  122. data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/get_text_ad-res.xml +0 -0
  123. data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_mobile_ad-req.xml +0 -0
  124. data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_mobile_ad-res.xml +0 -0
  125. data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_text_ad-req.xml +0 -0
  126. data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_text_ad-res.xml +0 -0
  127. data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_two_criterions-req.xml +0 -0
  128. data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_two_criterions-res.xml +0 -0
  129. data/spec/sem4r/ad_group_criterion/ad_group_criterion_bids_spec.rb +5 -4
  130. data/spec/sem4r/ad_group_criterion/ad_group_criterion_service_spec.rb +6 -5
  131. data/spec/sem4r/ad_group_criterion/ad_group_criterion_spec.rb +6 -5
  132. data/spec/sem4r/ad_group_criterion/criterion_spec.rb +5 -4
  133. data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/get-req.xml +0 -0
  134. data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/get-res.xml +0 -0
  135. data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_criterion_keyword-req.xml +0 -0
  136. data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_criterion_keyword-res.xml +0 -0
  137. data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_criterion_placement-req.xml +0 -0
  138. data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_criterion_placement-res.xml +0 -0
  139. data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_negative_keyword-req.xml +0 -0
  140. data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_negative_keyword-res.xml +0 -0
  141. data/spec/sem4r/ad_param/ad_param_service_spec.rb +6 -5
  142. data/spec/sem4r/ad_param/ad_param_spec.rb +3 -2
  143. data/spec/{fixtures/services/ad_param → sem4r/ad_param/fixtures}/mutate_set-req.xml +0 -0
  144. data/spec/{fixtures/services/ad_param → sem4r/ad_param/fixtures}/mutate_set-res.xml +0 -0
  145. data/spec/sem4r/adwords_spec.rb +1 -1
  146. data/spec/sem4r/bulk_mutate_job/bulk_mutate_job_service_spec.rb +6 -5
  147. data/spec/sem4r/bulk_mutate_job/bulk_mutate_job_spec.rb +4 -3
  148. data/spec/{fixtures/services/bulk_mutate_job → sem4r/bulk_mutate_job/fixtures}/get-req.xml +0 -0
  149. data/spec/{fixtures/services/bulk_mutate_job → sem4r/bulk_mutate_job/fixtures}/get-res.xml +0 -0
  150. data/spec/{fixtures/services/bulk_mutate_job → sem4r/bulk_mutate_job/fixtures}/mutate-req.xml +0 -0
  151. data/spec/{fixtures/services/bulk_mutate_job → sem4r/bulk_mutate_job/fixtures}/mutate-res.xml +0 -0
  152. data/spec/sem4r/bulk_mutate_job/job_operation_spec.rb +3 -2
  153. data/spec/sem4r/campaign/campaign_service_spec.rb +8 -7
  154. data/spec/sem4r/campaign/campaign_spec.rb +3 -2
  155. data/spec/{fixtures/services/campaign → sem4r/campaign/fixtures}/get-req.xml +0 -0
  156. data/spec/{fixtures/services/campaign → sem4r/campaign/fixtures}/get-res.xml +0 -0
  157. data/spec/{fixtures/services/campaign → sem4r/campaign/fixtures}/mutate_add-req.xml +0 -0
  158. data/spec/{fixtures/services/campaign → sem4r/campaign/fixtures}/mutate_add-res.xml +0 -0
  159. data/spec/sem4r/cli/cli_spec.rb +2 -3
  160. data/spec/sem4r/credentials_spec.rb +1 -1
  161. data/spec/sem4r/info/account_info_extension_spec.rb +51 -0
  162. data/spec/sem4r/info/fixtures/get_unit_count-req.xml +34 -0
  163. data/spec/sem4r/info/fixtures/get_unit_count-res.xml +27 -0
  164. data/spec/sem4r/nokogiri_parsing_spec.rb +105 -0
  165. data/spec/{fixtures/services/report_definition → sem4r/report_definition/fixtures}/mutate_add-req.xml +0 -0
  166. data/spec/{fixtures/services/report_definition → sem4r/report_definition/fixtures}/mutate_add-req_orig.xml +0 -0
  167. data/spec/sem4r/report_definition/report_definition_service_spec.rb +5 -3
  168. data/spec/sem4r/report_definition/report_definition_spec.rb +6 -3
  169. data/spec/sem4r/rexml_parsing_spec.rb +22 -22
  170. data/spec/sem4r/services/service_spec.rb +2 -1
  171. data/spec/sem4r/services/soap_call_spec.rb +6 -5
  172. data/spec/sem4r/services/soap_message_v13_spec.rb +5 -11
  173. data/spec/{fixtures/services/targeting_idea → sem4r/targeting_idea/fixtures}/get-req-all-options.xml +0 -0
  174. data/spec/{fixtures/services/targeting_idea → sem4r/targeting_idea/fixtures}/get-req.xml +9 -11
  175. data/spec/sem4r/targeting_idea/fixtures/get-res.xml +2276 -0
  176. data/spec/sem4r/targeting_idea/targeting_idea_selector_spec.rb +30 -11
  177. data/spec/sem4r/targeting_idea/targeting_idea_service_spec.rb +4 -3
  178. data/spec/sem4r/targeting_idea/targeting_idea_spec.rb +5 -4
  179. data/spec/sem4r/v13_account/account_account_extension_spec.rb +47 -0
  180. data/spec/sem4r/v13_account/account_service_spec.rb +6 -5
  181. data/spec/sem4r/v13_account/billing_address_spec.rb +40 -0
  182. data/spec/{fixtures/services/v13_account → sem4r/v13_account/fixtures}/get_account_info-req.xml +0 -0
  183. data/spec/{fixtures/services/v13_account → sem4r/v13_account/fixtures}/get_account_info-res.xml +0 -0
  184. data/spec/{fixtures/services/v13_account → sem4r/v13_account/fixtures}/get_client_accounts-req.xml +0 -0
  185. data/spec/{fixtures/services/v13_account → sem4r/v13_account/fixtures}/get_client_accounts-res.xml +0 -0
  186. data/spec/{fixtures/services/v13_report → sem4r/v13_report/fixtures}/get_all_jobs-req.xml +0 -0
  187. data/spec/{fixtures/services/v13_report → sem4r/v13_report/fixtures}/get_all_jobs-res.xml +2 -2
  188. data/spec/{fixtures/services/v13_report → sem4r/v13_report/fixtures}/schedule_report_job-req.xml +0 -0
  189. data/spec/{fixtures/services/v13_report → sem4r/v13_report/fixtures}/schedule_report_job-res.xml +0 -0
  190. data/spec/sem4r/v13_report/report_service_spec.rb +13 -11
  191. data/spec/sem4r/v13_report/report_spec.rb +4 -3
  192. data/spec/sem4r_stubs.rb +182 -0
  193. data/spec/soap_helpers/soap_attributes_spec.rb +129 -0
  194. metadata +225 -125
  195. data/spec/fixtures/services/info/get_unit_count-req.xml +0 -30
  196. data/spec/fixtures/services/info/get_unit_count-res.xml +0 -29
  197. data/spec/fixtures/services/targeting_idea/get-res.xml +0 -3601
  198. data/spec/sem4r/soap_attributes_spec.rb +0 -116
  199. data/spec/sem4r_spec_helper.rb +0 -353
@@ -0,0 +1,63 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #
23
+ # -------------------------------------------------------------------------
24
+
25
+ module Sem4r
26
+
27
+ module ReportAccountExtension
28
+ ############################################################################
29
+ # Reports - Service Report
30
+
31
+ def report(&block)
32
+ Report.new(self, &block)
33
+ end
34
+
35
+ def p_reports(refresh = false)
36
+ reports(refresh).each do |report|
37
+ puts report.to_s
38
+ end
39
+ end
40
+
41
+ def reports(refresh = false)
42
+ _reports unless @reports and !refresh
43
+ @reports
44
+ end
45
+
46
+ private
47
+
48
+ def _reports
49
+ soap_message = service.report.all(credentials)
50
+ add_counters( soap_message.counters )
51
+ els = soap_message.response.xpath("//getAllJobsResponse/getAllJobsReturn")
52
+ @reports = els.map do |el|
53
+ Report.from_element(self, el)
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+ class Account
60
+ include ReportAccountExtension
61
+ end
62
+
63
+ end
@@ -42,7 +42,7 @@ module Sem4r
42
42
  def status
43
43
  soap_message = service.report.status(credentials, @job_id)
44
44
  add_counters( soap_message.counters )
45
- el = REXML::XPath.first( soap_message.response, "//getReportJobStatusResponse/getReportJobStatusReturn")
45
+ el = soap_message.response.xpath("//getReportJobStatusResponse/getReportJobStatusReturn").first
46
46
  status = el.text
47
47
  status
48
48
  end
data/lib/sem4r.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -23,9 +24,14 @@
23
24
 
24
25
  require 'yaml'
25
26
  require 'pathname'
26
- require 'rubygems'
27
+
28
+ # use bundler
29
+ require "rubygems"
30
+ require "bundler/setup"
31
+
27
32
  require 'builder'
28
- require 'rexml/document'
33
+ # require 'rexml/document'
34
+ require 'nokogiri'
29
35
  require 'uri'
30
36
  require 'pp'
31
37
  require 'logger'
@@ -50,26 +56,37 @@ require 'sem4r/extensions.rb'
50
56
  require 'sem4r/adwords'
51
57
  require 'sem4r/credentials'
52
58
  require 'sem4r/sem4r_error'
53
- require 'sem4r/soap_attributes'
59
+ require 'soap_helpers/soap_attributes'
54
60
 
55
61
  require 'sem4r/base'
56
62
  require 'sem4r/account'
57
63
 
64
+ require 'sem4r/bulk_mutate_job/bulk_mutate_job_account_extension'
65
+ require 'sem4r/campaign/campaign_account_extension'
66
+ require 'sem4r/geo_location/geo_location_account_extension'
67
+ require 'sem4r/info/info_account_extension'
68
+ require 'sem4r/report_definition/report_definition_account_extension'
69
+ require 'sem4r/targeting_idea/targeting_idea_account_extension'
70
+
71
+ require 'sem4r/v13_report/report_account_extension'
72
+ require 'sem4r/v13_account/account_account_extension'
58
73
 
59
74
  #
60
75
  # soap connection layer
61
76
  #
62
77
  require 'sem4r/services/soap_error'
78
+ require 'sem4r/services/http_connector'
79
+ require 'sem4r/services/soap_dumper'
63
80
  require 'sem4r/services/soap_connector'
64
81
  require 'sem4r/services/soap_message_v13'
65
- require 'sem4r/services/soap_message_v2009'
82
+ require 'sem4r/services/soap_message_v2010'
66
83
  require 'sem4r/services/soap_call'
67
84
  require 'sem4r/services/service'
68
85
 
69
86
  #
70
87
  # common
71
88
  #
72
- require 'sem4r/common/operation'
89
+ require 'sem4r/operation'
73
90
 
74
91
  #
75
92
  # adgroup
@@ -114,6 +131,10 @@ require 'sem4r/bulk_mutate_job/bulk_mutate_job'
114
131
  #
115
132
  require 'sem4r/campaign/campaign'
116
133
 
134
+ #
135
+ # info
136
+ #
137
+ require'sem4r/info/info_selector'
117
138
 
118
139
  #
119
140
  # targeting_idea
@@ -137,6 +158,6 @@ require 'sem4r/v13_report/report_job'
137
158
  # report_definition
138
159
  #
139
160
  require 'sem4r/report_definition/report_definition'
161
+ require 'sem4r/report_definition/report_field'
140
162
  require 'sem4r/report_definition/report_definition_selector'
141
163
  require 'sem4r/report_definition/report_definition_operation'
142
-
data/lib/sem4r_cli.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -32,9 +33,6 @@ require 'sem4r/cli/cli_command'
32
33
  require 'sem4r/cli/cli_helpers'
33
34
 
34
35
  # commands
35
- require 'sem4r/cli/cli_commands'
36
- require 'sem4r/cli/cli_download_report'
37
- require 'sem4r/cli/cli_ideas'
38
- require 'sem4r/cli/cli_list_ads'
39
- require 'sem4r/cli/cli_list_keywords'
40
- require 'sem4r/cli/cli_request_report'
36
+ Dir[File.join( File.dirname(__FILE__), "sem4r", "cli", "commands", "*.rb" )].each do |f|
37
+ require f
38
+ end
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # -------------------------------------------------------------------
2
3
  # Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
3
4
  #
@@ -22,12 +23,51 @@
22
23
  # -------------------------------------------------------------------
23
24
 
24
25
  module Sem4r
26
+
27
+ class MetaSoapAttribute
28
+ attr_reader :name, :xpath
29
+ def initialize(name, is_enum, xpath = nil)
30
+ @name, @is_enum = name.to_sym, is_enum
31
+ if xpath
32
+ @xpath = xpath
33
+ else
34
+ @xpath = name.to_s.camel_case
35
+ end
36
+ end
37
+
38
+ def enum?
39
+ @is_enum
40
+ end
41
+ end
42
+
25
43
  module SoapAttributes
26
44
 
27
45
  def self.included(base)
28
46
  base.extend ClassMethods
29
47
  end
30
48
 
49
+ def _to_xml(tag)
50
+ builder = Builder::XmlMarkup.new
51
+ builder.tag!(tag) do |t|
52
+ self.class.attributes.each do |a|
53
+ unless a.enum?
54
+ value = self.send(a.name)
55
+ t.__send__(a.xpath, value) unless value.nil? # value could be a boolean so 'if value' is wrong
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ def _from_element(el)
62
+ self.class.attributes.each do |a|
63
+ unless a.enum?
64
+ value = el.at_xpath(a.xpath)
65
+ __send__ a.name, value.text.strip unless value.nil?
66
+ end
67
+ end
68
+ self
69
+ end
70
+
31
71
  module ClassMethods
32
72
 
33
73
  def enum(set, values)
@@ -41,21 +81,36 @@ module Sem4r
41
81
  const_set( set.to_sym, tmp )
42
82
  end
43
83
 
84
+ def attributes
85
+ @attributes
86
+ end
87
+
44
88
  def g_reader(name)
89
+ @attributes ||= []
90
+ @attributes << MetaSoapAttribute.new(name, false)
45
91
  attr_reader name
46
92
  end
47
93
 
94
+
48
95
  #
49
96
  # constraints
50
- # values_in
97
+ # :values_in
98
+ # :if_type
99
+ # :default
51
100
  #
52
101
  # TODO: g_accessor prende in input anche elements ed estrae automaticamente l'elemento che interessa
53
- # cioe' invece di scrivere headline el.elements["headline"].text dovrebbe bastare scrivere
102
+ # cioe' invece di scrivere headline el.at_xpath("headline").text dovrebbe bastare scrivere
54
103
  # headline el
55
104
  def g_accessor(name, constraints = {})
105
+ constraints.assert_valid_keys(:xpath, :values_in, :if_type, :default)
106
+ attribute = add_attribute(name, false, constraints[:xpath])
56
107
  name = name.to_s
57
108
 
58
- # vales_in
109
+ #
110
+ # define setter
111
+ #
112
+
113
+ # values_in
59
114
  enum = nil
60
115
  if constraints.key?(:values_in)
61
116
  enum = const_get(constraints[:values_in])
@@ -68,12 +123,6 @@ module Sem4r
68
123
  other_instance_var = "type"
69
124
  end
70
125
 
71
- # default_value
72
- default_value = nil
73
- if constraints.key?(:default)
74
- default_value = constraints[:default]
75
- end
76
-
77
126
  define_method "#{name}=" do |value|
78
127
  if enum and !enum.include?(value)
79
128
  raise "Value '#{value}' not permitted "
@@ -85,6 +134,16 @@ module Sem4r
85
134
  instance_variable_set "@#{name}", value
86
135
  end
87
136
 
137
+ #
138
+ # define getter ( almost :-) )
139
+ #
140
+
141
+ # default_value
142
+ default_value = nil
143
+ if constraints.key?(:default)
144
+ default_value = constraints[:default]
145
+ end
146
+
88
147
  define_method "#{name}" do |*values| # |value = nil| is incorrect in ruby 1.8
89
148
  raise ArgumentError, "wrong number of arguments (#{values.size} for 0)" if values.length > 1
90
149
  value = values.first
@@ -99,8 +158,11 @@ module Sem4r
99
158
  end
100
159
 
101
160
  def g_set_accessor(column, constraints = {})
161
+ constraints.assert_valid_keys(:values_in)
162
+
102
163
  column = column.to_s
103
164
  columns = "#{column}s"
165
+ attribute = add_attribute(columns, true)
104
166
 
105
167
  # values_in
106
168
  enum = nil
@@ -108,6 +170,12 @@ module Sem4r
108
170
  enum = const_get(constraints[:values_in])
109
171
  end
110
172
 
173
+ #
174
+ # define
175
+ # column= :a
176
+ # column :a
177
+ #
178
+
111
179
  define_method "#{column}=" do |value|
112
180
  if enum and !enum.include?(value)
113
181
  raise "Value not permitted #{value}"
@@ -120,6 +188,13 @@ module Sem4r
120
188
 
121
189
  alias_method column, "#{column}="
122
190
 
191
+ #
192
+ # define
193
+ # colums [:a,:b,:c]
194
+ # define
195
+ # colums
196
+ #
197
+
123
198
  define_method "#{columns}" do |*values|
124
199
  if values and !values.empty?
125
200
  instance_eval "@#{columns} ||= []"
@@ -131,11 +206,28 @@ module Sem4r
131
206
  instance_variable_get "@#{columns}"
132
207
  end
133
208
  end
209
+ end
134
210
 
211
+ def _from_element(el)
212
+ return nil unless el
213
+ new._from_element(el)
135
214
  end
136
-
137
- end
138
215
 
139
- end
140
- end
216
+ private
217
+
218
+ def add_attribute(name, is_enum, xpath = nil)
219
+ @attributes ||= []
220
+ name = name.to_sym
221
+ m = @attributes.find { |e| e.name == name.to_sym }
222
+ if m
223
+ raise "attribute #{name} already defined!!"
224
+ end
225
+ m = MetaSoapAttribute.new(name, is_enum, xpath)
226
+ @attributes << m
227
+ m
228
+ end
229
+
230
+ end # ClassMethods
141
231
 
232
+ end # SoapAttributes
233
+ end # Sem4r