soapy_bing 0.3.1 → 0.4.0

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 (139) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile +1 -0
  4. data/README.md +18 -18
  5. data/Rakefile +1 -0
  6. data/lib/soapy_bing.rb +5 -1
  7. data/lib/soapy_bing/account.rb +1 -0
  8. data/lib/soapy_bing/accounts.rb +13 -17
  9. data/lib/soapy_bing/ads.rb +18 -41
  10. data/lib/soapy_bing/ads/campaign_performance_report.rb +49 -0
  11. data/lib/soapy_bing/ads/campaigns.rb +106 -0
  12. data/lib/soapy_bing/ads/parsers/bulk_csv_parser.rb +34 -0
  13. data/lib/soapy_bing/ads/parsers/report_csv_parser.rb +45 -0
  14. data/lib/soapy_bing/ads/report.rb +93 -0
  15. data/lib/soapy_bing/campaign_management.rb +21 -0
  16. data/lib/soapy_bing/country_codes.rb +17 -0
  17. data/lib/soapy_bing/country_codes.yml +727 -0
  18. data/lib/soapy_bing/customer.rb +1 -0
  19. data/lib/soapy_bing/helpers.rb +1 -1
  20. data/lib/soapy_bing/helpers/zip_downloader.rb +1 -0
  21. data/lib/soapy_bing/oauth_credentials.rb +1 -0
  22. data/lib/soapy_bing/param_guard.rb +1 -0
  23. data/lib/soapy_bing/service.rb +69 -0
  24. data/lib/soapy_bing/service_operation.rb +62 -0
  25. data/lib/soapy_bing/version.rb +2 -1
  26. data/lib/soapy_bing/wsdl/ad_insight.wsdl +1 -0
  27. data/lib/soapy_bing/wsdl/bulk.wsdl +1 -0
  28. data/lib/soapy_bing/wsdl/campaign_management.wsdl +1 -0
  29. data/lib/soapy_bing/wsdl/customer_billing.wsdl +1 -0
  30. data/lib/soapy_bing/wsdl/customer_management.wsdl +1 -0
  31. data/lib/soapy_bing/wsdl/reporting.wsdl +1 -0
  32. data/lib/tasks/console.rake +1 -0
  33. data/lib/tasks/coverage.rake +1 -0
  34. data/lib/tasks/spec.rake +1 -0
  35. data/lib/tasks/upate_wsdl_files.rake +23 -0
  36. data/lib/tasks/update_country_codes.rake +24 -0
  37. data/soapy_bing.gemspec +2 -1
  38. data/spec/fixtures/ads/campaign_performance_report.csv +37 -0
  39. data/spec/fixtures/ads/campaign_performance_report.json +170 -0
  40. data/spec/fixtures/ads/campaigns_by_account_id.csv +7 -0
  41. data/spec/fixtures/{bulk/campaigns.json → ads/campaigns_by_account_id.json} +496 -240
  42. data/spec/fixtures/ads/campaigns_by_campaign_ids.csv +5 -0
  43. data/spec/fixtures/ads/campaigns_by_campaign_ids.json +910 -0
  44. data/spec/fixtures/vcr_cassettes/SoapyBing_Accounts/_list/returns_a_list_of_SoapyBing_Account_objects.yml +27 -27
  45. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_campaigns/by_account_id/returns_parsed_rows.yml +301 -0
  46. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_campaigns/by_campaign_ids/returns_parsed_rows.yml +300 -0
  47. data/spec/fixtures/vcr_cassettes/SoapyBing_CampaignManagement/_get_geo_locations/returns_a_list_of_geo_locations_hashes.yml +154 -0
  48. data/spec/fixtures/vcr_cassettes/campaign_performance_report/with_pending_status.yml +65 -94
  49. data/spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_empty_response.yml +511 -0
  50. data/spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_response.yml +384 -0
  51. data/spec/integration/soapy_bing/accounts_spec.rb +1 -0
  52. data/spec/integration/soapy_bing/ads_campaigns_spec.rb +85 -0
  53. data/spec/integration/soapy_bing/campaign_management_spec.rb +22 -0
  54. data/spec/integration/soapy_bing/oauth_credentials_spec.rb +1 -0
  55. data/spec/simplecov_setup.rb +1 -0
  56. data/spec/soapy_bing/account_spec.rb +6 -2
  57. data/spec/soapy_bing/accounts_spec.rb +47 -0
  58. data/spec/soapy_bing/ads/campaign_performance_report_spec.rb +79 -0
  59. data/spec/soapy_bing/ads/campaigns_spec.rb +99 -0
  60. data/spec/soapy_bing/ads/{bulk/parsers/csv_parser_spec.rb → parsers/bulk_csv_parser_spec.rb} +5 -4
  61. data/spec/soapy_bing/ads/{reports/parsers/csv_parser_spec.rb → parsers/report_csv_parser_spec.rb} +6 -4
  62. data/spec/soapy_bing/country_codes_spec.rb +39 -0
  63. data/spec/soapy_bing/helpers/zip_downloader_spec.rb +2 -0
  64. data/spec/soapy_bing/oauth_credentials_spec.rb +6 -2
  65. data/spec/soapy_bing/param_guard_spec.rb +2 -0
  66. data/spec/soapy_bing/service_spec.rb +56 -0
  67. data/spec/spec_helper.rb +1 -0
  68. data/spec/support/dotenv.rb +1 -0
  69. data/spec/support/vcr.rb +75 -6
  70. metadata +74 -118
  71. data/lib/soapy_bing/ads/bulk.rb +0 -3
  72. data/lib/soapy_bing/ads/bulk/campaigns.rb +0 -65
  73. data/lib/soapy_bing/ads/bulk/parsers.rb +0 -2
  74. data/lib/soapy_bing/ads/bulk/parsers/csv_parser.rb +0 -35
  75. data/lib/soapy_bing/ads/reports.rb +0 -4
  76. data/lib/soapy_bing/ads/reports/base.rb +0 -74
  77. data/lib/soapy_bing/ads/reports/campaign_performance_report.rb +0 -24
  78. data/lib/soapy_bing/ads/reports/parsers.rb +0 -2
  79. data/lib/soapy_bing/ads/reports/parsers/csv_parser.rb +0 -46
  80. data/lib/soapy_bing/helpers/class_name.rb +0 -10
  81. data/lib/soapy_bing/soap.rb +0 -4
  82. data/lib/soapy_bing/soap/request.rb +0 -10
  83. data/lib/soapy_bing/soap/request/base.rb +0 -38
  84. data/lib/soapy_bing/soap/request/download_campaigns_by_account_ids_request.rb +0 -17
  85. data/lib/soapy_bing/soap/request/get_accounts_info_request.rb +0 -17
  86. data/lib/soapy_bing/soap/request/get_ad_groups_by_campaign_id_request.rb +0 -17
  87. data/lib/soapy_bing/soap/request/get_ads_by_ad_group_id_request.rb +0 -17
  88. data/lib/soapy_bing/soap/request/get_bulk_download_status_request.rb +0 -17
  89. data/lib/soapy_bing/soap/request/get_targets_by_campaign_ids_request.rb +0 -17
  90. data/lib/soapy_bing/soap/request/poll_generate_report_request.rb +0 -34
  91. data/lib/soapy_bing/soap/request/submit_generate_report_request.rb +0 -17
  92. data/lib/soapy_bing/soap/response.rb +0 -14
  93. data/lib/soapy_bing/soap/response/base.rb +0 -17
  94. data/lib/soapy_bing/soap/response/download_campaigns_by_account_ids_response.rb +0 -12
  95. data/lib/soapy_bing/soap/response/get_accounts_info_response.rb +0 -12
  96. data/lib/soapy_bing/soap/response/get_ad_groups_by_campaign_id_response.rb +0 -12
  97. data/lib/soapy_bing/soap/response/get_ads_by_ad_group_id_response.rb +0 -12
  98. data/lib/soapy_bing/soap/response/get_bulk_download_status_response.rb +0 -17
  99. data/lib/soapy_bing/soap/response/get_targets_by_campaign_ids_response.rb +0 -12
  100. data/lib/soapy_bing/soap/response/payload.rb +0 -28
  101. data/lib/soapy_bing/soap/response/poll_generate_report_response.rb +0 -14
  102. data/lib/soapy_bing/soap/response/report_status.rb +0 -34
  103. data/lib/soapy_bing/soap/response/submit_generate_report_response.rb +0 -12
  104. data/lib/soapy_bing/soap/template_renderer.rb +0 -22
  105. data/lib/soapy_bing/soap/templates/download_campaigns_by_account_ids.xml.erb +0 -22
  106. data/lib/soapy_bing/soap/templates/get_accounts_info.xml.erb +0 -12
  107. data/lib/soapy_bing/soap/templates/get_ad_groups_by_campaign_id.xml.erb +0 -15
  108. data/lib/soapy_bing/soap/templates/get_ads_by_ad_group_id.xml.erb +0 -15
  109. data/lib/soapy_bing/soap/templates/get_bulk_download_status.xml.erb +0 -15
  110. data/lib/soapy_bing/soap/templates/get_targets_by_campaign_ids.xml.erb +0 -20
  111. data/lib/soapy_bing/soap/templates/poll_generate_report.xml.erb +0 -18
  112. data/lib/soapy_bing/soap/templates/submit_generate_report.xml.erb +0 -46
  113. data/spec/fixtures/bulk/campaigns.csv +0 -8
  114. data/spec/fixtures/get_ad_groups_by_campaign_id.json +0 -587
  115. data/spec/fixtures/get_ads_by_ad_group_id.json +0 -218
  116. data/spec/fixtures/get_targets_by_campaign_ids.json +0 -81
  117. data/spec/fixtures/reports/campaign_performance_report.csv +0 -37
  118. data/spec/fixtures/reports/campaign_performance_report.json +0 -146
  119. data/spec/fixtures/soap_templates/simple.xml.erb +0 -2
  120. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_ad_groups_by_campaign_id/1_1_1.yml +0 -150
  121. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_ads_by_ad_group_id/1_2_1.yml +0 -141
  122. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_targets_by_campaign_ids/1_3_1.yml +0 -111
  123. data/spec/fixtures/vcr_cassettes/SoapyBing_Ads_Bulk_Campaigns/_result_file_url/returns_result_file_url.yml +0 -216
  124. data/spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_status.yml +0 -284
  125. data/spec/integration/soapy_bing/ads/bulk/campaigns_spec.rb +0 -35
  126. data/spec/integration/soapy_bing/ads/reports/campaign_performance_report_spec.rb +0 -40
  127. data/spec/integration/soapy_bing/ads_spec.rb +0 -32
  128. data/spec/soapy_bing/ads/reports/campaign_performance_report_spec.rb +0 -42
  129. data/spec/soapy_bing/ads_spec.rb +0 -33
  130. data/spec/soapy_bing/helpers/class_name_spec.rb +0 -15
  131. data/spec/soapy_bing/soap/request/base_spec.rb +0 -55
  132. data/spec/soapy_bing/soap/request/poll_generate_report_request_spec.rb +0 -60
  133. data/spec/soapy_bing/soap/response/base_spec.rb +0 -13
  134. data/spec/soapy_bing/soap/response/get_bulk_download_status_response_spec.rb +0 -60
  135. data/spec/soapy_bing/soap/response/payload_spec.rb +0 -48
  136. data/spec/soapy_bing/soap/response/poll_generate_report_response_spec.rb +0 -26
  137. data/spec/soapy_bing/soap/response/report_status_spec.rb +0 -92
  138. data/spec/soapy_bing/soap/response/submit_generate_report_response_spec.rb +0 -20
  139. data/spec/soapy_bing/soap/template_renderer_spec.rb +0 -25
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe SoapyBing::Service do
4
+ subject(:service) { described_class.campaign_management }
5
+
6
+ describe '#build' do
7
+ context 'without options' do
8
+ it 'creates service with default savon globals' do
9
+ globals = service.savon_client.globals
10
+ expect(globals[:element_form_default]).to eq(:qualified)
11
+ expect(globals[:convert_request_keys_to]).to eq(:camelcase)
12
+ expect(globals[:wsdl]).to end_with('campaign_management.wsdl')
13
+ expect(globals[:namespaces]).to eq({})
14
+ end
15
+ end
16
+
17
+ context 'with custom options' do
18
+ subject(:service) { described_class.campaign_management(options) }
19
+
20
+ let(:options) do
21
+ {
22
+ savon_globals: {
23
+ namespaces: { 'this_is_a' => 'test' }
24
+ }
25
+ }
26
+ end
27
+
28
+ it 'creates service with default savon globals and user options' do
29
+ globals = service.savon_client.globals
30
+ expect(globals[:element_form_default]).to eq(:qualified)
31
+ expect(globals[:convert_request_keys_to]).to eq(:camelcase)
32
+ expect(globals[:wsdl]).to end_with('campaign_management.wsdl')
33
+ expect(globals[:namespaces]).to eq('this_is_a' => 'test')
34
+ end
35
+
36
+ it 'doesnt modify options hash' do
37
+ service.savon_client.globals
38
+ expect(options).to eq(
39
+ savon_globals: {
40
+ namespaces: { 'this_is_a' => 'test' }
41
+ }
42
+ )
43
+ end
44
+ end
45
+ end
46
+
47
+ describe '#respond_to?' do
48
+ it 'responds to service operations' do
49
+ expect(service.respond_to?(:get_ads_by_ids)).to be_truthy
50
+ end
51
+
52
+ it 'doest respond to anything' do
53
+ expect(service.respond_to?(:answer_to_life_universe_and_everything)).to be_falsey
54
+ end
55
+ end
56
+ end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'simplecov_setup'
3
4
 
