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
@@ -0,0 +1,66 @@
1
+ #
2
+ # jeweler
3
+ #
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+
8
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
9
+ gem.name = "sem4r"
10
+ gem.summary = %Q{Library to access google adwords api. Works with ruby 1.9 and ruby 1.8}
11
+ gem.description = %Q{
12
+ Sem4r is a library to access google adwords api.
13
+ It will works with ruby 1.9 and ruby 1.8 without soap4r.
14
+ It uses a high level model instead of a low level api.
15
+ You think about clients, campaigns, keywords and not about operations, operands, selectors, service calls.
16
+
17
+ This is a ALPHA version don't use in production.
18
+ If you are interested in this project let me now: install it and update periodically, so the gemcutter
19
+ download counter go up. Or subscribe to my feed at sem4r.com. Or watch the project on github.
20
+ Or simply drop me a line in email. However I will know there is someone out of here.
21
+ }
22
+
23
+ gem.authors = ["Sem4r"]
24
+ gem.email = "sem4ruby@gmail.com"
25
+ gem.homepage = "http://www.sem4r.com"
26
+
27
+ #
28
+ # dependecies
29
+ #
30
+ # gem.add_dependency 'patron'
31
+ gem.add_dependency 'builder'
32
+ gem.add_dependency 'nokogiri'
33
+ gem.add_development_dependency 'rspec'
34
+ gem.add_development_dependency 'differ'
35
+
36
+ #
37
+ # files
38
+ #
39
+ gem.files = %w{LICENSE README.rdoc Rakefile VERSION.yml sem4r.gemspec Gemfile Gemfile.lock}
40
+ gem.files << 'config/sem4r.example.yml'
41
+ gem.files.concat Dir['examples_sem4r/*.rb']
42
+ gem.files.concat Dir['examples_blog/*.rb']
43
+ gem.files.concat Dir['tasks/**/*.rake']
44
+ gem.files.concat Dir['lib/**/*.rb']
45
+
46
+ #
47
+ # test files
48
+ #
49
+ gem.test_files = Dir['spec/**/*.rb']
50
+ gem.test_files.concat Dir['spec/**/*.xml']
51
+ gem.test_files.concat Dir['spec/fixtures/**/*']
52
+
53
+ #
54
+ # rubyforge
55
+ #
56
+ # gem.rubyforge_project = 'sem'
57
+ end
58
+
59
+ # Jeweler::RubyforgeTasks.new do |rubyforge|
60
+ # rubyforge.doc_task = "rdoc"
61
+ # end
62
+
63
+ Jeweler::GemcutterTasks.new
64
+ rescue LoadError
65
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
66
+ end
data/tasks/rspec.rake ADDED
@@ -0,0 +1,21 @@
1
+ #
2
+ # spec
3
+ #
4
+ begin
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ RSpec::Core::RakeTask.new do |t|
9
+ t.rspec_opts = ["--color", "--format", "spec", '--backtrace']
10
+ t.pattern = 'spec/**/*_spec.rb'
11
+ end
12
+
13
+ #desc "Generate HTML report for failing examples"
14
+ #RSpec::Core::RakeTask.new('failing_examples_with_html') do |spec|
15
+ # spec.pattern = 'failing_examples/**/*.rb'
16
+ # spec.rspec_opts = ["--format", "html:doc/reports/tools/failing_examples.html", "--diff"]
17
+ # spec.fail_on_error = false
18
+ #end
19
+ rescue LoadError
20
+ puts "rspec (or a dependency) not available. Install it with: sudo gem install jeweler"
21
+ end
data/tasks/sem4r.rake ADDED
@@ -0,0 +1,25 @@
1
+ ###############################################################################
2
+ # Sem4r
3
+
4
+ namespace :sem4r do
5
+ #
6
+ # examples
7
+ #
8
+ desc 'run all sem4r example'
9
+ task :examples do
10
+
11
+ Dir['examples_sem4r/*.rb'].sort.each do |filename|
12
+ next unless filename =~ /\d\d.+\.rb$/
13
+ unless system "ruby #{filename}"
14
+ exit
15
+ end
16
+ end
17
+ puts "All examples run successfull"
18
+
19
+ end
20
+
21
+ desc "Start an IRB shell"
22
+ task :shell do
23
+ sh 'IRBRC=`pwd`/config/irbrc.rb irb'
24
+ end
25
+ end
data/tasks/yard.rake ADDED
@@ -0,0 +1,31 @@
1
+ begin
2
+ require 'yard'
3
+
4
+ YARD::Rake::YardocTask.new do |t|
5
+ t.files = ['lib/**/*.rb']
6
+ t.options = [
7
+ '--readme', 'README.rdoc',
8
+ # '--output-dir', 'doc/yardoc'
9
+ '--any',
10
+ '--extra',
11
+ '--opts'
12
+ ]
13
+ end
14
+
15
+
16
+ #
17
+ # rdoc
18
+ #
19
+
20
+ #require 'rake/rdoctask'
21
+ #
22
+ #Rake::RDocTask.new do |rdoc|
23
+ # version = File.exist?('VERSION') ? File.read('VERSION') : ""
24
+ # rdoc.rdoc_dir = 'rdoc'
25
+ # rdoc.title = "sem4r #{version}"
26
+ # rdoc.rdoc_files.include('README*')
27
+ # rdoc.rdoc_files.include('lib/**/*.rb')
28
+ #end
29
+ rescue LoadError
30
+ puts "Yard (or a dependency) not available. Install it with: sudo gem install jeweler"
31
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 2
9
- version: 0.1.2
8
+ - 3
9
+ version: 0.1.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sem4r
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-28 00:00:00 +01:00
17
+ date: 2010-12-11 00:00:00 +01:00
18
18
  default_executable: sem
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -31,7 +31,7 @@ dependencies:
31
31
  prerelease: false
