soapy_cake 1.8.1 → 1.9.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48b4062dce12845caf36f528b60327033e63d7a0
4
- data.tar.gz: cbcbfe9b1dddceb67984576a63825ff5c19b39ca
3
+ metadata.gz: e316df7a7a9c2e50db3dec1cda60ec4095d01184
4
+ data.tar.gz: 6720a6ab9d6aa939ae5360842d11102af473ff9e
5
5
  SHA512:
6
- metadata.gz: af1c7e864df7ad50faac0d902c7578bf869decef11ff63b9bb6a4f1de6acdf9acf6a35a3666e1fc03385566216d1d5187dca1589e8c51aaa7680b6bccd22ec94
7
- data.tar.gz: 79149b70f6e70c92879016ecb054f78d1310c50713142adc7a643ea1f106951edc202e3fa63f582b6878627a5f4612cc23a0fd41d570ec5c989ba9768b99b0d1
6
+ metadata.gz: 97a4313edc0705a004613b72e89830310621f3eb6a174debe8d35b688126fff9e4ccdda0efdb599e7d5d6e9094c1cdd5a010cfd303e1556d484b386bd6c59b0a
7
+ data.tar.gz: 951252dab7d028540ed035cb298c0daa7241a88d219b26b24b3eab94dc8a92759fb1dae0205354d8a9d9c46943a0b86ea8e80ee630bfcfc6261709efe44f4cc1
@@ -15,7 +15,7 @@ admin:
15
15
  affiliate: 2
16
16
  apply_suppression_list_to_offer: 1
17
17
  blacklist: 1
18
- campaign: 2
18
+ campaign: 3
19
19
  caps: 1
20
20
  contact: 2
21
21
  creative: 1
@@ -78,11 +78,11 @@ module SoapyCake
78
78
  run Request.new(:admin, :reports, :caps, opts)
79
79
  end
80
80
 
81
- def currencies(*)
81
+ def currencies
82
82
  run Request.new(:admin, :get, :currencies, {})
83
83
  end
84
84
 
85
- def tiers(*)
85
+ def tiers
86
86
  run Request.new(:admin, :get, :affiliate_tiers, {})
87
87
  end
88
88
 
@@ -102,11 +102,15 @@ module SoapyCake
102
102
  run Request.new(:admin, :signup, :affiliate, opts)
103
103
  end
104
104
 
105
- def verticals(*)
105
+ def media_types
106
+ run(Request.new(:admin, :signup, :get_media_types, {}))[:MediaType]
107
+ end
108
+
109
+ def verticals
106
110
  run Request.new(:admin, :get, :verticals, {})
107
111
  end
108
112
 
109
- def countries(*)
113
+ def countries
110
114
  run Request.new(:admin, :get, :countries, {})
111
115
  end
112
116
 
@@ -114,7 +118,7 @@ module SoapyCake
114
118
  run Request.new(:admin, :get, :payment_types, {})
115
119
  end
116
120
 
117
- def blacklist_reasons(*)
121
+ def blacklist_reasons
118
122
  run Request.new(:admin, :get, :blacklist_reasons, {})
119
123
  end
120
124
  end
@@ -151,6 +151,17 @@ module SoapyCake
151
151
  run Request.new(:admin, :addedit, :affiliate, opts)
152
152
  end
153
153
 
154
+ def add_campaign(opts)
155
+ addedit_campaign(opts.merge(campaign_id: 0))
156
+ end
157
+
158
+ def edit_campaign(opts)
159
+ require_params(opts, %i(campaign_id))
160
+ validate_id(opts, :campaign_id)
161
+
162
+ addedit_campaign(opts)
163
+ end
164
+
154
165
  private
155
166
 
156
167
  def apply_tag_opts!(opts)
@@ -169,7 +180,7 @@ module SoapyCake
169
180
  OFFER_DEFAULT_OPTIONS.merge(
170
181
  conversion_cap_behavior: const_lookup(:conversion_behavior_id, :system),
171
182
  conversion_behavior_on_redirect: const_lookup(:conversion_behavior_id, :system),
172
- expiration_date: Date.today + (365 * 100)
183
+ expiration_date: future_expiration_date
173
184
  )
174
185
  end
175
186
 
@@ -193,5 +204,18 @@ module SoapyCake
193
204
 
194
205
  run Request.new(:admin, :addedit, :offer_contract, opts)
195
206
  end