4
5
  require 'bundler/setup'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'dotenv'
3
4
 
4
5
  Dotenv.load('.env.local', '.env')
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'cgi'
3
4
  require 'vcr'
4
5
  require 'active_support/core_ext/hash/conversions'
@@ -7,7 +8,7 @@ VCR.configure do |c|
7
8
  c.configure_rspec_metadata!
8
9
  c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
9
10
  c.hook_into :webmock
10
- c.default_cassette_options = { match_requests_on: %i(method uri body) }
11
+ c.default_cassette_options = { match_requests_on: %i[method uri body] }
11
12
 
12
13
  c.filter_sensitive_data('bing-ads-oauth-client-id') { ENV['BING_ADS_OAUTH_CLIENT_ID'] }
13
14
  c.filter_sensitive_data('bing-ads-oauth-client-secret') { ENV['BING_ADS_OAUTH_CLIENT_SECRET'] }
@@ -77,9 +78,10 @@ VCR.configure do |c|
77
78
  end
78
79
 
79
80
  c.before_record do |interaction|
80
- # auto-generate report payload fixtures
81
- # spec/fixtures/reports/campaign_performance_report.json
82
- # spec/fixtures/reports/campaing_performance_report.csv
81
+ # auto-generate campaign_performance_report payload fixtures
82
+ # spec/fixtures/ads/campaign_performance_report.json
83
+ # spec/fixtures/ads/campaing_performance_report.csv
84
+ next unless interaction.request.uri =~ /ReportDownload/
83
85
  if interaction.response.headers['Content-Type'].first == 'application/x-zip-compressed'