32
32
  version_requirements: *id001
33
33
  - !ruby/object:Gem::Dependency
34
- name: jeweler
34
+ name: nokogiri
35
35
  requirement: &id002 !ruby/object:Gem::Requirement
36
36
  none: false
37
37
  requirements:
@@ -44,7 +44,7 @@ dependencies:
44
44
  prerelease: false
45
45
  version_requirements: *id002
46
46
  - !ruby/object:Gem::Dependency
47
- name: rake
47
+ name: httpclient
48
48
  requirement: &id003 !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
@@ -57,7 +57,7 @@ dependencies:
57
57
  prerelease: false
58
58
  version_requirements: *id003
59
59
  - !ruby/object:Gem::Dependency
60
- name: nokogiri
60
+ name: highline
61
61
  requirement: &id004 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
@@ -70,7 +70,7 @@ dependencies:
70
70
  prerelease: false
71
71
  version_requirements: *id004
72
72
  - !ruby/object:Gem::Dependency
73
- name: builder
73
+ name: jeweler
74
74
  requirement: &id005 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
@@ -79,11 +79,11 @@ dependencies:
79
79
  segments:
80
80
  - 0
81
81
  version: "0"
82
- type: :runtime
82
+ type: :development
83
83
  prerelease: false
84
84
  version_requirements: *id005
85
85
  - !ruby/object:Gem::Dependency
86
- name: nokogiri
86
+ name: rake
87
87
  requirement: &id006 !ruby/object:Gem::Requirement
88
88
  none: false
89
89
  requirements:
@@ -92,11 +92,11 @@ dependencies:
92
92
  segments:
93
93
  - 0
94
94
  version: "0"
95
- type: :runtime
95
+ type: :development
96
96
  prerelease: false
97
97
  version_requirements: *id006
98
98
  - !ruby/object:Gem::Dependency
99
- name: rspec
99
+ name: yard
100
100
  requirement: &id007 !ruby/object:Gem::Requirement
101
101
  none: false
102
102
  requirements:
@@ -109,7 +109,7 @@ dependencies:
109
109
  prerelease: false
110
110
  version_requirements: *id007
111
111
  - !ruby/object:Gem::Dependency
112
- name: differ
112
+ name: bundler
113
113
  requirement: &id008 !ruby/object:Gem::Requirement
114
114
  none: false
115
115
  requirements:
@@ -121,6 +121,58 @@ dependencies:
121
121
  type: :development
122
122
  prerelease: false
123
123
  version_requirements: *id008