207
+
208
+ def addedit_campaign(opts)
209
+ require_params(opts, %i(affiliate_id offer_id media_type_id account_status_id payout))
210
+
211
+ translate_values!(opts, %i(account_status_id))
212
+
213
+ opts.reverse_merge!(
214
+ display_link_type_id: 1,
215
+ expiration_date: future_expiration_date
216
+ )
217
+
218
+ run Request.new(:admin, :addedit, :campaign, opts)
219
+ end
196
220
  end
197
221
  end
@@ -41,5 +41,13 @@ module SoapyCake
41
41
  fail ArgumentError, "#{key} is not a valid value for #{type}"
42
42
  end
43
43
  end
44
+
45
+ # Some API calls require expiration dates.
46
+ # The default is to not expire campaigns/offers/etc., so we set this to far in the future.
47
+ # It cannot be *that* far in the future though because it causes a datetime overflow
48
+ # in the steam powered rusty black box they call a database server.
49
+ def future_expiration_date
50
+ Date.today + (365 * 30)
51
+ end
44
52
  end
45
53
  end
@@ -38,9 +38,23 @@ module SoapyCake
38
38
  def check_errors!
39
39
  fault = sax.for_tag(:fault).first
40
40
  fail RequestFailed, fault[:reason][:text] if fault
41
+
42
+ return if error_check_special_case?
43
+
41
44
  fail RequestFailed, error_message unless sax.for_tag(:success).first == 'true'
42
45
  end
43
46
 
47
+ def error_check_special_case?
48
+ # Don't ask...
49
+ # As you might imagine, CAKE simply does not return the success element
50
+ # for this specific request. Also, this is the only request with a tag depth
51
+ # of 4, not 3 or 5 like ALL OTHER requests.
52
+ # BTW: There is a 10$ reward if anyone can find a worse designed API.
53
+ return true if sax.for_tag(:MediaType).count > 0
54
+
55
+ false
56
+ end
57
+
44
58
  def error_message
45
59
  sax.for_tag(:message).first || sax.for_tag(:Text).first || 'Unknown error'
46
60
  end
@@ -1,3 +1,3 @@
1
1
  module SoapyCake
2
- VERSION = '1.8.1'
2
+ VERSION = '1.9.0'
3
3
  end
@@ -26,7 +26,7 @@ http_interactions:
26
26
  <cake:contact_first_name>Foxy</cake:contact_first_name>
27
27
  <cake:contact_last_name>Fox</cake:contact_last_name>
28
28
  <cake:contact_email_address>foxy@forrest.com</cake:contact_email_address>
29
- <cake:date_added>2015-06-11T01:00:00</cake:date_added>
29
+ <cake:date_added>2015-06-15T01:00:00</cake:date_added>
30
30
  </cake:Affiliate>
31
31
  </env:Body>
32
32
  </env:Envelope>