84
86
  # refactor zip into module
85
87
  csv_data = Zip::InputStream.open(StringIO.new(interaction.response.body)) do |archive_io|
@@ -87,9 +89,9 @@ VCR.configure do |c|
87
89
  file_io.read
88
90
  end
89
91
 
90
- fixtures_dir = File.join('spec', 'fixtures', 'reports')
92
+ fixtures_dir = File.join('spec', 'fixtures', 'ads')
91
93
  File.open(File.join(fixtures_dir, 'campaign_performance_report.json'), 'wb') do |file|
92
- parser = SoapyBing::Ads::Reports::Parsers::CSVParser.new(csv_data)
94
+ parser = SoapyBing::Ads::Parsers::ReportCsvParser.new(csv_data)
93
95
  file.write(JSON.pretty_generate(parser.rows))
94
96
  end
95
97
  File.open(File.join(fixtures_dir, 'campaign_performance_report.csv'), 'wb') do |file|
@@ -98,5 +100,72 @@ VCR.configure do |c|
98
100
  end
99
101
  end
100
102
 
103
+ c.before_record do |interaction, cassette|
104
+ # auto-generate campaigns payload fixtures
105
+ # spec/fixtures/ads/campaigns_by_account_id.json
106
+ # spec/fixtures/ads/campaings_by_account_id.csv
107
+ # spec/fixtures/ads/campaigns_by_campaign_ids.json
108
+ # spec/fixtures/ads/campaings_by_campaign_ids.csv
109
+ next unless interaction.request.uri =~ /bulkdownloadresultfiles/
110
+
111
+ campaigns_ids = cassette.name =~ /by campaign_ids/
112
+ fixture_name = "campaigns_by_#{campaigns_ids ? 'campaign_ids' : 'account_id'}"
113
+
114
+ body_zip_entry_name = nil
115
+ unzipped_body = Zip::InputStream.open(StringIO.new(interaction.response.body)) do |archive_io|
116
+ entry = archive_io.get_next_entry
117
+ body_zip_entry_name = entry.name
118
+ entry.get_input_stream.read
119
+ end
120
+
121
+ unzipped_body.gsub!(ENV['BING_ADS_ACCOUNT_ID'], '123456')
122
+
123
+ rows = SoapyBing::Ads::Parsers::BulkCsvParser.new(unzipped_body).rows[0..5]
124
+
125
+ # Replace campaign names because it is sensitive data
126
+ rows.map do |row|
127
+ next unless row['Type'] == 'Campaign'
128
+ row['Campaign'] = "Campaign #{row['Id']}"
129
+ end
130
+
131
+ modified_csv = CSV.generate do |csv|
132
+ csv << rows.first.keys
133
+ rows.each do |row|
134
+ csv << row.values
135
+ end
136
+ end
137
+
138
+ fixtures_dir = File.join('spec', 'fixtures', 'ads')
139
+ File.open(File.join(fixtures_dir, "#{fixture_name}.csv"), 'wb') do |file|
140
+ file.write(modified_csv)
141
+ end
142
+
143
+ File.open(File.join(fixtures_dir, "#{fixture_name}.json"), 'wb') do |file|
144
+ file.write(JSON.pretty_generate(rows))
145
+ end
146
+
147
+ zipped_body = StringIO.new
148
+ Zip::OutputStream.write_buffer(zipped_body) do |io|
149
+ io.put_next_entry(body_zip_entry_name)
150
+ io.write(modified_csv)
151
+ end
152
+ interaction.response.body = String.new(zipped_body.string, encoding: 'ASCII-8BIT')
153
+ end
154
+
155
+ # reduce response size for get_geo_locations vcr file
156
+ c.before_record do |interaction|
157
+ next unless interaction.request.uri =~ /GeoLocations\.csv/
158
+
159
+ rows = CSV.parse(interaction.response.body)[0..5]
160
+
161
+ modified_csv = CSV.generate do |csv|
162
+ rows.each do |row|
163
+ csv << row
164
+ end
165
+ end
166
+
167
+ interaction.response.body = modified_csv
168
+ end
169
+
101
170
  c.ignore_hosts 'codeclimate.com' # allow codeclimate-test-reporter to phone home
