soapy_bing 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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