124
+ - !ruby/object:Gem::Dependency
125
+ name: builder
126
+ requirement: &id009 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ segments:
132
+ - 0
133
+ version: "0"
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: *id009
137
+ - !ruby/object:Gem::Dependency
138
+ name: nokogiri
139
+ requirement: &id010 !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ segments:
145
+ - 0
146
+ version: "0"
147
+ type: :runtime
148
+ prerelease: false
149
+ version_requirements: *id010
150
+ - !ruby/object:Gem::Dependency
151
+ name: rspec
152
+ requirement: &id011 !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ segments:
158
+ - 0
159
+ version: "0"
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: *id011
163
+ - !ruby/object:Gem::Dependency
164
+ name: differ
165
+ requirement: &id012 !ruby/object:Gem::Requirement
166
+ none: false
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ segments:
171
+ - 0
172
+ version: "0"
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: *id012
124
176
  description: "\n Sem4r is a library to access google adwords api.\n It will works with ruby 1.9 and ruby 1.8 without soap4r.\n It uses a high level model instead of a low level api.\n You think about clients, campaigns, keywords and not about operations, operands, selectors, service calls.\n\n This is a ALPHA version don't use in production.\n If you are interested in this project let me now: install it and update periodically, so the gemcutter\n download counter go up. Or subscribe to my feed at sem4r.com. Or watch the project on github.\n Or simply drop me a line in email. However I will know there is someone out of here.\n "
125
177
  email: sem4ruby@gmail.com
126
178
  executables:
@@ -147,21 +199,20 @@ files:
147
199
  - examples_sem4r/03_list_ad.rb
148
200
  - examples_sem4r/04_list_keywords.rb
149
201
  - examples_sem4r/05_request_report.rb
150
- - examples_sem4r/05_request_report_2010.rb
151
- - examples_sem4r/06_create_campaigns.rb
152
- - examples_sem4r/07_create_campaigns_block.rb
153
- - examples_sem4r/07_create_campaigns_simple.rb
154
- - examples_sem4r/08_ad_params.rb
155
- - examples_sem4r/09_targeting_idea.rb
156
- - examples_sem4r/10_get_location.rb
157
- - examples_sem4r/11_submit_bulk_job.rb
158
- - examples_sem4r/12_list_bulk_job.rb
202
+ - examples_sem4r/06_request_report_definition.rb
203
+ - examples_sem4r/07_create_campaigns.rb
204
+ - examples_sem4r/08_create_campaigns_block.rb
205
+ - examples_sem4r/09_create_campaigns_simple.rb
206
+ - examples_sem4r/10_ad_params.rb
207
+ - examples_sem4r/11_targeting_idea.rb
208
+ - examples_sem4r/12_get_location.rb
209
+ - examples_sem4r/13_submit_bulk_job.rb
210
+ - examples_sem4r/14_list_bulk_job.rb
159
211
  - examples_sem4r/30_prune_empty_adgroup.rb
160
212
  - examples_sem4r/31_empty_accounts.rb
161
213
  - examples_sem4r/example_helper.rb
162
214
  - lib/sem4r.rb
163
215
  - lib/sem4r/account.rb
164
- - lib/sem4r/ad_extension_override/ad_extension_override_service.rb
165
216
  - lib/sem4r/ad_group/ad_group.rb
166
217
  - lib/sem4r/ad_group/ad_group_bids.rb
167
218
  - lib/sem4r/ad_group/ad_group_service.rb
@@ -182,7 +233,6 @@ files:
182
233
  - lib/sem4r/ad_param/ad_param_operation.rb
183
234
  - lib/sem4r/ad_param/ad_param_service.rb
184
235
  - lib/sem4r/adwords.rb
185
- - lib/sem4r/api_counters.rb
186
236
  - lib/sem4r/base.rb
187
237
  - lib/sem4r/bulk_mutate_job/bulk_mutate_job.rb
188
238
  - lib/sem4r/bulk_mutate_job/bulk_mutate_job_account_extension.rb
@@ -192,26 +242,11 @@ files:
192
242
  - lib/sem4r/campaign/campaign.rb
193
243
  - lib/sem4r/campaign/campaign_account_extension.rb
194
244
  - lib/sem4r/campaign/campaign_service.rb