102
171
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soapy_bing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ad2games GmbH
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-19 00:00:00.000000000 Z
11
+ date: 2017-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: erubis
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activesupport
28
+ name: httparty
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,47 +39,47 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: httparty
42
+ name: retryable
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 2.0.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 2.0.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: retryable
56
+ name: rubyzip
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 2.0.0
61
+ version: 1.0.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 2.0.0
68
+ version: 1.0.0
69
69
  - !ruby/object:Gem::Dependency
70
- name: rubyzip
70
+ name: savon
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.0.0
75
+ version: '2.11'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.0.0
82
+ version: '2.11'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -197,99 +197,65 @@ files:
197
197
  - lib/soapy_bing/account.rb
198
198
  - lib/soapy_bing/accounts.rb
199
199
  - lib/soapy_bing/ads.rb
200
- - lib/soapy_bing/ads/bulk.rb
201
- - lib/soapy_bing/ads/bulk/campaigns.rb
202
- - lib/soapy_bing/ads/bulk/parsers.rb
203
- - lib/soapy_bing/ads/bulk/parsers/csv_parser.rb
204
- - lib/soapy_bing/ads/reports.rb
205
- - lib/soapy_bing/ads/reports/base.rb
206
- - lib/soapy_bing/ads/reports/campaign_performance_report.rb
207
- - lib/soapy_bing/ads/reports/parsers.rb
208
- - lib/soapy_bing/ads/reports/parsers/csv_parser.rb
200
+ - lib/soapy_bing/ads/campaign_performance_report.rb
201
+ - lib/soapy_bing/ads/campaigns.rb
202
+ - lib/soapy_bing/ads/parsers/bulk_csv_parser.rb
203
+ - lib/soapy_bing/ads/parsers/report_csv_parser.rb
204
+ - lib/soapy_bing/ads/report.rb
205
+ - lib/soapy_bing/campaign_management.rb
206
+ - lib/soapy_bing/country_codes.rb
207
+ - lib/soapy_bing/country_codes.yml
209
208
  - lib/soapy_bing/customer.rb