@@ -0,0 +1,48 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://cake-partner-domain.com/api/1/signup.asmx
6
+ body:
7
+ encoding: UTF-8
8
+ string: |
9
+ <?xml version="1.0"?>
10
+ <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:cake="http://cakemarketing.com/api/1/">
11
+ <env:Header/>
12
+ <env:Body>
13
+ <cake:GetMediaTypes>
14
+ <cake:api_key>cake-api-key</cake:api_key>
15
+ </cake:GetMediaTypes>
16
+ </env:Body>
17
+ </env:Envelope>
18
+ headers:
19
+ Content-Type:
20
+ - application/soap+xml;charset=UTF-8
21
+ response:
22
+ status:
23
+ code: 200
24
+ message: OK
25
+ headers:
26
+ Cache-Control:
27
+ - private, max-age=0
28
+ Content-Type:
29
+ - application/soap+xml; charset=utf-8
30
+ Server:
31
+ - Microsoft-IIS/8.0
32
+ X-Aspnet-Version:
33
+ - 4.0.30319
34
+ X-Powered-By:
35
+ - ASP.NET
36
+ Date:
37
+ - Mon, 15 Jun 2015 13:08:16 GMT
38
+ Content-Length:
39
+ - '1736'
40
+ body:
41
+ encoding: UTF-8
42
+ string: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
43
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetMediaTypesResponse
44
+ xmlns="http://cakemarketing.com/api/1/"><GetMediaTypesResult><MediaType><media_type_id>15</media_type_id><type_name>Adware</type_name></MediaType><MediaType><media_type_id>7</media_type_id><type_name>Banner</type_name></MediaType><MediaType><media_type_id>17</media_type_id><type_name>Content</type_name></MediaType><MediaType><media_type_id>6</media_type_id><type_name>Co-Reg</type_name></MediaType><MediaType><media_type_id>3</media_type_id><type_name>Email</type_name></MediaType><MediaType><media_type_id>12</media_type_id><type_name>Incentivized</type_name></MediaType><MediaType><media_type_id>2</media_type_id><type_name>Network</type_name></MediaType><MediaType><media_type_id>13</media_type_id><type_name>Other</type_name></MediaType><MediaType><media_type_id>8</media_type_id><type_name>PopUnder</type_name></MediaType><MediaType><media_type_id>4</media_type_id><type_name>PPC</type_name></MediaType><MediaType><media_type_id>9</media_type_id><type_name>Radio</type_name></MediaType><MediaType><media_type_id>5</media_type_id><type_name>SEO</type_name></MediaType><MediaType><media_type_id>16</media_type_id><type_name>Social
45
+ Media</type_name></MediaType><MediaType><media_type_id>10</media_type_id><type_name>TV</type_name></MediaType><MediaType><media_type_id>11</media_type_id><type_name>Upsell</type_name></MediaType><MediaType><media_type_id>1</media_type_id><type_name>YouTube_Twitch</type_name></MediaType></GetMediaTypesResult></GetMediaTypesResponse></soap:Body></soap:Envelope>
46
+ http_version:
47
+ recorded_at: Mon, 15 Jun 2015 13:08:40 GMT
48
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,56 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://cake-partner-domain.com/api/3/addedit.asmx
6
+ body:
7
+ encoding: UTF-8
8
+ string: |
9
+ <?xml version="1.0"?>
10
+ <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:cake="http://cakemarketing.com/api/3/">
11
+ <env:Header/>
12
+ <env:Body>
13
+ <cake:Campaign>
14
+ <cake:api_key>cake-api-key</cake:api_key>
15
+ <cake:affiliate_id>1</cake:affiliate_id>
16
+ <cake:offer_id>8910</cake:offer_id>
17
+ <cake:media_type_id>1</cake:media_type_id>
18
+ <cake:account_status_id>1</cake:account_status_id>
19
+ <cake:payout>1.23</cake:payout>
20
+ <cake:campaign_id>0</cake:campaign_id>
21
+ <cake:display_link_type_id>1</cake:display_link_type_id>
22
+ <cake:expiration_date>2045-02-09T01:00:00</cake:expiration_date>
23
+ </cake:Campaign>
24
+ </env:Body>
25
+ </env:Envelope>
26
+ headers:
27
+ Content-Type:
28
+ - application/soap+xml;charset=UTF-8
29
+ response:
30
+ status:
31
+ code: 200
32
+ message: OK
33
+ headers:
34
+ Cache-Control:
35
+ - private, max-age=0
36
+ Content-Type:
37
+ - application/soap+xml; charset=utf-8
38
+ Server:
39
+ - Microsoft-IIS/8.0
40
+ X-Aspnet-Version:
41
+ - 4.0.30319
42
+ X-Powered-By:
43
+ - ASP.NET
44
+ Date:
45
+ - Mon, 15 Jun 2015 12:26:41 GMT
46
+ Content-Length:
47
+ - '628'
48
+ body:
49
+ encoding: UTF-8
50
+ string: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
51
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CampaignResponse
52
+ xmlns="http://cakemarketing.com/api/3/"><CampaignResult><success>true</success><message>Campaign
53
+ Created</message><success_info><campaign_id>18243</campaign_id><affiliate_id>1</affiliate_id><offer_id>8910</offer_id><offer_contract_id>1455</offer_contract_id><media_type_id>1</media_type_id><original>true</original></success_info></CampaignResult></CampaignResponse></soap:Body></soap:Envelope>
54
+ http_version:
55
+ recorded_at: Tue, 17 Feb 2015 12:00:00 GMT
56
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,56 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://cake-partner-domain.com/api/3/addedit.asmx
6
+ body:
7
+ encoding: UTF-8
8
+ string: |
9
+ <?xml version="1.0"?>
10
+ <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:cake="http://cakemarketing.com/api/3/">
11
+ <env:Header/>
12
+ <env:Body>
13
+ <cake:Campaign>
14
+ <cake:api_key>cake-api-key</cake:api_key>
15
+ <cake:campaign_id>123</cake:campaign_id>
16
+ <cake:affiliate_id>1</cake:affiliate_id>
17
+ <cake:offer_id>8910</cake:offer_id>
18
+ <cake:media_type_id>1</cake:media_type_id>
19
+ <cake:account_status_id>1</cake:account_status_id>
20
+ <cake:payout>1.23</cake:payout>
21
+ <cake:display_link_type_id>1</cake:display_link_type_id>
22
+ <cake:expiration_date>2045-02-09T01:00:00</cake:expiration_date>
23
+ </cake:Campaign>
24
+ </env:Body>
25
+ </env:Envelope>
26
+ headers:
27
+ Content-Type:
28
+ - application/soap+xml;charset=UTF-8
29
+ response:
30
+ status:
31
+ code: 200
32
+ message: OK
33
+ headers:
34
+ Cache-Control:
35
+ - private, max-age=0
36
+ Content-Type:
37
+ - application/soap+xml; charset=utf-8
38
+ Server:
39
+ - Microsoft-IIS/8.0
40
+ X-Aspnet-Version:
41
+ - 4.0.30319
42
+ X-Powered-By:
43
+ - ASP.NET
44
+ Date:
45
+ - Mon, 15 Jun 2015 12:27:13 GMT
46
+ Content-Length:
47
+ - '626'
48
+ body:
49
+ encoding: UTF-8
50
+ string: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
51
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CampaignResponse
52
+ xmlns="http://cakemarketing.com/api/3/"><CampaignResult><success>true</success><message>Campaign
53
+ Updated</message><success_info><campaign_id>123</campaign_id><affiliate_id>-1</affiliate_id><offer_id>5078</offer_id><offer_contract_id>123</offer_contract_id><media_type_id>1</media_type_id><original>true</original></success_info></CampaignResult></CampaignResponse></soap:Body></soap:Envelope>
54
+ http_version:
55
+ recorded_at: Tue, 17 Feb 2015 12:00:00 GMT
56
+ recorded_with: VCR 2.9.3
@@ -57,7 +57,7 @@ http_interactions:
57
57
  <cake:tags_modification_type>add</cake:tags_modification_type>