195
- - lib/sem4r/campaign_criterion/campaign_criterion_service.rb
196
- - lib/sem4r/campaign_target/campaign_target_service.rb
197
- - lib/sem4r/cli/cli_command.rb
198
- - lib/sem4r/cli/cli_common_args.rb
199
- - lib/sem4r/cli/cli_helpers.rb
200
- - lib/sem4r/cli/cli_sem.rb
201
- - lib/sem4r/cli/commands/cli_download_report.rb
202
- - lib/sem4r/cli/commands/cli_ideas.rb
203
- - lib/sem4r/cli/commands/cli_info.rb
204
- - lib/sem4r/cli/commands/cli_list_ads.rb
205
- - lib/sem4r/cli/commands/cli_list_campaign.rb
206
- - lib/sem4r/cli/commands/cli_list_client.rb
207
- - lib/sem4r/cli/commands/cli_list_keywords.rb
208
- - lib/sem4r/cli/commands/cli_list_report.rb
209
- - lib/sem4r/cli/commands/cli_repdef.rb
210
- - lib/sem4r/cli/commands/cli_report.rb
211
- - lib/sem4r/cli/commands/cli_request_report.rb
212
245
  - lib/sem4r/credentials.rb
213
246
  - lib/sem4r/extensions.rb
247
+ - lib/sem4r/geo_location/address.rb
214
248
  - lib/sem4r/geo_location/geo_location_account_extension.rb
249
+ - lib/sem4r/geo_location/geo_location_selector.rb
215
250
  - lib/sem4r/geo_location/geo_location_service.rb
216
251
  - lib/sem4r/info/info_account_extension.rb
217
252
  - lib/sem4r/info/info_selector.rb
@@ -224,14 +259,8 @@ files:
224
259
  - lib/sem4r/report_definition/report_definition_service.rb
225
260
  - lib/sem4r/report_definition/report_field.rb
226
261
  - lib/sem4r/sem4r_error.rb
227
- - lib/sem4r/services/http_connector.rb
228
- - lib/sem4r/services/service.rb
229
- - lib/sem4r/services/soap_call.rb
230
- - lib/sem4r/services/soap_connector.rb
231
- - lib/sem4r/services/soap_dumper.rb
232
- - lib/sem4r/services/soap_error.rb
233
- - lib/sem4r/services/soap_message_v13.rb
234
- - lib/sem4r/services/soap_message_v2010.rb
262
+ - lib/sem4r/sem4r_templates.rb
263
+ - lib/sem4r/service.rb
235
264
  - lib/sem4r/targeting_idea/targeting_idea.rb
236
265
  - lib/sem4r/targeting_idea/targeting_idea_account_extension.rb
237
266
  - lib/sem4r/targeting_idea/targeting_idea_selector.rb
@@ -243,18 +272,49 @@ files:
243
272
  - lib/sem4r/v13_report/report_account_extension.rb
244
273
  - lib/sem4r/v13_report/report_job.rb
245
274
  - lib/sem4r/v13_report/report_service.rb
246
- - lib/sem4r/v13_traffic_estimator/traffic_estimator_service.rb
247
275
  - lib/sem4r_cli.rb
248
- - lib/soap_helpers/soap_attributes.rb
276
+ - lib/sem4r_cli/cli_helpers.rb
277
+ - lib/sem4r_cli/cli_mini_framework.rb
278
+ - lib/sem4r_cli/cli_sem.rb
279
+ - lib/sem4r_cli/commands/cli_ads.rb
280
+ - lib/sem4r_cli/commands/cli_campaign.rb
281
+ - lib/sem4r_cli/commands/cli_clients.rb
282
+ - lib/sem4r_cli/commands/cli_ideas.rb
283
+ - lib/sem4r_cli/commands/cli_info.rb
284
+ - lib/sem4r_cli/commands/cli_job.rb
285
+ - lib/sem4r_cli/commands/cli_keywords.rb
286
+ - lib/sem4r_cli/commands/cli_profile.rb
287
+ - lib/sem4r_cli/commands/cli_repdef.rb
288
+ - lib/sem4r_cli/commands/cli_report.rb
289
+ - lib/sem4r_soap.rb
290
+ - lib/sem4r_soap/http_connector.rb
291
+ - lib/sem4r_soap/soap_attributes.rb
292
+ - lib/sem4r_soap/soap_dumper.rb
293
+ - lib/sem4r_soap/soap_error.rb
294
+ - lib/sem4r_soap/soap_response.rb
295
+ - lib/sem4r_soap/soap_service.rb
296
+ - lib/sem4r_soap/soap_service_v13.rb
297
+ - lib/sem4r_soap/soap_service_v2010.rb
249
298
  - sem4r.gemspec