210
209
  - lib/soapy_bing/helpers.rb
211
- - lib/soapy_bing/helpers/class_name.rb
212
210
  - lib/soapy_bing/helpers/zip_downloader.rb
213
211
  - lib/soapy_bing/oauth_credentials.rb
214
212
  - lib/soapy_bing/param_guard.rb
215
- - lib/soapy_bing/soap.rb
216
- - lib/soapy_bing/soap/request.rb
217
- - lib/soapy_bing/soap/request/base.rb
218
- - lib/soapy_bing/soap/request/download_campaigns_by_account_ids_request.rb
219
- - lib/soapy_bing/soap/request/get_accounts_info_request.rb
220
- - lib/soapy_bing/soap/request/get_ad_groups_by_campaign_id_request.rb
221
- - lib/soapy_bing/soap/request/get_ads_by_ad_group_id_request.rb
222
- - lib/soapy_bing/soap/request/get_bulk_download_status_request.rb
223
- - lib/soapy_bing/soap/request/get_targets_by_campaign_ids_request.rb
224
- - lib/soapy_bing/soap/request/poll_generate_report_request.rb
225
- - lib/soapy_bing/soap/request/submit_generate_report_request.rb
226
- - lib/soapy_bing/soap/response.rb
227
- - lib/soapy_bing/soap/response/base.rb
228
- - lib/soapy_bing/soap/response/download_campaigns_by_account_ids_response.rb
229
- - lib/soapy_bing/soap/response/get_accounts_info_response.rb
230
- - lib/soapy_bing/soap/response/get_ad_groups_by_campaign_id_response.rb
231
- - lib/soapy_bing/soap/response/get_ads_by_ad_group_id_response.rb
232
- - lib/soapy_bing/soap/response/get_bulk_download_status_response.rb
233
- - lib/soapy_bing/soap/response/get_targets_by_campaign_ids_response.rb
234
- - lib/soapy_bing/soap/response/payload.rb
235
- - lib/soapy_bing/soap/response/poll_generate_report_response.rb
236
- - lib/soapy_bing/soap/response/report_status.rb
237
- - lib/soapy_bing/soap/response/submit_generate_report_response.rb
238
- - lib/soapy_bing/soap/template_renderer.rb
239
- - lib/soapy_bing/soap/templates/download_campaigns_by_account_ids.xml.erb
240
- - lib/soapy_bing/soap/templates/get_accounts_info.xml.erb
241
- - lib/soapy_bing/soap/templates/get_ad_groups_by_campaign_id.xml.erb
242
- - lib/soapy_bing/soap/templates/get_ads_by_ad_group_id.xml.erb
243
- - lib/soapy_bing/soap/templates/get_bulk_download_status.xml.erb
244
- - lib/soapy_bing/soap/templates/get_targets_by_campaign_ids.xml.erb
245
- - lib/soapy_bing/soap/templates/poll_generate_report.xml.erb
246
- - lib/soapy_bing/soap/templates/submit_generate_report.xml.erb
213
+ - lib/soapy_bing/service.rb
214
+ - lib/soapy_bing/service_operation.rb
247
215
  - lib/soapy_bing/version.rb