58
58
  <cake:conversion_cap_behavior>5</cake:conversion_cap_behavior>
59
59
  <cake:conversion_behavior_on_redirect>5</cake:conversion_behavior_on_redirect>
60
- <cake:expiration_date>2115-01-24T01:00:00</cake:expiration_date>
60
+ <cake:expiration_date>2045-02-09T01:00:00</cake:expiration_date>
61
61
  <cake:offer_type_id>3</cake:offer_type_id>
62
62
  <cake:currency_id>2</cake:currency_id>
63
63
  <cake:advertiser_id>15886</cake:advertiser_id>
@@ -57,7 +57,7 @@ http_interactions:
57
57
  <cake:tags_modification_type>remove_all</cake:tags_modification_type>
58
58
  <cake:conversion_cap_behavior>0</cake:conversion_cap_behavior>
59
59
  <cake:conversion_behavior_on_redirect>0</cake:conversion_behavior_on_redirect>
60
- <cake:expiration_date>2115-01-24T01:00:00</cake:expiration_date>
60
+ <cake:expiration_date>2045-02-09T01:00:00</cake:expiration_date>
61
61
  <cake:offer_id>8910</cake:offer_id>
62
62
  <cake:advertiser_id>15886</cake:advertiser_id>
63
63
  <cake:vertical_id>41</cake:vertical_id>
@@ -1,6 +1,7 @@
1
1
  RSpec.describe SoapyCake::AdminAddedit do
2
2
  around { |example| Timecop.freeze(Time.utc(2015, 2, 17, 12), &example) }
3
3
 
4
+ let(:affiliate_id) { 1 }
4
5
  let(:advertiser_id) { 15886 }
5
6
  let(:contact_id) { 8814 }
6
7
  let(:vertical_id) { 41 }
@@ -232,4 +233,31 @@ RSpec.describe SoapyCake::AdminAddedit do
232
233
  expect(result[:message]).to eq('Offer Tier Added')
233
234
  end
234
235
  end
236
+
237
+ describe 'campaigns' do
238
+ it 'adds a campaign', :vcr do
239
+ result = subject.add_campaign(
240
+ affiliate_id: affiliate_id,
241
+ offer_id: offer_id,
242
+ media_type_id: 1,
243
+ account_status_id: :active,
244
+ payout: '1.23'
245
+ )
246
+
247
+ expect(result[:message]).to eq('Campaign Created')
248
+ end
249
+
250
+ it 'edits a campaign', :vcr do
251
+ result = subject.edit_campaign(
252
+ campaign_id: 123,
253
+ affiliate_id: affiliate_id,
254
+ offer_id: offer_id,
255
+ media_type_id: 1,
256
+ account_status_id: :active,
257
+ payout: '1.23'
258
+ )
259
+
260
+ expect(result[:message]).to eq('Campaign Updated')
261
+ end
262
+ end
235
263
  end
