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.
- data/Gemfile +13 -2
- data/Gemfile.lock +13 -7
- data/README.rdoc +44 -7
- data/Rakefile +2 -122
- data/VERSION.yml +1 -1
- data/bin/sem +1 -0
- data/examples_sem4r/01_get_account.rb +1 -0
- data/examples_sem4r/02_get_info.rb +1 -0
- data/examples_sem4r/03_list_ad.rb +1 -0
- data/examples_sem4r/04_list_keywords.rb +1 -0
- data/examples_sem4r/05_request_report.rb +25 -14
- data/examples_sem4r/{05_request_report_2010.rb → 06_request_report_definition.rb} +2 -4
- data/examples_sem4r/{06_create_campaigns.rb → 07_create_campaigns.rb} +1 -0
- data/examples_sem4r/{07_create_campaigns_block.rb → 08_create_campaigns_block.rb} +1 -0
- data/examples_sem4r/{07_create_campaigns_simple.rb → 09_create_campaigns_simple.rb} +1 -0
- data/examples_sem4r/{08_ad_params.rb → 10_ad_params.rb} +1 -0
- data/examples_sem4r/{09_targeting_idea.rb → 11_targeting_idea.rb} +1 -0
- data/examples_sem4r/{10_get_location.rb → 12_get_location.rb} +1 -0
- data/examples_sem4r/{11_submit_bulk_job.rb → 13_submit_bulk_job.rb} +1 -1
- data/examples_sem4r/{12_list_bulk_job.rb → 14_list_bulk_job.rb} +3 -0
- data/examples_sem4r/30_prune_empty_adgroup.rb +1 -0
- data/examples_sem4r/31_empty_accounts.rb +1 -0
- data/examples_sem4r/example_helper.rb +2 -1
- data/lib/sem4r/ad_group/ad_group.rb +22 -7
- data/lib/sem4r/ad_group/ad_group_bids.rb +1 -1
- data/lib/sem4r/ad_group/ad_group_service.rb +12 -5
- data/lib/sem4r/ad_group_ad/ad_group_ad.rb +1 -0
- data/lib/sem4r/ad_group_ad/ad_group_ad_operations.rb +1 -0
- data/lib/sem4r/ad_group_ad/ad_group_ad_service.rb +14 -9
- data/lib/sem4r/ad_group_ad/ad_group_mobile_ad.rb +16 -25
- data/lib/sem4r/ad_group_ad/ad_group_text_ad.rb +18 -14
- data/lib/sem4r/ad_group_criterion/ad_group_criterion.rb +27 -19
- data/lib/sem4r/ad_group_criterion/ad_group_criterion_bids.rb +2 -1
- data/lib/sem4r/ad_group_criterion/ad_group_criterion_operations.rb +1 -0
- data/lib/sem4r/ad_group_criterion/ad_group_criterion_service.rb +9 -4
- data/lib/sem4r/ad_group_criterion/criterion.rb +1 -0
- data/lib/sem4r/ad_group_criterion/criterion_keyword.rb +1 -0
- data/lib/sem4r/ad_group_criterion/criterion_placement.rb +1 -0
- data/lib/sem4r/ad_param/ad_param.rb +24 -8
- data/lib/sem4r/ad_param/ad_param_service.rb +8 -5
- data/lib/sem4r/adwords.rb +232 -76
- data/lib/sem4r/base.rb +1 -1
- data/lib/sem4r/bulk_mutate_job/bulk_mutate_job.rb +41 -35
- data/lib/sem4r/bulk_mutate_job/bulk_mutate_job_account_extension.rb +49 -15
- data/lib/sem4r/bulk_mutate_job/bulk_mutate_job_selector.rb +29 -20
- data/lib/sem4r/bulk_mutate_job/bulk_mutate_job_service.rb +13 -14
- data/lib/sem4r/bulk_mutate_job/job_operations.rb +1 -1
- data/lib/sem4r/campaign/campaign.rb +1 -0
- data/lib/sem4r/campaign/campaign_account_extension.rb +2 -1
- data/lib/sem4r/campaign/campaign_service.rb +9 -5
- data/lib/sem4r/credentials.rb +11 -5
- data/lib/sem4r/geo_location/address.rb +56 -0
- data/lib/sem4r/geo_location/geo_location_account_extension.rb +27 -6
- data/lib/sem4r/geo_location/geo_location_selector.rb +57 -0
- data/lib/sem4r/geo_location/geo_location_service.rb +9 -16
- data/lib/sem4r/info/info_account_extension.rb +3 -2
- data/lib/sem4r/info/info_selector.rb +2 -1
- data/lib/sem4r/info/info_service.rb +10 -3
- data/lib/sem4r/operation.rb +39 -20
- data/lib/sem4r/report_definition/report_definition.rb +37 -19
- data/lib/sem4r/report_definition/report_definition_account_extension.rb +66 -16
- data/lib/sem4r/report_definition/report_definition_operation.rb +2 -2
- data/lib/sem4r/report_definition/report_definition_selector.rb +1 -1
- data/lib/sem4r/report_definition/report_definition_service.rb +11 -7
- data/lib/sem4r/report_definition/report_field.rb +3 -2
- data/lib/sem4r/sem4r_templates.rb +77 -0
- data/lib/sem4r/{services/service.rb → service.rb} +23 -23
- data/lib/sem4r/targeting_idea/targeting_idea.rb +4 -4
- data/lib/sem4r/targeting_idea/targeting_idea_account_extension.rb +1 -1
- data/lib/sem4r/targeting_idea/targeting_idea_selector.rb +6 -6
- data/lib/sem4r/targeting_idea/targeting_idea_service.rb +7 -5
- data/lib/sem4r/v13_account/account_account_extension.rb +7 -10
- data/lib/sem4r/v13_account/account_service.rb +10 -4
- data/lib/sem4r/v13_account/billing_address.rb +2 -2
- data/lib/sem4r/v13_report/report_service.rb +11 -9
- data/lib/sem4r.rb +46 -31
- data/lib/{sem4r/cli → sem4r_cli}/cli_helpers.rb +3 -2
- data/lib/{sem4r/cli/cli_command.rb → sem4r_cli/cli_mini_framework.rb} +77 -32
- data/lib/{sem4r/cli/cli_common_args.rb → sem4r_cli/cli_sem.rb} +177 -157
- data/lib/{sem4r/cli/commands/cli_list_ads.rb → sem4r_cli/commands/cli_ads.rb} +7 -9
- data/lib/sem4r_cli/commands/cli_campaign.rb +69 -0
- data/lib/{sem4r/cli/commands/cli_list_client.rb → sem4r_cli/commands/cli_clients.rb} +2 -2
- data/lib/{sem4r/cli → sem4r_cli}/commands/cli_ideas.rb +35 -27
- data/lib/{sem4r/cli → sem4r_cli}/commands/cli_info.rb +3 -4
- data/lib/{sem4r/cli/commands/cli_repdef.rb → sem4r_cli/commands/cli_job.rb} +57 -55
- data/lib/{sem4r/cli/commands/cli_list_keywords.rb → sem4r_cli/commands/cli_keywords.rb} +14 -13
- data/lib/sem4r_cli/commands/cli_profile.rb +138 -0
- data/lib/{sem4r/cli/commands/cli_report.rb → sem4r_cli/commands/cli_repdef.rb} +67 -20
- data/lib/{sem4r/cli/commands/cli_request_report.rb → sem4r_cli/commands/cli_report.rb} +82 -19
- data/lib/sem4r_cli.rb +5 -7
- data/lib/sem4r_soap/http_connector.rb +206 -0
- data/lib/{soap_helpers → sem4r_soap}/soap_attributes.rb +8 -3
- data/lib/{sem4r/services → sem4r_soap}/soap_dumper.rb +36 -20
- data/lib/{sem4r/services → sem4r_soap}/soap_error.rb +5 -2
- data/lib/sem4r_soap/soap_response.rb +75 -0
- data/lib/sem4r_soap/soap_service.rb +137 -0
- data/lib/{sem4r/cli/cli_sem.rb → sem4r_soap/soap_service_v13.rb} +27 -28
- data/lib/sem4r_soap/soap_service_v2010.rb +80 -0
- data/lib/sem4r_soap.rb +17 -0
- data/sem4r.gemspec +93 -58
- data/spec/build_fixtures.rb +49 -42
- data/spec/fixtures/password.example.yml +3 -0
- data/spec/fixtures/sem4r.example.yml +6 -0
- data/spec/fixtures/{services/error.xml → soap_error.xml} +0 -0
- data/spec/fixtures/soap_error2.xml +29 -0
- data/spec/helpers/dump_interceptor.rb +90 -0
- data/spec/helpers/fixtures_bulk_mutate_job.rb +48 -0
- data/spec/helpers/fixtures_geo_location.rb +45 -0
- data/{lib/sem4r/campaign_criterion/campaign_criterion_service.rb → spec/helpers/fixtures_info.rb} +10 -6
- data/spec/helpers/fixtures_report_definition.rb +65 -0
- data/spec/{rspec_hash.rb → helpers/rspec_hash.rb} +1 -0
- data/spec/{rspec_matchers.rb → helpers/rspec_matchers.rb} +46 -19
- data/spec/{rspec_sem4r_helper.rb → helpers/rspec_sem4r_helper.rb} +19 -16
- data/spec/{sem4r_stubs.rb → helpers/sem4r_stubs.rb} +5 -4
- data/spec/rspec_helper.rb +4 -4
- data/spec/sem4r/account_spec.rb +2 -3
- data/spec/sem4r/ad_group/ad_group_service_spec.rb +1 -1
- data/spec/sem4r/ad_group/ad_group_spec.rb +1 -1
- data/spec/sem4r/ad_group_ad/ad_group_ad_operation_spec.rb +3 -3
- data/spec/sem4r/adwords_spec.rb +62 -39
- data/{lib/sem4r/cli/commands/cli_list_campaign.rb → spec/sem4r/bulk_mutate_job/bulk_mutate_job_selector_spec.rb} +14 -11
- data/spec/sem4r/bulk_mutate_job/bulk_mutate_job_service_spec.rb +2 -3
- data/spec/sem4r/bulk_mutate_job/bulk_mutate_job_spec.rb +23 -17
- data/spec/sem4r/bulk_mutate_job/fixtures/get-list_job-req.xml +35 -0
- data/spec/sem4r/bulk_mutate_job/fixtures/get-list_job-res.xml +417 -0
- data/spec/sem4r/bulk_mutate_job/fixtures/mutate-add_job-req.xml +106 -0
- data/spec/sem4r/bulk_mutate_job/fixtures/mutate-add_job-res.xml +48 -0
- data/spec/sem4r/bulk_mutate_job/job_operation_spec.rb +5 -7
- data/spec/sem4r/campaign/campaign_service_spec.rb +2 -2
- data/spec/sem4r/credentials_spec.rb +10 -8
- data/spec/sem4r/geo_location/address_spec.rb +62 -0
- data/spec/sem4r/geo_location/fixtures/get-req.xml +42 -0
- data/spec/sem4r/geo_location/fixtures/get-res.xml +60 -0
- data/spec/sem4r/info/fixtures/get-req.xml +34 -0
- data/spec/sem4r/info/fixtures/get-res.xml +27 -0
- data/spec/sem4r/nokogiri_parsing_spec.rb +1 -0
- data/spec/sem4r/operation_spec.rb +72 -0
- data/spec/sem4r/report_definition/fixtures/get-list-repdef-req.xml +22 -0
- data/spec/sem4r/report_definition/fixtures/get-list-repdef-res.xml +73 -0
- data/spec/sem4r/report_definition/fixtures/getReportFields-req.xml +24 -0
- data/spec/sem4r/report_definition/fixtures/getReportFields-res.xml +1199 -0
- data/spec/sem4r/report_definition/fixtures/mutate-add-report-req.xml +63 -0
- data/spec/sem4r/report_definition/fixtures/mutate-add-report-res.xml +68 -0
- data/spec/sem4r/report_definition/report_definition_service_spec.rb +5 -5
- data/spec/sem4r/report_definition/report_definition_spec.rb +28 -43
- data/{lib/sem4r/cli/commands/cli_list_report.rb → spec/sem4r/report_definition/report_field_spec.rb} +12 -10
- data/spec/sem4r/rexml_parsing_spec.rb +1 -0
- data/spec/sem4r/{services/service_spec.rb → service_spec.rb} +1 -1
- data/spec/sem4r/targeting_idea/targeting_idea_selector_spec.rb +1 -1
- data/spec/sem4r/targeting_idea/targeting_idea_service_spec.rb +1 -1
- data/spec/sem4r/targeting_idea/targeting_idea_spec.rb +1 -1
- data/spec/sem4r/v13_account/account_service_spec.rb +2 -2
- data/spec/sem4r/v13_report/report_service_spec.rb +2 -2
- data/spec/{sem4r/cli → sem4r_cli}/cli_spec.rb +22 -27
- data/spec/{soap_helpers → sem4r_soap}/soap_attributes_spec.rb +3 -3
- data/spec/{sem4r/services/soap_message_v13_spec.rb → sem4r_soap/soap_response_spec.rb} +10 -15
- data/spec/{sem4r/services/soap_call_spec.rb → sem4r_soap/soap_service_spec.rb} +35 -54
- data/tasks/jeweler.rake +66 -0
- data/tasks/rspec.rake +21 -0
- data/tasks/sem4r.rake +25 -0
- data/tasks/yard.rake +31 -0
- metadata +173 -76
- data/lib/sem4r/ad_extension_override/ad_extension_override_service.rb +0 -30
- data/lib/sem4r/api_counters.rb +0 -8
- data/lib/sem4r/campaign_target/campaign_target_service.rb +0 -30
- data/lib/sem4r/cli/commands/cli_download_report.rb +0 -82
- data/lib/sem4r/services/http_connector.rb +0 -93
- data/lib/sem4r/services/soap_call.rb +0 -122
- data/lib/sem4r/services/soap_connector.rb +0 -139
- data/lib/sem4r/services/soap_message_v13.rb +0 -135
- data/lib/sem4r/services/soap_message_v2010.rb +0 -184
- data/lib/sem4r/v13_traffic_estimator/traffic_estimator_service.rb +0 -30
- data/spec/aggregates_rspec_helper.rb +0 -59
- data/spec/sem4r/report_definition/fixtures/mutate_add-req.xml +0 -24
- data/spec/sem4r/report_definition/fixtures/mutate_add-req_orig.xml +0 -45
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# -------------------------------------------------------------------
|
|
3
|
+
# Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
# a copy of this software and associated documentation files (the
|
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
# the following conditions:
|
|
12
|
+
#
|
|
13
|
+
# The above copyright notice and this permission notice shall be
|
|
14
|
+
# included in all copies or substantial portions of the Software.
|
|
15
|
+
#
|
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
+
# -------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
module Sem4rSoap
|
|
26
|
+
|
|
27
|
+
class SoapServiceV2010 < SoapService
|
|
28
|
+
|
|
29
|
+
def initialize
|
|
30
|
+
super
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.soap_call(method, options = {})
|
|
34
|
+
_soap_call("v2010", method, options)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def build_soap_header(credentials)
|
|
40
|
+
s = if @service_namespace then "s:" else "" end
|
|
41
|
+
auth_token = credentials.authentication_token
|
|
42
|
+
|
|
43
|
+
str = "<env:Header>"
|
|
44
|
+
str += "<#{s}RequestHeader env:mustUnderstand=\"0\">"
|
|
45
|
+
|
|
46
|
+
str +="<authToken>#{auth_token}</authToken>"
|
|
47
|
+
str +="<userAgent>#{credentials.useragent}</userAgent>"
|
|
48
|
+
str +="<developerToken>#{credentials.developer_token}</developerToken>"
|
|
49
|
+
|
|
50
|
+
if credentials.client_email
|
|
51
|
+
str += "<clientEmail>#{credentials.client_email}</clientEmail>"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
str += "</#{s}RequestHeader>"
|
|
55
|
+
str += "</env:Header>"
|
|
56
|
+
str
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def _send(service_url, soap_action, soap_xml)
|
|
60
|
+
_send_raw(service_url, soap_xml)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def send_raw(service_url, soap_message)
|
|
64
|
+
soap_message = soap_message.dup
|
|
65
|
+
soap_message.gsub!(/\{authentication_token\}/, @credentials.authentication_token)
|
|
66
|
+
soap_message.gsub!(/\{useragent\}/, @credentials.useragent)
|
|
67
|
+
soap_message.gsub!(/\{developer_token\}/, @credentials.developer_token)
|
|
68
|
+
# soap_message.gsub!(/{client_email}/, @credentials.client_email)
|
|
69
|
+
_send_raw(service_url, soap_message)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def _send_raw(service_url, soap_message)
|
|
73
|
+
response_xml = @connector.send(service_url, "", soap_message)
|
|
74
|
+
soap_response = SoapResponse.new.parse_response(response_xml)
|
|
75
|
+
soap_response
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
data/lib/sem4r_soap.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#
|
|
2
|
+
# soap connection layer
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
require 'rubygems'
|
|
6
|
+
require 'uri'
|
|
7
|
+
require 'open-uri'
|
|
8
|
+
# require 'net/https'
|
|
9
|
+
require 'httpclient'
|
|
10
|
+
|
|
11
|
+
require 'sem4r_soap/soap_error'
|
|
12
|
+
require 'sem4r_soap/soap_dumper'
|
|
13
|
+
require 'sem4r_soap/http_connector'
|
|
14
|
+
require 'sem4r_soap/soap_response'
|
|
15
|
+
require 'sem4r_soap/soap_service'
|
|
16
|
+
require 'sem4r_soap/soap_service_v13'
|
|
17
|
+
require 'sem4r_soap/soap_service_v2010'
|
data/sem4r.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{sem4r}
|
|
8
|
-
s.version = "0.1.
|
|
8
|
+
s.version = "0.1.3"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Sem4r"]
|
|
12
|
-
s.date = %q{2010-11
|
|
12
|
+
s.date = %q{2010-12-11}
|
|
13
13
|
s.default_executable = %q{sem}
|
|
14
14
|
s.description = %q{
|
|
15
15
|
Sem4r is a library to access google adwords api.
|
|
@@ -45,21 +45,20 @@ Gem::Specification.new do |s|
|
|
|
45
45
|
"examples_sem4r/03_list_ad.rb",
|
|
46
46
|
"examples_sem4r/04_list_keywords.rb",
|
|
47
47
|
"examples_sem4r/05_request_report.rb",
|
|
48
|
-
"examples_sem4r/
|
|
49
|
-
"examples_sem4r/
|
|
50
|
-
"examples_sem4r/
|
|
51
|
-
"examples_sem4r/
|
|
52
|
-
"examples_sem4r/
|
|
53
|
-
"examples_sem4r/
|
|
54
|
-
"examples_sem4r/
|
|
55
|
-
"examples_sem4r/
|
|
56
|
-
"examples_sem4r/
|
|
48
|
+
"examples_sem4r/06_request_report_definition.rb",
|
|
49
|
+
"examples_sem4r/07_create_campaigns.rb",
|
|
50
|
+
"examples_sem4r/08_create_campaigns_block.rb",
|
|
51
|
+
"examples_sem4r/09_create_campaigns_simple.rb",
|
|
52
|
+
"examples_sem4r/10_ad_params.rb",
|
|
53
|
+
"examples_sem4r/11_targeting_idea.rb",
|
|
54
|
+
"examples_sem4r/12_get_location.rb",
|
|
55
|
+
"examples_sem4r/13_submit_bulk_job.rb",
|
|
56
|
+
"examples_sem4r/14_list_bulk_job.rb",
|
|
57
57
|
"examples_sem4r/30_prune_empty_adgroup.rb",
|
|
58
58
|
"examples_sem4r/31_empty_accounts.rb",
|
|
59
59
|
"examples_sem4r/example_helper.rb",
|
|
60
60
|
"lib/sem4r.rb",
|
|
61
61
|
"lib/sem4r/account.rb",
|
|
62
|
-
"lib/sem4r/ad_extension_override/ad_extension_override_service.rb",
|
|
63
62
|
"lib/sem4r/ad_group/ad_group.rb",
|
|
64
63
|
"lib/sem4r/ad_group/ad_group_bids.rb",
|
|
65
64
|
"lib/sem4r/ad_group/ad_group_service.rb",
|
|
@@ -80,7 +79,6 @@ Gem::Specification.new do |s|
|
|
|
80
79
|
"lib/sem4r/ad_param/ad_param_operation.rb",
|
|
81
80
|
"lib/sem4r/ad_param/ad_param_service.rb",
|
|
82
81
|
"lib/sem4r/adwords.rb",
|
|
83
|
-
"lib/sem4r/api_counters.rb",
|
|
84
82
|
"lib/sem4r/base.rb",
|
|
85
83
|
"lib/sem4r/bulk_mutate_job/bulk_mutate_job.rb",
|
|
86
84
|
"lib/sem4r/bulk_mutate_job/bulk_mutate_job_account_extension.rb",
|
|
@@ -90,26 +88,11 @@ Gem::Specification.new do |s|
|
|
|
90
88
|
"lib/sem4r/campaign/campaign.rb",
|
|
91
89
|
"lib/sem4r/campaign/campaign_account_extension.rb",
|
|
92
90
|
"lib/sem4r/campaign/campaign_service.rb",
|
|
93
|
-
"lib/sem4r/campaign_criterion/campaign_criterion_service.rb",
|
|
94
|
-
"lib/sem4r/campaign_target/campaign_target_service.rb",
|
|
95
|
-
"lib/sem4r/cli/cli_command.rb",
|
|
96
|
-
"lib/sem4r/cli/cli_common_args.rb",
|
|
97
|
-
"lib/sem4r/cli/cli_helpers.rb",
|
|
98
|
-
"lib/sem4r/cli/cli_sem.rb",
|
|
99
|
-
"lib/sem4r/cli/commands/cli_download_report.rb",
|
|
100
|
-
"lib/sem4r/cli/commands/cli_ideas.rb",
|
|
101
|
-
"lib/sem4r/cli/commands/cli_info.rb",
|
|
102
|
-
"lib/sem4r/cli/commands/cli_list_ads.rb",
|
|
103
|
-
"lib/sem4r/cli/commands/cli_list_campaign.rb",
|
|
104
|
-
"lib/sem4r/cli/commands/cli_list_client.rb",
|
|
105
|
-
"lib/sem4r/cli/commands/cli_list_keywords.rb",
|
|
106
|
-
"lib/sem4r/cli/commands/cli_list_report.rb",
|
|
107
|
-
"lib/sem4r/cli/commands/cli_repdef.rb",
|
|
108
|
-
"lib/sem4r/cli/commands/cli_report.rb",
|
|
109
|
-
"lib/sem4r/cli/commands/cli_request_report.rb",
|
|
110
91
|
"lib/sem4r/credentials.rb",
|
|
111
92
|
"lib/sem4r/extensions.rb",
|
|
93
|
+
"lib/sem4r/geo_location/address.rb",
|
|
112
94
|
"lib/sem4r/geo_location/geo_location_account_extension.rb",
|
|
95
|
+
"lib/sem4r/geo_location/geo_location_selector.rb",
|
|
113
96
|
"lib/sem4r/geo_location/geo_location_service.rb",
|
|
114
97
|
"lib/sem4r/info/info_account_extension.rb",
|
|
115
98
|
"lib/sem4r/info/info_selector.rb",
|
|
@@ -122,14 +105,8 @@ Gem::Specification.new do |s|
|
|
|
122
105
|
"lib/sem4r/report_definition/report_definition_service.rb",
|
|
123
106
|
"lib/sem4r/report_definition/report_field.rb",
|
|
124
107
|
"lib/sem4r/sem4r_error.rb",
|
|
125
|
-
"lib/sem4r/
|
|
126
|
-
"lib/sem4r/
|
|
127
|
-
"lib/sem4r/services/soap_call.rb",
|
|
128
|
-
"lib/sem4r/services/soap_connector.rb",
|
|
129
|
-
"lib/sem4r/services/soap_dumper.rb",
|
|
130
|
-
"lib/sem4r/services/soap_error.rb",
|
|
131
|
-
"lib/sem4r/services/soap_message_v13.rb",
|
|
132
|
-
"lib/sem4r/services/soap_message_v2010.rb",
|
|
108
|
+
"lib/sem4r/sem4r_templates.rb",
|
|
109
|
+
"lib/sem4r/service.rb",
|
|
133
110
|
"lib/sem4r/targeting_idea/targeting_idea.rb",
|
|
134
111
|
"lib/sem4r/targeting_idea/targeting_idea_account_extension.rb",
|
|
135
112
|
"lib/sem4r/targeting_idea/targeting_idea_selector.rb",
|
|
@@ -141,24 +118,55 @@ Gem::Specification.new do |s|
|
|
|
141
118
|
"lib/sem4r/v13_report/report_account_extension.rb",
|
|
142
119
|
"lib/sem4r/v13_report/report_job.rb",
|
|
143
120
|
"lib/sem4r/v13_report/report_service.rb",
|
|
144
|
-
"lib/sem4r/v13_traffic_estimator/traffic_estimator_service.rb",
|
|
145
121
|
"lib/sem4r_cli.rb",
|
|
146
|
-
"lib/
|
|
147
|
-
"
|
|
122
|
+
"lib/sem4r_cli/cli_helpers.rb",
|
|
123
|
+
"lib/sem4r_cli/cli_mini_framework.rb",
|
|
124
|
+
"lib/sem4r_cli/cli_sem.rb",
|
|
125
|
+
"lib/sem4r_cli/commands/cli_ads.rb",
|
|
126
|
+
"lib/sem4r_cli/commands/cli_campaign.rb",
|
|
127
|
+
"lib/sem4r_cli/commands/cli_clients.rb",
|
|
128
|
+
"lib/sem4r_cli/commands/cli_ideas.rb",
|
|
129
|
+
"lib/sem4r_cli/commands/cli_info.rb",
|
|
130
|
+
"lib/sem4r_cli/commands/cli_job.rb",
|
|
131
|
+
"lib/sem4r_cli/commands/cli_keywords.rb",
|
|
132
|
+
"lib/sem4r_cli/commands/cli_profile.rb",
|
|
133
|
+
"lib/sem4r_cli/commands/cli_repdef.rb",
|
|
134
|
+
"lib/sem4r_cli/commands/cli_report.rb",
|
|
135
|
+
"lib/sem4r_soap.rb",
|
|
136
|
+
"lib/sem4r_soap/http_connector.rb",
|
|
137
|
+
"lib/sem4r_soap/soap_attributes.rb",
|
|
138
|
+
"lib/sem4r_soap/soap_dumper.rb",
|
|
139
|
+
"lib/sem4r_soap/soap_error.rb",
|
|
140
|
+
"lib/sem4r_soap/soap_response.rb",
|
|
141
|
+
"lib/sem4r_soap/soap_service.rb",
|
|
142
|
+
"lib/sem4r_soap/soap_service_v13.rb",
|
|
143
|
+
"lib/sem4r_soap/soap_service_v2010.rb",
|
|
144
|
+
"sem4r.gemspec",
|
|
145
|
+
"tasks/jeweler.rake",
|
|
146
|
+
"tasks/rspec.rake",
|
|
147
|
+
"tasks/sem4r.rake",
|
|
148
|
+
"tasks/yard.rake"
|
|
148
149
|
]
|
|
149
150
|
s.homepage = %q{http://www.sem4r.com}
|
|
150
151
|
s.require_paths = ["lib"]
|
|
151
152
|
s.rubygems_version = %q{1.3.7}
|
|
152
153
|
s.summary = %q{Library to access google adwords api. Works with ruby 1.9 and ruby 1.8}
|
|
153
154
|
s.test_files = [
|
|
154
|
-
"spec/aggregates_rspec_helper.rb",
|
|
155
155
|
"spec/build_fixtures.rb",
|
|
156
|
+
"spec/fixtures/password.example.yml",
|
|
156
157
|
"spec/fixtures/sem4r.example.yml",
|
|
157
|
-
"spec/fixtures/
|
|
158
|
-
"spec/
|
|
158
|
+
"spec/fixtures/soap_error.xml",
|
|
159
|
+
"spec/fixtures/soap_error2.xml",
|
|
160
|
+
"spec/helpers/dump_interceptor.rb",
|
|
161
|
+
"spec/helpers/fixtures_bulk_mutate_job.rb",
|
|
162
|
+
"spec/helpers/fixtures_geo_location.rb",
|
|
163
|
+
"spec/helpers/fixtures_info.rb",
|
|
164
|
+
"spec/helpers/fixtures_report_definition.rb",
|
|
165
|
+
"spec/helpers/rspec_hash.rb",
|
|
166
|
+
"spec/helpers/rspec_matchers.rb",
|
|
167
|
+
"spec/helpers/rspec_sem4r_helper.rb",
|
|
168
|
+
"spec/helpers/sem4r_stubs.rb",
|
|
159
169
|
"spec/rspec_helper.rb",
|
|
160
|
-
"spec/rspec_matchers.rb",
|
|
161
|
-
"spec/rspec_sem4r_helper.rb",
|
|
162
170
|
"spec/sem4r/account_spec.rb",
|
|
163
171
|
"spec/sem4r/ad_group/ad_group_bids_spec.rb",
|
|
164
172
|
"spec/sem4r/ad_group/ad_group_service_spec.rb",
|
|
@@ -199,10 +207,15 @@ Gem::Specification.new do |s|
|
|
|
199
207
|
"spec/sem4r/ad_param/fixtures/mutate_set-req.xml",
|
|
200
208
|
"spec/sem4r/ad_param/fixtures/mutate_set-res.xml",
|
|
201
209
|
"spec/sem4r/adwords_spec.rb",
|
|
210
|
+
"spec/sem4r/bulk_mutate_job/bulk_mutate_job_selector_spec.rb",
|
|
202
211
|
"spec/sem4r/bulk_mutate_job/bulk_mutate_job_service_spec.rb",
|
|
203
212
|
"spec/sem4r/bulk_mutate_job/bulk_mutate_job_spec.rb",
|
|
213
|
+
"spec/sem4r/bulk_mutate_job/fixtures/get-list_job-req.xml",
|
|
214
|
+
"spec/sem4r/bulk_mutate_job/fixtures/get-list_job-res.xml",
|
|
204
215
|
"spec/sem4r/bulk_mutate_job/fixtures/get-req.xml",
|
|
205
216
|
"spec/sem4r/bulk_mutate_job/fixtures/get-res.xml",
|
|
217
|
+
"spec/sem4r/bulk_mutate_job/fixtures/mutate-add_job-req.xml",
|
|
218
|
+
"spec/sem4r/bulk_mutate_job/fixtures/mutate-add_job-res.xml",
|
|
206
219
|
"spec/sem4r/bulk_mutate_job/fixtures/mutate-req.xml",
|
|
207
220
|
"spec/sem4r/bulk_mutate_job/fixtures/mutate-res.xml",
|
|
208
221
|
"spec/sem4r/bulk_mutate_job/job_operation_spec.rb",
|
|
@@ -212,20 +225,28 @@ Gem::Specification.new do |s|
|
|
|
212
225
|
"spec/sem4r/campaign/fixtures/get-res.xml",
|
|
213
226
|
"spec/sem4r/campaign/fixtures/mutate_add-req.xml",
|
|
214
227
|
"spec/sem4r/campaign/fixtures/mutate_add-res.xml",
|
|
215
|
-
"spec/sem4r/cli/cli_spec.rb",
|
|
216
228
|
"spec/sem4r/credentials_spec.rb",
|
|
229
|
+
"spec/sem4r/geo_location/address_spec.rb",
|
|
230
|
+
"spec/sem4r/geo_location/fixtures/get-req.xml",
|
|
231
|
+
"spec/sem4r/geo_location/fixtures/get-res.xml",
|
|
217
232
|
"spec/sem4r/info/account_info_extension_spec.rb",
|
|
233
|
+
"spec/sem4r/info/fixtures/get-req.xml",
|
|
234
|
+
"spec/sem4r/info/fixtures/get-res.xml",
|
|
218
235
|
"spec/sem4r/info/fixtures/get_unit_count-req.xml",
|
|
219
236
|
"spec/sem4r/info/fixtures/get_unit_count-res.xml",
|
|
220
237
|
"spec/sem4r/nokogiri_parsing_spec.rb",
|
|
221
|
-
"spec/sem4r/
|
|
222
|
-
"spec/sem4r/report_definition/fixtures/
|
|
238
|
+
"spec/sem4r/operation_spec.rb",
|
|
239
|
+
"spec/sem4r/report_definition/fixtures/get-list-repdef-req.xml",
|
|
240
|
+
"spec/sem4r/report_definition/fixtures/get-list-repdef-res.xml",
|
|
241
|
+
"spec/sem4r/report_definition/fixtures/getReportFields-req.xml",
|
|
242
|
+
"spec/sem4r/report_definition/fixtures/getReportFields-res.xml",
|
|
243
|
+
"spec/sem4r/report_definition/fixtures/mutate-add-report-req.xml",
|
|
244
|
+
"spec/sem4r/report_definition/fixtures/mutate-add-report-res.xml",
|
|
223
245
|
"spec/sem4r/report_definition/report_definition_service_spec.rb",
|
|
224
246
|
"spec/sem4r/report_definition/report_definition_spec.rb",
|
|
247
|
+
"spec/sem4r/report_definition/report_field_spec.rb",
|
|
225
248
|
"spec/sem4r/rexml_parsing_spec.rb",
|
|
226
|
-
"spec/sem4r/
|
|
227
|
-
"spec/sem4r/services/soap_call_spec.rb",
|
|
228
|
-
"spec/sem4r/services/soap_message_v13_spec.rb",
|
|
249
|
+
"spec/sem4r/service_spec.rb",
|
|
229
250
|
"spec/sem4r/targeting_idea/fixtures/get-req-all-options.xml",
|
|
230
251
|
"spec/sem4r/targeting_idea/fixtures/get-req.xml",
|
|
231
252
|
"spec/sem4r/targeting_idea/fixtures/get-res.xml",
|
|
@@ -245,8 +266,10 @@ Gem::Specification.new do |s|
|
|
|
245
266
|
"spec/sem4r/v13_report/fixtures/schedule_report_job-res.xml",
|
|
246
267
|
"spec/sem4r/v13_report/report_service_spec.rb",
|
|
247
268
|
"spec/sem4r/v13_report/report_spec.rb",
|
|
248
|
-
"spec/
|
|
249
|
-
"spec/
|
|
269
|
+
"spec/sem4r_cli/cli_spec.rb",
|
|
270
|
+
"spec/sem4r_soap/soap_attributes_spec.rb",
|
|
271
|
+
"spec/sem4r_soap/soap_response_spec.rb",
|
|
272
|
+
"spec/sem4r_soap/soap_service_spec.rb"
|
|
250
273
|
]
|
|
251
274
|
|
|
252
275
|
if s.respond_to? :specification_version then
|
|
@@ -255,18 +278,26 @@ Gem::Specification.new do |s|
|
|
|
255
278
|
|
|
256
279
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
257
280
|
s.add_runtime_dependency(%q<builder>, [">= 0"])
|
|
258
|
-
s.add_runtime_dependency(%q<jeweler>, [">= 0"])
|
|
259
|
-
s.add_runtime_dependency(%q<rake>, [">= 0"])
|
|
260
281
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
|
282
|
+
s.add_runtime_dependency(%q<httpclient>, [">= 0"])
|
|
283
|
+
s.add_runtime_dependency(%q<highline>, [">= 0"])
|
|
284
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
|
285
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
|
286
|
+
s.add_development_dependency(%q<yard>, [">= 0"])
|
|
287
|
+
s.add_development_dependency(%q<bundler>, [">= 0"])
|
|
261
288
|
s.add_runtime_dependency(%q<builder>, [">= 0"])
|
|
262
289
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
|
263
290
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
|
264
291
|
s.add_development_dependency(%q<differ>, [">= 0"])
|
|
265
292
|
else
|
|
266
293
|
s.add_dependency(%q<builder>, [">= 0"])
|
|
294
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
|
295
|
+
s.add_dependency(%q<httpclient>, [">= 0"])
|
|
296
|
+
s.add_dependency(%q<highline>, [">= 0"])
|
|
267
297
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
268
298
|
s.add_dependency(%q<rake>, [">= 0"])
|
|
269
|
-
s.add_dependency(%q<
|
|
299
|
+
s.add_dependency(%q<yard>, [">= 0"])
|
|
300
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
|
270
301
|
s.add_dependency(%q<builder>, [">= 0"])
|
|
271
302
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
|
272
303
|
s.add_dependency(%q<rspec>, [">= 0"])
|
|
@@ -274,9 +305,13 @@ Gem::Specification.new do |s|
|
|
|
274
305
|
end
|
|
275
306
|
else
|
|
276
307
|
s.add_dependency(%q<builder>, [">= 0"])
|
|
308
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
|
309
|
+
s.add_dependency(%q<httpclient>, [">= 0"])
|
|
310
|
+
s.add_dependency(%q<highline>, [">= 0"])
|
|
277
311
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
278
312
|
s.add_dependency(%q<rake>, [">= 0"])
|
|
279
|
-
s.add_dependency(%q<
|
|
313
|
+
s.add_dependency(%q<yard>, [">= 0"])
|
|
314
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
|
280
315
|
s.add_dependency(%q<builder>, [">= 0"])
|
|
281
316
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
|
282
317
|
s.add_dependency(%q<rspec>, [">= 0"])
|
data/spec/build_fixtures.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
1
2
|
# -------------------------------------------------------------------
|
|
2
3
|
# Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
|
|
3
4
|
#
|
|
@@ -22,63 +23,69 @@
|
|
|
22
23
|
# -------------------------------------------------------------------
|
|
23
24
|
|
|
24
25
|
require 'rubygems'
|
|
25
|
-
|
|
26
|
-
cwd
|
|
26
|
+
cwd = File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
27
|
+
$:.unshift(cwd) unless $:.include?(cwd)
|
|
28
|
+
cwd = File.expand_path(File.dirname(__FILE__))
|
|
27
29
|
$:.unshift(cwd) unless $:.include?(cwd)
|
|
30
|
+
|
|
28
31
|
require 'sem4r'
|
|
29
32
|
include Sem4r
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
require 'helpers/rspec_sem4r_helper'
|
|
35
|
+
require 'helpers/dump_interceptor'
|
|
36
|
+
require 'helpers/fixtures_geo_location'
|
|
37
|
+
require 'helpers/fixtures_report_definition'
|
|
38
|
+
require 'helpers/fixtures_bulk_mutate_job'
|
|
39
|
+
require 'helpers/fixtures_info'
|
|
34
40
|
|
|
41
|
+
class BuildFixtures
|
|
42
|
+
include FixtureGeoLocation
|
|
43
|
+
include FixtureReportDefinition
|
|
44
|
+
include FixtureBulkMutateJob
|
|
45
|
+
include FixtureInfo
|
|
35
46
|
|
|
36
|
-
|
|
47
|
+
def initialize
|
|
48
|
+
@adwords = Adwords.sandbox # search credentials into ~/.sem4r file
|
|
37
49
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
50
|
+
log_directory = File.join(File.dirname(__FILE__), "..", "tmp", "build_fixtures")
|
|
51
|
+
log_directory = File.expand_path(log_directory)
|
|
52
|
+
Dir.mkdir(log_directory) unless File.directory?(log_directory)
|
|
53
|
+
puts "dump soap messages in '#{log_directory}'"
|
|
41
54
|
|
|
42
|
-
|
|
43
|
-
|
|
55
|
+
fixtures_dir = File.join(File.dirname(__FILE__), "fixtures", "services")
|
|
56
|
+
@dump_interceptor = DumpInterceptor.new(fixtures_dir)
|
|
57
|
+
dump_options = {:directory => log_directory, :format => true, :interceptor => @dump_interceptor}
|
|
58
|
+
@adwords.dump_soap_options(dump_options)
|
|
59
|
+
@adwords.logger = Logger.new(STDOUT)
|
|
60
|
+
end
|
|
44
61
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
pathname = File.join(dir, "get_unit_count-#{type}.xml")
|
|
52
|
-
puts "writing to #{pathname}"
|
|
53
|
-
File.open(pathname, "w") {|f|
|
|
54
|
-
f.puts str
|
|
55
|
-
}
|
|
56
|
-
else
|
|
57
|
-
puts "unknow service #{match_data[1]}"
|
|
62
|
+
def intercept(p1, p2 = nil)
|
|
63
|
+
if block_given?
|
|
64
|
+
@dump_interceptor.intercept_to(p1, p2)
|
|
65
|
+
@dump_interceptor.start
|
|
66
|
+
yield
|
|
67
|
+
@dump_interceptor.stop
|
|
58
68
|
end
|
|
59
|
-
|
|
60
69
|
end
|
|
61
|
-
end
|
|
62
70
|
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
def run
|
|
72
|
+
puts "---------------------------------------------------------------------"
|
|
73
|
+
puts "Building fixtures"
|
|
74
|
+
puts "---------------------------------------------------------------------"
|
|
75
|
+
begin
|
|
65
76
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
77
|
+
fixtures_info
|
|
78
|
+
fixtures_geo_location
|
|
79
|
+
fixtures_report_definition
|
|
80
|
+
fixtures_bulk_mutate_job
|
|
70
81
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
82
|
+
rescue Sem4rError
|
|
83
|
+
puts "I am so sorry! Something went wrong! (exception #{$!.to_s})"
|
|
84
|
+
end
|
|
85
|
+
puts "---------------------------------------------------------------------"
|
|
86
|
+
end
|
|
76
87
|
|
|
77
|
-
# info
|
|
78
|
-
adwords.account.year_unit_cost(InfoSelector::UNIT_COUNT)
|
|
79
88
|
|
|
80
|
-
rescue Sem4rError
|
|
81
|
-
puts "I am so sorry! Something went wrong! (exception #{$!.to_s})"
|
|
82
89
|
end
|
|
83
90
|
|
|
84
|
-
|
|
91
|
+
BuildFixtures.new.run
|
|
File without changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
|
3
|
+
<soap:Header>
|
|
4
|
+
<ResponseHeader xmlns="https://adwords.google.com/api/adwords/cm/v200909">
|
|
5
|
+
<requestId>e7c3b00f339bcaf56b7df47db97efdb7</requestId>
|
|
6
|
+
<operations>1</operations>
|
|
7
|
+
<responseTime>231</responseTime>
|
|
8
|
+
<units>1</units>
|
|
9
|
+
</ResponseHeader>
|
|
10
|
+
</soap:Header>
|
|
11
|
+
<soap:Body>
|
|
12
|
+
<soap:Fault>
|
|
13
|
+
<faultcode>soap:Server</faultcode>
|
|
14
|
+
<faultstring>[CampaignError.DUPLICATE_CAMPAIGN_NAME @ operations[0].operand.name]</faultstring>
|
|
15
|
+
<detail>
|
|
16
|
+
<ApiExceptionFault xmlns="https://adwords.google.com/api/adwords/cm/v200909">
|
|
17
|
+
<message>[CampaignError.DUPLICATE_CAMPAIGN_NAME @ operations[0].operand.name]</message>
|
|
18
|
+
<ApplicationException.Type>ApiException</ApplicationException.Type>
|
|
19
|
+
<errors xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CampaignError">
|
|
20
|
+
<fieldPath>operations[0].operand.name</fieldPath>
|
|
21
|
+
<trigger></trigger>
|
|
22
|
+
<ApiError.Type>CampaignError</ApiError.Type>
|
|
23
|
+
<reason>DUPLICATE_CAMPAIGN_NAME</reason>
|
|
24
|
+
</errors>
|
|
25
|
+
</ApiExceptionFault>
|
|
26
|
+
</detail>
|
|
27
|
+
</soap:Fault>
|
|
28
|
+
</soap:Body>
|
|
29
|
+
</soap:Envelope>
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# -------------------------------------------------------------------------
|
|
3
|
+
# Copyright (c) 2009-2010 Sem4r sem4ruby@gmail.com
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
# a copy of this software and associated documentation files (the
|
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
# the following conditions:
|
|
12
|
+
#
|
|
13
|
+
# The above copyright notice and this permission notice shall be
|
|
14
|
+
# included in all copies or substantial portions of the Software.
|
|
15
|
+
#
|
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
+
# -------------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
class DumpInterceptor
|
|
26
|
+
include Sem4rSpecHelper
|
|
27
|
+
|
|
28
|
+
def reset_and_start
|
|
29
|
+
@request_number = 0
|
|
30
|
+
@where_to_write = []
|
|
31
|
+
@state = :started
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def reset_and_stop
|
|
35
|
+
@request_number = 0
|
|
36
|
+
@where_to_write = []
|
|
37
|
+
@state = :stopped
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def start
|
|
41
|
+
@state = :started
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def stop
|
|
45
|
+
@state = :stopped
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def intercept_to(p1, p2 = nil)
|
|
49
|
+
if p2
|
|
50
|
+
service = p1
|
|
51
|
+
file = p2
|
|
52
|
+
else
|
|
53
|
+
service = nil
|
|
54
|
+
file = p1
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
@where_to_write << [service, file] # for req
|
|
58
|
+
@where_to_write << [service, file] # for res
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def call(service_url, type, xml)
|
|
62
|
+
return if @state == :stopped
|
|
63
|
+
|
|
64
|
+
match_data = service_url.match(/https:\/\/adwords-sandbox.google.com\/api\/adwords\/([^\/]*)\/v201008\/([^\/]*)$/)
|
|
65
|
+
unless match_data
|
|
66
|
+
puts "*********** DumpInterceptor cannot recognize service"
|
|
67
|
+
puts "*********** #{service_url}"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
soap_service = match_data[2]
|
|
71
|
+
soap_service = soap_service.gsub("Service", "").underscore
|
|
72
|
+
|
|
73
|
+
if @where_to_write.length <= @request_number
|
|
74
|
+
puts "************ DumpInterceptor I cannot know where to write soap messages!!!!"
|
|
75
|
+
@request_number += 1
|
|
76
|
+
return
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
service, file = *@where_to_write[@request_number]
|
|
80
|
+
if !service.nil? and service != soap_service
|
|
81
|
+
puts "************ DumpInterceptor service #{soap_service} instead of #{service}!!!!"
|
|
82
|
+
@request_number += 1
|
|
83
|
+
return
|
|
84
|
+
end
|
|
85
|
+
file += "-#{type}.xml"
|
|
86
|
+
write_xml(soap_service, file, xml)
|
|
87
|
+
@request_number += 1
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|