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.
- data/Gemfile +11 -0
- data/Gemfile.lock +36 -0
- data/README.rdoc +30 -0
- data/Rakefile +15 -12
- data/VERSION.yml +1 -1
- data/examples_blog/2009-11-29-hello-world.rb +0 -1
- data/examples_sem4r/01_get_account.rb +1 -1
- data/examples_sem4r/02_get_info.rb +6 -2
- data/examples_sem4r/03_list_ad.rb +1 -1
- data/examples_sem4r/04_list_keywords.rb +1 -1
- data/examples_sem4r/05_request_report.rb +1 -2
- data/examples_sem4r/05_request_report_2010.rb +19 -4
- data/examples_sem4r/06_create_campaigns.rb +1 -1
- data/examples_sem4r/07_create_campaigns_block.rb +1 -1
- data/examples_sem4r/07_create_campaigns_simple.rb +1 -1
- data/examples_sem4r/08_ad_params.rb +1 -1
- data/examples_sem4r/09_targeting_idea.rb +1 -1
- data/examples_sem4r/10_get_location.rb +1 -1
- data/examples_sem4r/11_submit_bulk_job.rb +1 -1
- data/examples_sem4r/12_list_bulk_job.rb +1 -1
- data/examples_sem4r/30_prune_empty_adgroup.rb +1 -1
- data/examples_sem4r/31_empty_accounts.rb +1 -1
- data/examples_sem4r/example_helper.rb +5 -10
- data/lib/sem4r/account.rb +3 -306
- data/lib/sem4r/ad_group/ad_group.rb +16 -14
- data/lib/sem4r/ad_group/ad_group_bids.rb +11 -10
- data/lib/sem4r/ad_group/ad_group_service.rb +5 -5
- data/lib/sem4r/ad_group_ad/ad_group_ad.rb +1 -1
- data/lib/sem4r/ad_group_ad/ad_group_ad_service.rb +5 -5
- data/lib/sem4r/ad_group_ad/ad_group_mobile_ad.rb +9 -9
- data/lib/sem4r/ad_group_ad/ad_group_text_ad.rb +9 -9
- data/lib/sem4r/ad_group_criterion/ad_group_criterion.rb +6 -6
- data/lib/sem4r/ad_group_criterion/ad_group_criterion_bids.rb +5 -6
- data/lib/sem4r/ad_group_criterion/ad_group_criterion_operations.rb +0 -1
- data/lib/sem4r/ad_group_criterion/ad_group_criterion_service.rb +4 -4
- data/lib/sem4r/ad_group_criterion/criterion.rb +3 -3
- data/lib/sem4r/ad_group_criterion/criterion_keyword.rb +3 -3
- data/lib/sem4r/ad_group_criterion/criterion_placement.rb +2 -2
- data/lib/sem4r/ad_param/ad_param.rb +3 -3
- data/lib/sem4r/ad_param/ad_param_service.rb +5 -5
- data/lib/sem4r/adwords.rb +1 -0
- data/lib/sem4r/api_counters.rb +1 -0
- data/lib/sem4r/base.rb +1 -0
- data/lib/sem4r/bulk_mutate_job/bulk_mutate_job.rb +2 -2
- data/lib/sem4r/bulk_mutate_job/bulk_mutate_job_account_extension.rb +59 -0
- data/lib/sem4r/bulk_mutate_job/bulk_mutate_job_service.rb +5 -5
- data/lib/sem4r/campaign/campaign.rb +10 -10
- data/lib/sem4r/campaign/campaign_account_extension.rb +87 -0
- data/lib/sem4r/campaign/campaign_service.rb +6 -6
- data/lib/sem4r/campaign_target/campaign_target_service.rb +22 -22
- data/lib/sem4r/cli/cli_command.rb +1 -0
- data/lib/sem4r/cli/cli_common_args.rb +10 -3
- data/lib/sem4r/cli/cli_helpers.rb +1 -0
- data/lib/sem4r/cli/cli_sem.rb +1 -0
- data/lib/sem4r/cli/{cli_download_report.rb → commands/cli_download_report.rb} +2 -1
- data/lib/sem4r/cli/{cli_ideas.rb → commands/cli_ideas.rb} +1 -0
- data/lib/sem4r/cli/{cli_commands.rb → commands/cli_info.rb} +3 -23
- data/lib/sem4r/cli/{cli_list_ads.rb → commands/cli_list_ads.rb} +1 -0
- data/lib/sem4r/cli/commands/cli_list_campaign.rb +35 -0
- data/lib/sem4r/cli/commands/cli_list_client.rb +36 -0
- data/lib/sem4r/cli/{cli_list_keywords.rb → commands/cli_list_keywords.rb} +1 -0
- data/lib/sem4r/cli/commands/cli_list_report.rb +34 -0
- data/lib/sem4r/cli/commands/cli_repdef.rb +109 -0
- data/lib/sem4r/cli/commands/cli_report.rb +78 -0
- data/lib/sem4r/cli/{cli_request_report.rb → commands/cli_request_report.rb} +1 -0
- data/lib/sem4r/credentials.rb +1 -0
- data/lib/sem4r/extensions.rb +22 -1
- data/lib/sem4r/geo_location/geo_location_account_extension.rb +43 -0
- data/lib/sem4r/geo_location/geo_location_service.rb +4 -4
- data/lib/sem4r/info/info_account_extension.rb +48 -0
- data/lib/sem4r/info/info_selector.rb +108 -0
- data/lib/sem4r/info/info_service.rb +11 -66
- data/lib/sem4r/{common/operation.rb → operation.rb} +3 -1
- data/lib/sem4r/report_definition/report_definition.rb +75 -15
- data/lib/sem4r/report_definition/report_definition_account_extension.rb +79 -0
- data/lib/sem4r/report_definition/report_definition_operation.rb +3 -1
- data/lib/sem4r/report_definition/report_definition_service.rb +7 -7
- data/lib/sem4r/report_definition/report_field.rb +57 -0
- data/lib/sem4r/sem4r_error.rb +1 -0
- data/lib/sem4r/services/http_connector.rb +93 -0
- data/lib/sem4r/services/service.rb +1 -1
- data/lib/sem4r/services/soap_call.rb +27 -5
- data/lib/sem4r/services/soap_connector.rb +2 -147
- data/lib/sem4r/services/soap_dumper.rb +105 -0
- data/lib/sem4r/services/soap_message_v13.rb +15 -9
- data/lib/sem4r/services/{soap_message_v2009.rb → soap_message_v2010.rb} +26 -12
- data/lib/sem4r/targeting_idea/targeting_idea.rb +16 -11
- data/lib/sem4r/targeting_idea/targeting_idea_account_extension.rb +52 -0
- data/lib/sem4r/targeting_idea/targeting_idea_selector.rb +36 -10
- data/lib/sem4r/targeting_idea/targeting_idea_service.rb +5 -5
- data/lib/sem4r/v13_account/account_account_extension.rb +103 -0
- data/lib/sem4r/v13_account/billing_address.rb +10 -21
- data/lib/sem4r/v13_report/report.rb +8 -8
- data/lib/sem4r/v13_report/report_account_extension.rb +63 -0
- data/lib/sem4r/v13_report/report_job.rb +1 -1
- data/lib/sem4r.rb +27 -6
- data/lib/sem4r_cli.rb +4 -6
- data/lib/{sem4r → soap_helpers}/soap_attributes.rb +105 -13
- data/sem4r.gemspec +229 -190
- data/spec/{aggregates_spec_helper.rb → aggregates_rspec_helper.rb} +0 -0
- data/spec/build_fixtures.rb +84 -0
- data/spec/rspec_hash.rb +66 -0
- data/spec/{spec_helper.rb → rspec_helper.rb} +4 -2
- data/spec/rspec_matchers.rb +102 -0
- data/spec/rspec_sem4r_helper.rb +88 -0
- data/spec/sem4r/account_spec.rb +3 -4
- data/spec/sem4r/ad_group/ad_group_bids_spec.rb +4 -3
- data/spec/sem4r/ad_group/ad_group_service_spec.rb +8 -7
- data/spec/sem4r/ad_group/ad_group_spec.rb +5 -4
- data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/get-first-req.xml +0 -0
- data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/get-first-res.xml +0 -0
- data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/get-manual-cpm-bids-req.xml +0 -0
- data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/get-manual-cpm-bids-res.xml +0 -0
- data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/mutate_add-req.xml +0 -0
- data/spec/{fixtures/services/ad_group → sem4r/ad_group/fixtures}/mutate_add-res.xml +0 -0
- data/spec/sem4r/ad_group_ad/ad_group_ad_operation_spec.rb +3 -3
- data/spec/sem4r/ad_group_ad/ad_group_ad_service_spec.rb +6 -5
- data/spec/sem4r/ad_group_ad/ad_group_ad_spec.rb +6 -5
- data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/get_mobile_ad-req.xml +0 -0
- data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/get_mobile_ad-res.xml +0 -0
- data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/get_text_ad-req.xml +0 -0
- data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/get_text_ad-res.xml +0 -0
- data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_mobile_ad-req.xml +0 -0
- data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_mobile_ad-res.xml +0 -0
- data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_text_ad-req.xml +0 -0
- data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_text_ad-res.xml +0 -0
- data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_two_criterions-req.xml +0 -0
- data/spec/{fixtures/services/ad_group_ad → sem4r/ad_group_ad/fixtures}/mutate_add_two_criterions-res.xml +0 -0
- data/spec/sem4r/ad_group_criterion/ad_group_criterion_bids_spec.rb +5 -4
- data/spec/sem4r/ad_group_criterion/ad_group_criterion_service_spec.rb +6 -5
- data/spec/sem4r/ad_group_criterion/ad_group_criterion_spec.rb +6 -5
- data/spec/sem4r/ad_group_criterion/criterion_spec.rb +5 -4
- data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/get-req.xml +0 -0
- data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/get-res.xml +0 -0
- data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_criterion_keyword-req.xml +0 -0
- data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_criterion_keyword-res.xml +0 -0
- data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_criterion_placement-req.xml +0 -0
- data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_criterion_placement-res.xml +0 -0
- data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_negative_keyword-req.xml +0 -0
- data/spec/{fixtures/services/ad_group_criterion → sem4r/ad_group_criterion/fixtures}/mutate_add_negative_keyword-res.xml +0 -0
- data/spec/sem4r/ad_param/ad_param_service_spec.rb +6 -5
- data/spec/sem4r/ad_param/ad_param_spec.rb +3 -2
- data/spec/{fixtures/services/ad_param → sem4r/ad_param/fixtures}/mutate_set-req.xml +0 -0
- data/spec/{fixtures/services/ad_param → sem4r/ad_param/fixtures}/mutate_set-res.xml +0 -0
- data/spec/sem4r/adwords_spec.rb +1 -1
- data/spec/sem4r/bulk_mutate_job/bulk_mutate_job_service_spec.rb +6 -5
- data/spec/sem4r/bulk_mutate_job/bulk_mutate_job_spec.rb +4 -3
- data/spec/{fixtures/services/bulk_mutate_job → sem4r/bulk_mutate_job/fixtures}/get-req.xml +0 -0
- data/spec/{fixtures/services/bulk_mutate_job → sem4r/bulk_mutate_job/fixtures}/get-res.xml +0 -0
- data/spec/{fixtures/services/bulk_mutate_job → sem4r/bulk_mutate_job/fixtures}/mutate-req.xml +0 -0
- data/spec/{fixtures/services/bulk_mutate_job → sem4r/bulk_mutate_job/fixtures}/mutate-res.xml +0 -0
- data/spec/sem4r/bulk_mutate_job/job_operation_spec.rb +3 -2
- data/spec/sem4r/campaign/campaign_service_spec.rb +8 -7
- data/spec/sem4r/campaign/campaign_spec.rb +3 -2
- data/spec/{fixtures/services/campaign → sem4r/campaign/fixtures}/get-req.xml +0 -0
- data/spec/{fixtures/services/campaign → sem4r/campaign/fixtures}/get-res.xml +0 -0
- data/spec/{fixtures/services/campaign → sem4r/campaign/fixtures}/mutate_add-req.xml +0 -0
- data/spec/{fixtures/services/campaign → sem4r/campaign/fixtures}/mutate_add-res.xml +0 -0
- data/spec/sem4r/cli/cli_spec.rb +2 -3
- data/spec/sem4r/credentials_spec.rb +1 -1
- data/spec/sem4r/info/account_info_extension_spec.rb +51 -0
- data/spec/sem4r/info/fixtures/get_unit_count-req.xml +34 -0
- data/spec/sem4r/info/fixtures/get_unit_count-res.xml +27 -0
- data/spec/sem4r/nokogiri_parsing_spec.rb +105 -0
- data/spec/{fixtures/services/report_definition → sem4r/report_definition/fixtures}/mutate_add-req.xml +0 -0
- data/spec/{fixtures/services/report_definition → sem4r/report_definition/fixtures}/mutate_add-req_orig.xml +0 -0
- data/spec/sem4r/report_definition/report_definition_service_spec.rb +5 -3
- data/spec/sem4r/report_definition/report_definition_spec.rb +6 -3
- data/spec/sem4r/rexml_parsing_spec.rb +22 -22
- data/spec/sem4r/services/service_spec.rb +2 -1
- data/spec/sem4r/services/soap_call_spec.rb +6 -5
- data/spec/sem4r/services/soap_message_v13_spec.rb +5 -11
- data/spec/{fixtures/services/targeting_idea → sem4r/targeting_idea/fixtures}/get-req-all-options.xml +0 -0
- data/spec/{fixtures/services/targeting_idea → sem4r/targeting_idea/fixtures}/get-req.xml +9 -11
- data/spec/sem4r/targeting_idea/fixtures/get-res.xml +2276 -0
- data/spec/sem4r/targeting_idea/targeting_idea_selector_spec.rb +30 -11
- data/spec/sem4r/targeting_idea/targeting_idea_service_spec.rb +4 -3
- data/spec/sem4r/targeting_idea/targeting_idea_spec.rb +5 -4
- data/spec/sem4r/v13_account/account_account_extension_spec.rb +47 -0
- data/spec/sem4r/v13_account/account_service_spec.rb +6 -5
- data/spec/sem4r/v13_account/billing_address_spec.rb +40 -0
- data/spec/{fixtures/services/v13_account → sem4r/v13_account/fixtures}/get_account_info-req.xml +0 -0
- data/spec/{fixtures/services/v13_account → sem4r/v13_account/fixtures}/get_account_info-res.xml +0 -0
- data/spec/{fixtures/services/v13_account → sem4r/v13_account/fixtures}/get_client_accounts-req.xml +0 -0
- data/spec/{fixtures/services/v13_account → sem4r/v13_account/fixtures}/get_client_accounts-res.xml +0 -0
- data/spec/{fixtures/services/v13_report → sem4r/v13_report/fixtures}/get_all_jobs-req.xml +0 -0
- data/spec/{fixtures/services/v13_report → sem4r/v13_report/fixtures}/get_all_jobs-res.xml +2 -2
- data/spec/{fixtures/services/v13_report → sem4r/v13_report/fixtures}/schedule_report_job-req.xml +0 -0
- data/spec/{fixtures/services/v13_report → sem4r/v13_report/fixtures}/schedule_report_job-res.xml +0 -0
- data/spec/sem4r/v13_report/report_service_spec.rb +13 -11
- data/spec/sem4r/v13_report/report_spec.rb +4 -3
- data/spec/sem4r_stubs.rb +182 -0
- data/spec/soap_helpers/soap_attributes_spec.rb +129 -0
- metadata +225 -125
- data/spec/fixtures/services/info/get_unit_count-req.xml +0 -30
- data/spec/fixtures/services/info/get_unit_count-res.xml +0 -29
- data/spec/fixtures/services/targeting_idea/get-res.xml +0 -3601
- data/spec/sem4r/soap_attributes_spec.rb +0 -116
- 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 =
|
|
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
|
-
|
|
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 '
|
|
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/
|
|
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/
|
|
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
|
-
|
|
36
|
-
require
|
|
37
|
-
|
|
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.
|
|
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
|
-
#
|
|
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
|
-
|
|
140
|
-
|
|
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
|