@@ -1,4 +1,6 @@
1
1
  RSpec.describe SoapyCake::Admin do
2
+ around { |example| Timecop.freeze(Time.utc(2015, 6, 15, 12), &example) }
3
+
2
4
  it 'returns an affiliate with correct data types', :vcr do
3
5
  result = subject.affiliates(affiliate_id: 16027)
4
6
  expect(result.count).to eq(1)
@@ -81,4 +83,13 @@ RSpec.describe SoapyCake::Admin do
81
83
  tipalti_iframe_expiration_date: nil
82
84
  )
83
85
  end
86
+
87
+ it 'returns media types', :vcr do
88
+ result = subject.media_types
89
+
90
+ expect(result.first).to eq(
91
+ media_type_id: 15,
92
+ type_name: 'Adware'
93
+ )
94
+ end
84
95
  end
@@ -121,32 +121,32 @@ RSpec.describe SoapyCake::Admin do
121
121
 
122
122
  describe '#verticals' do
123
123
  let(:method) { :verticals }
124
- let(:cake_opts) { {} }
124
+ let(:cake_opts) { nil }
125
125
  it_behaves_like 'a cake admin method'
126
126
  end
127
127
 
128
128
  describe '#countries' do
129
129
  let(:method) { :countries }
130
- let(:cake_opts) { {} }
130
+ let(:cake_opts) { nil }
131
131
  it_behaves_like 'a cake admin method'
132
132
  end
133
133
 
134
134
  describe '#currencies' do
135
135
  let(:method) { :currencies }
136
- let(:cake_opts) { {} }
136
+ let(:cake_opts) { nil }
137
137
  it_behaves_like 'a cake admin method'
138
138
  end
139
139
 
140
140
  describe '#tiers' do
141
141
  let(:method) { :tiers }
142
142
  let(:cake_method) { :affiliate_tiers }
143
- let(:cake_opts) { {} }
143
+ let(:cake_opts) { nil }
144
144
  it_behaves_like 'a cake admin method'
145
145
  end
146
146
 
147
147
  describe '#blacklist_reasons' do
148
148
  let(:method) { :blacklist_reasons }
149
- let(:cake_opts) { {} }
149
+ let(:cake_opts) { nil }
150
150
  it_behaves_like 'a cake admin method'
151
151
  end
152
152
  end
@@ -2,9 +2,9 @@ RSpec.shared_examples_for 'a cake admin method' do
2
2
  it 'runs the request' do
3
3
  request = double('request')
4
4
  expect(SoapyCake::Request).to receive(:new)
5
- .with(:admin, service, cake_method, cake_opts).and_return(request)
5
+ .with(:admin, service, cake_method, cake_opts || {}).and_return(request)
6
6
  expect(subject).to receive(:run).with(request)
7
7
 
8
- subject.public_send(method, cake_opts)
8
+ subject.public_send(method, *[cake_opts].compact)
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soapy_cake
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.1
4
+ version: 1.9.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: 2015-06-11 00:00:00.000000000 Z
11
+ date: 2015-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -199,7 +199,10 @@ files:
199
199
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/raises_if_there_is_an_error.yml
200
200
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_a_clicks_report_with_a_defined_time_range.yml
201
201
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_an_affiliate_with_correct_data_types.yml
202
+ - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_media_types.yml
202
203
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/affiliates/edits_affiliates.yml
204
+ - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/campaigns/adds_a_campaign.yml
205
+ - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/campaigns/edits_a_campaign.yml
203
206
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/contacts/edits_a_contact.yml
204
207
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/geo_targeting/creates_geo_targetings.yml
205
208
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/offer_/_offer_contract_caps/updates_a_cap_for_an_offer_contract.yml
@@ -249,7 +252,10 @@ test_files:
249
252
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/raises_if_there_is_an_error.yml
250
253
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_a_clicks_report_with_a_defined_time_range.yml
251
254
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_an_affiliate_with_correct_data_types.yml
255
+ - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_media_types.yml
252
256
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/affiliates/edits_affiliates.yml
257
+ - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/campaigns/adds_a_campaign.yml
258
+ - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/campaigns/edits_a_campaign.yml
253
259
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/contacts/edits_a_contact.yml
254
260
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/geo_targeting/creates_geo_targetings.yml
255
261
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/offer_/_offer_contract_caps/updates_a_cap_for_an_offer_contract.yml