216
+ - lib/soapy_bing/wsdl/ad_insight.wsdl
217
+ - lib/soapy_bing/wsdl/bulk.wsdl
218
+ - lib/soapy_bing/wsdl/campaign_management.wsdl
219
+ - lib/soapy_bing/wsdl/customer_billing.wsdl
220
+ - lib/soapy_bing/wsdl/customer_management.wsdl
221
+ - lib/soapy_bing/wsdl/reporting.wsdl
248
222
  - lib/tasks/console.rake
249
223
  - lib/tasks/coverage.rake
250
224
  - lib/tasks/spec.rake
225
+ - lib/tasks/upate_wsdl_files.rake
226
+ - lib/tasks/update_country_codes.rake
251
227
  - soapy_bing.gemspec
252
- - spec/fixtures/bulk/campaigns.csv
253
- - spec/fixtures/bulk/campaigns.json
254
- - spec/fixtures/get_ad_groups_by_campaign_id.json
255
- - spec/fixtures/get_ads_by_ad_group_id.json
256
- - spec/fixtures/get_targets_by_campaign_ids.json
228
+ - spec/fixtures/ads/campaign_performance_report.csv
229
+ - spec/fixtures/ads/campaign_performance_report.json
230
+ - spec/fixtures/ads/campaigns_by_account_id.csv
231
+ - spec/fixtures/ads/campaigns_by_account_id.json
232
+ - spec/fixtures/ads/campaigns_by_campaign_ids.csv
233
+ - spec/fixtures/ads/campaigns_by_campaign_ids.json
257
234
  - spec/fixtures/helpers/hello.zip
258
- - spec/fixtures/reports/campaign_performance_report.csv
259
- - spec/fixtures/reports/campaign_performance_report.json
260
- - spec/fixtures/soap_templates/simple.xml.erb
261
235
  - spec/fixtures/vcr_cassettes/SoapyBing_Accounts/_list/returns_a_list_of_SoapyBing_Account_objects.yml