250
- - spec/aggregates_rspec_helper.rb
299
+ - tasks/jeweler.rake
300
+ - tasks/rspec.rake
301
+ - tasks/sem4r.rake
302
+ - tasks/yard.rake
251
303
  - spec/build_fixtures.rb
304
+ - spec/fixtures/password.example.yml
252
305
  - spec/fixtures/sem4r.example.yml
253
- - spec/fixtures/services/error.xml
254
- - spec/rspec_hash.rb
306
+ - spec/fixtures/soap_error.xml
307
+ - spec/fixtures/soap_error2.xml
308
+ - spec/helpers/dump_interceptor.rb
309
+ - spec/helpers/fixtures_bulk_mutate_job.rb
310
+ - spec/helpers/fixtures_geo_location.rb
311
+ - spec/helpers/fixtures_info.rb
312
+ - spec/helpers/fixtures_report_definition.rb
313
+ - spec/helpers/rspec_hash.rb
314
+ - spec/helpers/rspec_matchers.rb
315
+ - spec/helpers/rspec_sem4r_helper.rb
316
+ - spec/helpers/sem4r_stubs.rb
255
317
  - spec/rspec_helper.rb
256
- - spec/rspec_matchers.rb
257
- - spec/rspec_sem4r_helper.rb
258
318
  - spec/sem4r/account_spec.rb
259
319
  - spec/sem4r/ad_group/ad_group_bids_spec.rb
260
320
  - spec/sem4r/ad_group/ad_group_service_spec.rb
@@ -295,10 +355,15 @@ files:
295
355
  - spec/sem4r/ad_param/fixtures/mutate_set-req.xml
296
356
  - spec/sem4r/ad_param/fixtures/mutate_set-res.xml
297
357
  - spec/sem4r/adwords_spec.rb
358
+ - spec/sem4r/bulk_mutate_job/bulk_mutate_job_selector_spec.rb
298
359
  - spec/sem4r/bulk_mutate_job/bulk_mutate_job_service_spec.rb
299
360
  - spec/sem4r/bulk_mutate_job/bulk_mutate_job_spec.rb
361
+ - spec/sem4r/bulk_mutate_job/fixtures/get-list_job-req.xml
362
+ - spec/sem4r/bulk_mutate_job/fixtures/get-list_job-res.xml
300
363
  - spec/sem4r/bulk_mutate_job/fixtures/get-req.xml
301
364
  - spec/sem4r/bulk_mutate_job/fixtures/get-res.xml
365
+ - spec/sem4r/bulk_mutate_job/fixtures/mutate-add_job-req.xml
366
+ - spec/sem4r/bulk_mutate_job/fixtures/mutate-add_job-res.xml
302
367
  - spec/sem4r/bulk_mutate_job/fixtures/mutate-req.xml
303
368
  - spec/sem4r/bulk_mutate_job/fixtures/mutate-res.xml
304
369
  - spec/sem4r/bulk_mutate_job/job_operation_spec.rb
@@ -308,20 +373,28 @@ files:
308
373
  - spec/sem4r/campaign/fixtures/get-res.xml
309
374
  - spec/sem4r/campaign/fixtures/mutate_add-req.xml
310
375
  - spec/sem4r/campaign/fixtures/mutate_add-res.xml
311
- - spec/sem4r/cli/cli_spec.rb
312
376
  - spec/sem4r/credentials_spec.rb
377
+ - spec/sem4r/geo_location/address_spec.rb
378
+ - spec/sem4r/geo_location/fixtures/get-req.xml
379
+ - spec/sem4r/geo_location/fixtures/get-res.xml
313
380
  - spec/sem4r/info/account_info_extension_spec.rb
381
+ - spec/sem4r/info/fixtures/get-req.xml
382
+ - spec/sem4r/info/fixtures/get-res.xml
314
383
  - spec/sem4r/info/fixtures/get_unit_count-req.xml
315
384
  - spec/sem4r/info/fixtures/get_unit_count-res.xml
316
385
  - spec/sem4r/nokogiri_parsing_spec.rb
317
- - spec/sem4r/report_definition/fixtures/mutate_add-req.xml
318
- - spec/sem4r/report_definition/fixtures/mutate_add-req_orig.xml
386
+ - spec/sem4r/operation_spec.rb
387
+ - spec/sem4r/report_definition/fixtures/get-list-repdef-req.xml
388
+ - spec/sem4r/report_definition/fixtures/get-list-repdef-res.xml
389
+ - spec/sem4r/report_definition/fixtures/getReportFields-req.xml
390
+ - spec/sem4r/report_definition/fixtures/getReportFields-res.xml
391
+ - spec/sem4r/report_definition/fixtures/mutate-add-report-req.xml
392
+ - spec/sem4r/report_definition/fixtures/mutate-add-report-res.xml
319
393
  - spec/sem4r/report_definition/report_definition_service_spec.rb
320
394
  - spec/sem4r/report_definition/report_definition_spec.rb
395
+ - spec/sem4r/report_definition/report_field_spec.rb
321
396
  - spec/sem4r/rexml_parsing_spec.rb
322
- - spec/sem4r/services/service_spec.rb
323
- - spec/sem4r/services/soap_call_spec.rb
324
- - spec/sem4r/services/soap_message_v13_spec.rb
397
+ - spec/sem4r/service_spec.rb
325
398
  - spec/sem4r/targeting_idea/fixtures/get-req-all-options.xml
326
399
  - spec/sem4r/targeting_idea/fixtures/get-req.xml
327
400
  - spec/sem4r/targeting_idea/fixtures/get-res.xml
@@ -341,8 +414,10 @@ files:
341
414
  - spec/sem4r/v13_report/fixtures/schedule_report_job-res.xml
342
415
  - spec/sem4r/v13_report/report_service_spec.rb
343
416
  - spec/sem4r/v13_report/report_spec.rb
344
- - spec/sem4r_stubs.rb
345
- - spec/soap_helpers/soap_attributes_spec.rb
417
+ - spec/sem4r_cli/cli_spec.rb
418
+ - spec/sem4r_soap/soap_attributes_spec.rb
419
+ - spec/sem4r_soap/soap_response_spec.rb
420
+ - spec/sem4r_soap/soap_service_spec.rb
346
421
  - bin/sem
347
422
  has_rdoc: true
348
423
  homepage: http://www.sem4r.com
@@ -377,14 +452,21 @@ signing_key:
377
452
  specification_version: 3
378
453
  summary: Library to access google adwords api. Works with ruby 1.9 and ruby 1.8
379
454
  test_files:
380
- - spec/aggregates_rspec_helper.rb
381
455
  - spec/build_fixtures.rb
456
+ - spec/fixtures/password.example.yml
382
457
  - spec/fixtures/sem4r.example.yml
383
- - spec/fixtures/services/error.xml
384
- - spec/rspec_hash.rb
458
+ - spec/fixtures/soap_error.xml
459
+ - spec/fixtures/soap_error2.xml
460
+ - spec/helpers/dump_interceptor.rb
461
+ - spec/helpers/fixtures_bulk_mutate_job.rb
462
+ - spec/helpers/fixtures_geo_location.rb
463
+ - spec/helpers/fixtures_info.rb
464
+ - spec/helpers/fixtures_report_definition.rb
465
+ - spec/helpers/rspec_hash.rb
466
+ - spec/helpers/rspec_matchers.rb
467
+ - spec/helpers/rspec_sem4r_helper.rb
468
+ - spec/helpers/sem4r_stubs.rb
385
469
  - spec/rspec_helper.rb
386
- - spec/rspec_matchers.rb
387
- - spec/rspec_sem4r_helper.rb
388
470
  - spec/sem4r/account_spec.rb
389
471
  - spec/sem4r/ad_group/ad_group_bids_spec.rb
390
472
  - spec/sem4r/ad_group/ad_group_service_spec.rb
@@ -425,10 +507,15 @@ test_files:
425
507
  - spec/sem4r/ad_param/fixtures/mutate_set-req.xml
426
508
  - spec/sem4r/ad_param/fixtures/mutate_set-res.xml
427
509
  - spec/sem4r/adwords_spec.rb
510
+ - spec/sem4r/bulk_mutate_job/bulk_mutate_job_selector_spec.rb
428
511
  - spec/sem4r/bulk_mutate_job/bulk_mutate_job_service_spec.rb
429
512
  - spec/sem4r/bulk_mutate_job/bulk_mutate_job_spec.rb
513
+ - spec/sem4r/bulk_mutate_job/fixtures/get-list_job-req.xml
514
+ - spec/sem4r/bulk_mutate_job/fixtures/get-list_job-res.xml
430
515
  - spec/sem4r/bulk_mutate_job/fixtures/get-req.xml