262
- - spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_ad_groups_by_campaign_id/1_1_1.yml
263
- - spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_ads_by_ad_group_id/1_2_1.yml
264
- - spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_targets_by_campaign_ids/1_3_1.yml
265
- - spec/fixtures/vcr_cassettes/SoapyBing_Ads_Bulk_Campaigns/_result_file_url/returns_result_file_url.yml
236
+ - spec/fixtures/vcr_cassettes/SoapyBing_Ads/_campaigns/by_account_id/returns_parsed_rows.yml
237
+ - spec/fixtures/vcr_cassettes/SoapyBing_Ads/_campaigns/by_campaign_ids/returns_parsed_rows.yml
238
+ - spec/fixtures/vcr_cassettes/SoapyBing_CampaignManagement/_get_geo_locations/returns_a_list_of_geo_locations_hashes.yml
266
239
  - spec/fixtures/vcr_cassettes/campaign_performance_report/with_pending_status.yml
267
- - spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_status.yml
240
+ - spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_empty_response.yml
241
+ - spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_response.yml
268
242
  - spec/fixtures/vcr_cassettes/oauth_credentials/access_token/with_successful_status.yml
269
243
  - spec/integration/soapy_bing/accounts_spec.rb
270
- - spec/integration/soapy_bing/ads/bulk/campaigns_spec.rb
271
- - spec/integration/soapy_bing/ads/reports/campaign_performance_report_spec.rb
272
- - spec/integration/soapy_bing/ads_spec.rb
244
+ - spec/integration/soapy_bing/ads_campaigns_spec.rb
245
+ - spec/integration/soapy_bing/campaign_management_spec.rb
273
246
  - spec/integration/soapy_bing/oauth_credentials_spec.rb
274
247
  - spec/simplecov_setup.rb
275
248
  - spec/soapy_bing/account_spec.rb
276
- - spec/soapy_bing/ads/bulk/parsers/csv_parser_spec.rb
277
- - spec/soapy_bing/ads/reports/campaign_performance_report_spec.rb
278
- - spec/soapy_bing/ads/reports/parsers/csv_parser_spec.rb
279
- - spec/soapy_bing/ads_spec.rb
280
- - spec/soapy_bing/helpers/class_name_spec.rb
249
+ - spec/soapy_bing/accounts_spec.rb
250
+ - spec/soapy_bing/ads/campaign_performance_report_spec.rb
251
+ - spec/soapy_bing/ads/campaigns_spec.rb
252
+ - spec/soapy_bing/ads/parsers/bulk_csv_parser_spec.rb
253
+ - spec/soapy_bing/ads/parsers/report_csv_parser_spec.rb
254
+ - spec/soapy_bing/country_codes_spec.rb
281
255
  - spec/soapy_bing/helpers/zip_downloader_spec.rb
282
256
  - spec/soapy_bing/oauth_credentials_spec.rb
283
257
  - spec/soapy_bing/param_guard_spec.rb
284
- - spec/soapy_bing/soap/request/base_spec.rb
285
- - spec/soapy_bing/soap/request/poll_generate_report_request_spec.rb
286
- - spec/soapy_bing/soap/response/base_spec.rb
287
- - spec/soapy_bing/soap/response/get_bulk_download_status_response_spec.rb
288
- - spec/soapy_bing/soap/response/payload_spec.rb
289
- - spec/soapy_bing/soap/response/poll_generate_report_response_spec.rb
290
- - spec/soapy_bing/soap/response/report_status_spec.rb
291
- - spec/soapy_bing/soap/response/submit_generate_report_response_spec.rb
292
- - spec/soapy_bing/soap/template_renderer_spec.rb
258
+ - spec/soapy_bing/service_spec.rb
293
259
  - spec/spec_helper.rb
294
260
  - spec/support/dotenv.rb
295
261
  - spec/support/vcr.rb
@@ -313,52 +279,42 @@ required_rubygems_version: !ruby/object:Gem::Requirement
313
279
  version: '0'
314
280
  requirements: []
315
281
  rubyforge_project:
316
- rubygems_version: 2.5.1
282
+ rubygems_version: 2.5.2
317
283
  signing_key:
318
284
  specification_version: 4
319
285
  summary: Simple client for the Bing Ads APIs
320
286
  test_files:
321
- - spec/fixtures/bulk/campaigns.csv
322
- - spec/fixtures/bulk/campaigns.json
323
- - spec/fixtures/get_ad_groups_by_campaign_id.json
324
- - spec/fixtures/get_ads_by_ad_group_id.json
325
- - spec/fixtures/get_targets_by_campaign_ids.json
287
+ - spec/fixtures/ads/campaign_performance_report.csv
288
+ - spec/fixtures/ads/campaign_performance_report.json
289
+ - spec/fixtures/ads/campaigns_by_account_id.csv
290
+ - spec/fixtures/ads/campaigns_by_account_id.json
291
+ - spec/fixtures/ads/campaigns_by_campaign_ids.csv
292
+ - spec/fixtures/ads/campaigns_by_campaign_ids.json
326
293
  - spec/fixtures/helpers/hello.zip