431
516
  - spec/sem4r/bulk_mutate_job/fixtures/get-res.xml
517
+ - spec/sem4r/bulk_mutate_job/fixtures/mutate-add_job-req.xml
518
+ - spec/sem4r/bulk_mutate_job/fixtures/mutate-add_job-res.xml
432
519
  - spec/sem4r/bulk_mutate_job/fixtures/mutate-req.xml
433
520
  - spec/sem4r/bulk_mutate_job/fixtures/mutate-res.xml
434
521
  - spec/sem4r/bulk_mutate_job/job_operation_spec.rb
@@ -438,20 +525,28 @@ test_files:
438
525
  - spec/sem4r/campaign/fixtures/get-res.xml
439
526
  - spec/sem4r/campaign/fixtures/mutate_add-req.xml
440
527
  - spec/sem4r/campaign/fixtures/mutate_add-res.xml
441
- - spec/sem4r/cli/cli_spec.rb
442
528
  - spec/sem4r/credentials_spec.rb
529
+ - spec/sem4r/geo_location/address_spec.rb
530
+ - spec/sem4r/geo_location/fixtures/get-req.xml
531
+ - spec/sem4r/geo_location/fixtures/get-res.xml
443
532
  - spec/sem4r/info/account_info_extension_spec.rb
533
+ - spec/sem4r/info/fixtures/get-req.xml
534
+ - spec/sem4r/info/fixtures/get-res.xml
444
535
  - spec/sem4r/info/fixtures/get_unit_count-req.xml
445
536
  - spec/sem4r/info/fixtures/get_unit_count-res.xml
446
537
  - spec/sem4r/nokogiri_parsing_spec.rb
447
- - spec/sem4r/report_definition/fixtures/mutate_add-req.xml
448
- - spec/sem4r/report_definition/fixtures/mutate_add-req_orig.xml
538
+ - spec/sem4r/operation_spec.rb
539
+ - spec/sem4r/report_definition/fixtures/get-list-repdef-req.xml
540
+ - spec/sem4r/report_definition/fixtures/get-list-repdef-res.xml
541
+ - spec/sem4r/report_definition/fixtures/getReportFields-req.xml
542
+ - spec/sem4r/report_definition/fixtures/getReportFields-res.xml
543
+ - spec/sem4r/report_definition/fixtures/mutate-add-report-req.xml
544
+ - spec/sem4r/report_definition/fixtures/mutate-add-report-res.xml
449
545
  - spec/sem4r/report_definition/report_definition_service_spec.rb
450
546
  - spec/sem4r/report_definition/report_definition_spec.rb
547
+ - spec/sem4r/report_definition/report_field_spec.rb
451
548
  - spec/sem4r/rexml_parsing_spec.rb
452
- - spec/sem4r/services/service_spec.rb
453
- - spec/sem4r/services/soap_call_spec.rb
454
- - spec/sem4r/services/soap_message_v13_spec.rb
549
+ - spec/sem4r/service_spec.rb
455
550
  - spec/sem4r/targeting_idea/fixtures/get-req-all-options.xml
456
551
  - spec/sem4r/targeting_idea/fixtures/get-req.xml
457
552
  - spec/sem4r/targeting_idea/fixtures/get-res.xml
@@ -471,5 +566,7 @@ test_files:
471
566
  - spec/sem4r/v13_report/fixtures/schedule_report_job-res.xml
472
567
  - spec/sem4r/v13_report/report_service_spec.rb
473
568
  - spec/sem4r/v13_report/report_spec.rb
474
- - spec/sem4r_stubs.rb
475
- - spec/soap_helpers/soap_attributes_spec.rb
569
+ - spec/sem4r_cli/cli_spec.rb
570
+ - spec/sem4r_soap/soap_attributes_spec.rb
571
+ - spec/sem4r_soap/soap_response_spec.rb
572
+ - spec/sem4r_soap/soap_service_spec.rb
@@ -1,30 +0,0 @@
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
- module Sem4r
25
- class AdExtensionOverrideService
26
- def initialize
27
-
28
- end
29
- end
30
- end
@@ -1,8 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module Sem4r
3
- class ApiCounters
4
- def initialize
5
-
6
- end
7
- end
8
- end
@@ -1,30 +0,0 @@
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
- module Sem4r
25
- class CampaignTargetService
26
- def initialize
27
-
28
- end
29
- end
30
- end