327
- - spec/fixtures/reports/campaign_performance_report.csv
328
- - spec/fixtures/reports/campaign_performance_report.json
329
- - spec/fixtures/soap_templates/simple.xml.erb
330
294
  - spec/fixtures/vcr_cassettes/SoapyBing_Accounts/_list/returns_a_list_of_SoapyBing_Account_objects.yml
331
- - spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_ad_groups_by_campaign_id/1_1_1.yml
332
- - spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_ads_by_ad_group_id/1_2_1.yml
333
- - spec/fixtures/vcr_cassettes/SoapyBing_Ads/_get_targets_by_campaign_ids/1_3_1.yml
334
- - spec/fixtures/vcr_cassettes/SoapyBing_Ads_Bulk_Campaigns/_result_file_url/returns_result_file_url.yml
295
+ - spec/fixtures/vcr_cassettes/SoapyBing_Ads/_campaigns/by_account_id/returns_parsed_rows.yml
296
+ - spec/fixtures/vcr_cassettes/SoapyBing_Ads/_campaigns/by_campaign_ids/returns_parsed_rows.yml
297
+ - spec/fixtures/vcr_cassettes/SoapyBing_CampaignManagement/_get_geo_locations/returns_a_list_of_geo_locations_hashes.yml
335
298
  - spec/fixtures/vcr_cassettes/campaign_performance_report/with_pending_status.yml
336
- - spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_status.yml
299
+ - spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_empty_response.yml
300
+ - spec/fixtures/vcr_cassettes/campaign_performance_report/with_successful_response.yml
337
301
  - spec/fixtures/vcr_cassettes/oauth_credentials/access_token/with_successful_status.yml
338
302
  - spec/integration/soapy_bing/accounts_spec.rb
339
- - spec/integration/soapy_bing/ads/bulk/campaigns_spec.rb
340
- - spec/integration/soapy_bing/ads/reports/campaign_performance_report_spec.rb
341
- - spec/integration/soapy_bing/ads_spec.rb
303
+ - spec/integration/soapy_bing/ads_campaigns_spec.rb
304
+ - spec/integration/soapy_bing/campaign_management_spec.rb
342
305
  - spec/integration/soapy_bing/oauth_credentials_spec.rb
343
306
  - spec/simplecov_setup.rb
344
307
  - spec/soapy_bing/account_spec.rb
345
- - spec/soapy_bing/ads/bulk/parsers/csv_parser_spec.rb
346
- - spec/soapy_bing/ads/reports/campaign_performance_report_spec.rb
347
- - spec/soapy_bing/ads/reports/parsers/csv_parser_spec.rb
348
- - spec/soapy_bing/ads_spec.rb
349
- - spec/soapy_bing/helpers/class_name_spec.rb
308
+ - spec/soapy_bing/accounts_spec.rb
309
+ - spec/soapy_bing/ads/campaign_performance_report_spec.rb
310
+ - spec/soapy_bing/ads/campaigns_spec.rb
311
+ - spec/soapy_bing/ads/parsers/bulk_csv_parser_spec.rb
312
+ - spec/soapy_bing/ads/parsers/report_csv_parser_spec.rb
313
+ - spec/soapy_bing/country_codes_spec.rb
350
314
  - spec/soapy_bing/helpers/zip_downloader_spec.rb
351
315
  - spec/soapy_bing/oauth_credentials_spec.rb
352
316
  - spec/soapy_bing/param_guard_spec.rb
353
- - spec/soapy_bing/soap/request/base_spec.rb
354
- - spec/soapy_bing/soap/request/poll_generate_report_request_spec.rb
355
- - spec/soapy_bing/soap/response/base_spec.rb
356
- - spec/soapy_bing/soap/response/get_bulk_download_status_response_spec.rb
357
- - spec/soapy_bing/soap/response/payload_spec.rb
358
- - spec/soapy_bing/soap/response/poll_generate_report_response_spec.rb
359
- - spec/soapy_bing/soap/response/report_status_spec.rb
360
- - spec/soapy_bing/soap/response/submit_generate_report_response_spec.rb
361
- - spec/soapy_bing/soap/template_renderer_spec.rb
317
+ - spec/soapy_bing/service_spec.rb
362
318
  - spec/spec_helper.rb
363
319
  - spec/support/dotenv.rb
364
320
  - spec/support/vcr.rb