soapy_cake 1.6.8 → 1.6.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/soapy_cake/admin_addedit.rb +68 -73
- data/lib/soapy_cake/client.rb +6 -4
- data/lib/soapy_cake/const.rb +7 -1
- data/lib/soapy_cake/helper.rb +19 -0
- data/lib/soapy_cake/request.rb +4 -0
- data/lib/soapy_cake/response.rb +13 -9
- data/lib/soapy_cake/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/ADDEDIT_integration_test/offers/creates_an_offer.yml +28 -28
- data/spec/fixtures/vcr_cassettes/ADDEDIT_integration_test/offers/updates_an_offer.yml +12 -12
- metadata +2 -3
- data/.rubocop_todo.yml +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 546f6db4ccf5d567c3eebf8b789bd93d4bc4799c
|
4
|
+
data.tar.gz: 7b3794d3dd0117155a75b3da0143bb6802b35d58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59d337eaf389a424d31da5e400009d636bfc7f8c9ea8361478c95be6f9cbdc1debbc7fc6cb196644a0cc33f0695b285785753550e9db7815f4221478b4b08da2
|
7
|
+
data.tar.gz: 3759564da7cb064f8a4202dffb34cf0a2ce0d5bbbe3b7d3679e679803625ab4f547ee411871e9a5832d40f8f4fb8590b92980c686b34134b3a45bb8e171702d4
|
@@ -1,4 +1,5 @@
|
|
1
1
|
module SoapyCake
|
2
|
+
# rubocop:disable Metrics/ClassLength
|
2
3
|
class AdminAddedit < Client
|
3
4
|
include Helper
|
4
5
|
|
@@ -48,14 +49,28 @@ module SoapyCake
|
|
48
49
|
tags_modification_type: 'do_not_change'
|
49
50
|
}
|
50
51
|
|
52
|
+
REQUIRED_NEW_OFFER_PARAMS = %i(
|
53
|
+
hidden offer_status_id offer_type_id currency_id ssl click_cookie_days
|
54
|
+
impression_cookie_days redirect_404 enable_view_thru_conversions
|
55
|
+
click_trumps_impression disable_click_deduplication last_touch
|
56
|
+
enable_transaction_id_deduplication postbacks_only fire_global_pixel
|
57
|
+
fire_pixel_on_nonpaid_conversions offer_link thankyou_link from_lines
|
58
|
+
subject_lines
|
59
|
+
)
|
60
|
+
|
61
|
+
REQUIRED_OFFER_PARAMS = %i(
|
62
|
+
advertiser_id vertical_id postback_url_ms_delay offer_contract_hidden
|
63
|
+
price_format_id received received_percentage payout tags
|
64
|
+
)
|
65
|
+
|
66
|
+
REQUIRED_OFFER_CONTRACT_PARAMS = %i(
|
67
|
+
offer_id offer_contract_id offer_contract_name price_format_id payout received
|
68
|
+
received_percentage offer_link thankyou_link offer_contract_hidden
|
69
|
+
offer_contract_is_default use_fallback_targeting
|
70
|
+
)
|
71
|
+
|
51
72
|
def add_offer(opts = {})
|
52
|
-
require_params(opts,
|
53
|
-
hidden offer_status_id offer_type_id currency_id ssl click_cookie_days
|
54
|
-
impression_cookie_days redirect_404 enable_view_thru_conversions
|
55
|
-
click_trumps_impression disable_click_deduplication last_touch
|
56
|
-
enable_transaction_id_deduplication postbacks_only fire_global_pixel
|
57
|
-
fire_pixel_on_nonpaid_conversions offer_link thankyou_link from_lines
|
58
|
-
subject_lines))
|
73
|
+
require_params(opts, REQUIRED_NEW_OFFER_PARAMS)
|
59
74
|
|
60
75
|
addedit_offer(opts.merge(offer_id: 0))
|
61
76
|
end
|
@@ -70,28 +85,33 @@ module SoapyCake
|
|
70
85
|
require_params(opts, %i(offer_contract_id allow_countries))
|
71
86
|
|
72
87
|
if opts[:allow_countries]
|
73
|
-
|
74
|
-
countries = Array(opts[:countries])
|
75
|
-
opts[:countries] = countries.join(',')
|
76
|
-
opts[:redirect_offer_contract_ids] = ([0] * countries.count).join(',')
|
88
|
+
geo_targets_allow_options!(opts)
|
77
89
|
else
|
78
|
-
|
79
|
-
fail Error, "Parameter 'redirects' must be a COUNTRY=>REDIRECT_OFFER_CONTRACT_ID hash!"
|
80
|
-
end
|
81
|
-
|
82
|
-
opts[:countries] = opts[:redirects].keys.join(',')
|
83
|
-
opts[:redirect_offer_contract_ids] = opts[:redirects].values.join(',')
|
84
|
-
opts.delete(:redirects)
|
90
|
+
geo_targets_redirect_options!(opts)
|
85
91
|
end
|
86
92
|
|
87
|
-
opts.merge!(
|
88
|
-
add_edit_option: 'add',
|
89
|
-
set_targeting_to_geo: true
|
90
|
-
)
|
93
|
+
opts.merge!(add_edit_option: 'add', set_targeting_to_geo: true)
|
91
94
|
|
92
95
|
run Request.new(:admin, :addedit, :geo_targets, opts)
|
93
96
|
end
|
94
97
|
|
98
|
+
def geo_targets_allow_options!(opts)
|
99
|
+
require_params(opts, %i(countries))
|
100
|
+
countries = Array(opts[:countries])
|
101
|
+
opts[:countries] = countries.join(',')
|
102
|
+
opts[:redirect_offer_contract_ids] = ([0] * countries.count).join(',')
|
103
|
+
end
|
104
|
+
|
105
|
+
def geo_targets_redirect_options!(opts)
|
106
|
+
redirects = opts.delete(:redirects)
|
107
|
+
unless redirects.is_a?(Hash) && redirects.keys.count > 0
|
108
|
+
fail Error, "Parameter 'redirects' must be a COUNTRY=>REDIRECT_OFFER_CONTRACT_ID hash!"
|
109
|
+
end
|
110
|
+
|
111
|
+
opts[:countries] = redirects.keys.join(',')
|
112
|
+
opts[:redirect_offer_contract_ids] = redirects.values.join(',')
|
113
|
+
end
|
114
|
+
|
95
115
|
def add_offer_contract(opts = {})
|
96
116
|
addedit_offer_contract(opts.merge(offer_contract_id: 0))
|
97
117
|
end
|
@@ -106,7 +126,6 @@ module SoapyCake
|
|
106
126
|
require_params(opts, %i(cap_type_id cap_interval_id cap_amount send_alert_only))
|
107
127
|
|
108
128
|
translate_values!(opts, %i(cap_type_id cap_interval_id))
|
109
|
-
|
110
129
|
opts[:cap_amount] = -1 if opts[:cap_interval_id] == const_lookup(:cap_interval_id, :disabled)
|
111
130
|
|
112
131
|
run Request.new(:admin, :addedit, :caps, opts)
|
@@ -115,13 +134,8 @@ module SoapyCake
|
|
115
134
|
def add_offer_tier(opts = {})
|
116
135
|
require_params(opts, %i(offer_id tier_id price_format_id offer_contract_id status_id))
|
117
136
|
|
118
|
-
opts.merge!(
|
119
|
-
|
120
|
-
add_edit_option: 'add'
|
121
|
-
)
|
122
|
-
|
123
|
-
opts[:status_id] = const_lookup(:offer_status_id, opts[:status_id]) if opts.key?(:status_id)
|
124
|
-
translate_values!(opts, %i(price_format_id))
|
137
|
+
opts.merge!(redirect_offer_contract_id: -1, add_edit_option: 'add')
|
138
|
+
translate_values!(opts, %i(status_id price_format_id))
|
125
139
|
|
126
140
|
run Request.new(:admin, :addedit, :offer_tiers, opts)
|
127
141
|
end
|
@@ -134,61 +148,42 @@ module SoapyCake
|
|
134
148
|
|
135
149
|
private
|
136
150
|
|
137
|
-
def
|
138
|
-
|
139
|
-
|
151
|
+
def apply_tag_opts!(opts)
|
152
|
+
return unless opts[:tags]
|
153
|
+
|
154
|
+
if opts[:tags].to_s == ''
|
155
|
+
opts[:tags_modification_type] = 'remove_all'
|
156
|
+
opts[:tags] = ''
|
157
|
+
else
|
158
|
+
opts[:tags_modification_type] = opts[:offer_id] ? 'add' : 'replace'
|
159
|
+
opts[:tags] = Array(opts[:tags]).join(',')
|
140
160
|
end
|
141
161
|
end
|
142
162
|
|
143
|
-
def
|
144
|
-
|
145
|
-
|
146
|
-
|
163
|
+
def default_offer_options
|
164
|
+
OFFER_DEFAULT_OPTIONS.merge(
|
165
|
+
conversion_cap_behavior: const_lookup(:conversion_behavior_id, :system),
|
166
|
+
conversion_behavior_on_redirect: const_lookup(:conversion_behavior_id, :system),
|
167
|
+
expiration_date: Date.today + (365 * 100)
|
168
|
+
)
|
147
169
|
end
|
148
170
|
|
149
171
|
def addedit_offer(opts)
|
150
|
-
require_params(opts,
|
151
|
-
advertiser_id vertical_id postback_url_ms_delay offer_contract_hidden
|
152
|
-
price_format_id received received_percentage payout tags))
|
153
|
-
|
154
|
-
if opts[:tags]
|
155
|
-
if opts[:tags].to_s == ''
|
156
|
-
opts[:tags_modification_type] = 'remove_all'
|
157
|
-
opts[:tags] = ''
|
158
|
-
else
|
159
|
-
opts[:tags_modification_type] = opts[:offer_id] ? 'add' : 'replace'
|
160
|
-
opts[:tags] = Array(opts[:tags]).join(',')
|
161
|
-
end
|
162
|
-
end
|
172
|
+
require_params(opts, REQUIRED_OFFER_PARAMS)
|
163
173
|
|
164
|
-
opts
|
165
|
-
|
166
|
-
opts[k] = 'off' if v == false
|
167
|
-
end
|
174
|
+
translate_booleans!(opts)
|
175
|
+
apply_tag_opts!(opts)
|
168
176
|
|
169
|
-
translate_values!(opts, %i(
|
177
|
+
translate_values!(opts, %i(
|
178
|
+
currency_id offer_status_id offer_type_id price_format_id
|
179
|
+
conversion_cap_behavior conversion_behavior_on_redirect
|
180
|
+
))
|
170
181
|
|
171
|
-
|
172
|
-
next unless opts[key]
|
173
|
-
opts[key] = const_lookup(:conversion_behaviour_id, opts[key])
|
174
|
-
end
|
175
|
-
|
176
|
-
opts.reverse_merge!(OFFER_DEFAULT_OPTIONS)
|
177
|
-
opts.reverse_merge!(
|
178
|
-
conversion_cap_behavior: const_lookup(:conversion_behaviour_id, :system),
|
179
|
-
conversion_behavior_on_redirect: const_lookup(:conversion_behaviour_id, :system),
|
180
|
-
expiration_date: Date.today + (365 * 100)
|
181
|
-
)
|
182
|
-
|
183
|
-
run(Request.new(:admin, :addedit, :offer, opts))[:success_info]
|
182
|
+
run(Request.new(:admin, :addedit, :offer, default_offer_options.merge(opts)))[:success_info]
|
184
183
|
end
|
185
184
|
|
186
185
|
def addedit_offer_contract(opts)
|
187
|
-
require_params(opts,
|
188
|
-
offer_id offer_contract_id offer_contract_name price_format_id payout received
|
189
|
-
received_percentage offer_link thankyou_link offer_contract_hidden
|
190
|
-
offer_contract_is_default use_fallback_targeting))
|
191
|
-
|
186
|
+
require_params(opts, REQUIRED_OFFER_CONTRACT_PARAMS)
|
192
187
|
translate_values!(opts, %i(price_format_id))
|
193
188
|
|
194
189
|
run Request.new(:admin, :addedit, :offer_contract, opts)
|
data/lib/soapy_cake/client.rb
CHANGED
@@ -18,16 +18,18 @@ module SoapyCake
|
|
18
18
|
request.api_key = api_key
|
19
19
|
request.time_offset = time_offset
|
20
20
|
|
21
|
-
|
22
|
-
body = HTTParty.post(url, headers: headers, body: request.xml, timeout: NET_TIMEOUT).body
|
23
|
-
|
24
|
-
response = Response.new(body, %w(addedit track).include?(request.service))
|
21
|
+
response = Response.new(http_response(request), request.short_response?)
|
25
22
|
response.time_offset = time_offset
|
26
23
|
response.collection
|
27
24
|
end
|
28
25
|
|
29
26
|
private
|
30
27
|
|
28
|
+
def http_response(request)
|
29
|
+
url = "https://#{domain}#{request.path}"
|
30
|
+
HTTParty.post(url, headers: headers, body: request.xml, timeout: NET_TIMEOUT).body
|
31
|
+
end
|
32
|
+
|
31
33
|
def headers
|
32
34
|
{ 'Content-Type' => 'application/soap+xml;charset=UTF-8' }
|
33
35
|
end
|
data/lib/soapy_cake/const.rb
CHANGED
@@ -37,7 +37,7 @@ module SoapyCake
|
|
37
37
|
revshare: 5
|
38
38
|
},
|
39
39
|
# The ID mapping in the API docs is wrong, these values are taken from the UI.
|
40
|
-
|
40
|
+
conversion_behavior_id: {
|
41
41
|
system: 0,
|
42
42
|
adv_off: 1,
|
43
43
|
adv_no_aff: 2,
|
@@ -56,5 +56,11 @@ module SoapyCake
|
|
56
56
|
monthly: 3
|
57
57
|
}
|
58
58
|
}
|
59
|
+
|
60
|
+
CONSTS.merge!(
|
61
|
+
conversion_cap_behavior: CONSTS[:conversion_behavior_id],
|
62
|
+
conversion_behavior_on_redirect: CONSTS[:conversion_behavior_id],
|
63
|
+
status_id: CONSTS[:offer_status_id]
|
64
|
+
)
|
59
65
|
end
|
60
66
|
end
|
data/lib/soapy_cake/helper.rb
CHANGED
@@ -22,5 +22,24 @@ module SoapyCake
|
|
22
22
|
fail Error, "Parameter '#{param}' missing!" unless opts.key?(param)
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
def translate_booleans!(opts)
|
27
|
+
opts.each do |k, v|
|
28
|
+
opts[k] = 'on' if v == true
|
29
|
+
opts[k] = 'off' if v == false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def translate_values!(opts, params)
|
34
|
+
params.each do |type|
|
35
|
+
opts[type] = const_lookup(type, opts[type]) if opts.key?(type)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def const_lookup(type, key)
|
40
|
+
Const::CONSTS[type].fetch(key) do
|
41
|
+
fail ArgumentError, "#{key} is not a valid value for #{type}"
|
42
|
+
end
|
43
|
+
end
|
25
44
|
end
|
26
45
|
end
|
data/lib/soapy_cake/request.rb
CHANGED
data/lib/soapy_cake/response.rb
CHANGED
@@ -24,18 +24,22 @@ module SoapyCake
|
|
24
24
|
|
25
25
|
def typed_element(element)
|
26
26
|
walk_tree(element) do |value, key|
|
27
|
-
|
27
|
+
parse_element(key, value)
|
28
|
+
end
|
29
|
+
end
|
28
30
|
|
29
|
-
|
30
|
-
|
31
|
-
|
31
|
+
def parse_element(key, value)
|
32
|
+
return value.to_i if key.to_s.end_with?('_id') && !key.to_s.end_with?('tax_id')
|
33
|
+
return false if value == 'false'
|
34
|
+
return true if value == 'true'
|
35
|
+
return parse_date(value) if /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.?\d*\z/.match(value)
|
32
36
|
|
33
|
-
|
34
|
-
|
37
|
+
# cast to primitive string to get rid of Saxerator string class
|
38
|
+
value.to_s
|
39
|
+
end
|
35
40
|
|
36
|
-
|
37
|
-
|
38
|
-
end
|
41
|
+
def parse_date(value)
|
42
|
+
DateTime.parse(value + format('%+03d:00', time_offset.to_i))
|
39
43
|
end
|
40
44
|
|
41
45
|
def sax
|
data/lib/soapy_cake/version.rb
CHANGED
@@ -12,13 +12,14 @@ http_interactions:
|
|
12
12
|
<env:Body>
|
13
13
|
<cake:Offer>
|
14
14
|
<cake:api_key>cake-api-key</cake:api_key>
|
15
|
+
<cake:offer_name>Test Offer</cake:offer_name>
|
16
|
+
<cake:third_party_name/>
|
15
17
|
<cake:hidden>off</cake:hidden>
|
16
18
|
<cake:offer_status_id>1</cake:offer_status_id>
|
17
|
-
<cake:offer_type_id>3</cake:offer_type_id>
|
18
|
-
<cake:currency_id>2</cake:currency_id>
|
19
19
|
<cake:ssl>off</cake:ssl>
|
20
20
|
<cake:click_cookie_days>30</cake:click_cookie_days>
|
21
21
|
<cake:impression_cookie_days>30</cake:impression_cookie_days>
|
22
|
+
<cake:redirect_offer_contract_id>0</cake:redirect_offer_contract_id>
|
22
23
|
<cake:redirect_404>off</cake:redirect_404>
|
23
24
|
<cake:enable_view_thru_conversions>off</cake:enable_view_thru_conversions>
|
24
25
|
<cake:click_trumps_impression>off</cake:click_trumps_impression>
|
@@ -26,40 +27,24 @@ http_interactions:
|
|
26
27
|
<cake:last_touch>off</cake:last_touch>
|
27
28
|
<cake:enable_transaction_id_deduplication>off</cake:enable_transaction_id_deduplication>
|
28
29
|
<cake:postbacks_only>off</cake:postbacks_only>
|
30
|
+
<cake:pixel_html/>
|
31
|
+
<cake:postback_url/>
|
29
32
|
<cake:fire_global_pixel>on</cake:fire_global_pixel>
|
30
33
|
<cake:fire_pixel_on_nonpaid_conversions>off</cake:fire_pixel_on_nonpaid_conversions>
|
34
|
+
<cake:expiration_date_modification_type>do_not_change</cake:expiration_date_modification_type>
|
35
|
+
<cake:offer_contract_name/>
|
31
36
|
<cake:offer_link>http://www.example.com/</cake:offer_link>
|
32
37
|
<cake:thankyou_link>http://www.example.com/</cake:thankyou_link>
|
33
|
-
<cake:
|
34
|
-
<cake:
|
35
|
-
<cake:conversion_cap_behavior>5</cake:conversion_cap_behavior>
|
36
|
-
<cake:conversion_behavior_on_redirect>5</cake:conversion_behavior_on_redirect>
|
37
|
-
<cake:advertiser_id>15886</cake:advertiser_id>
|
38
|
-
<cake:vertical_id>41</cake:vertical_id>
|
39
|
-
<cake:postback_url_ms_delay>60</cake:postback_url_ms_delay>
|
40
|
-
<cake:offer_contract_hidden>off</cake:offer_contract_hidden>
|
41
|
-
<cake:price_format_id>1</cake:price_format_id>
|
42
|
-
<cake:received>2.0</cake:received>
|
43
|
-
<cake:received_percentage>off</cake:received_percentage>
|
44
|
-
<cake:payout>1.5</cake:payout>
|
45
|
-
<cake:tags>some,tags</cake:tags>
|
46
|
-
<cake:offer_name>Test Offer</cake:offer_name>
|
38
|
+
<cake:preview_link/>
|
39
|
+
<cake:thumbnail_file_import_url/>
|
47
40
|
<cake:offer_description>TEST1</cake:offer_description>
|
48
41
|
<cake:restrictions>TEST2</cake:restrictions>
|
49
42
|
<cake:advertiser_extended_terms>TEST3</cake:advertiser_extended_terms>
|
50
43
|
<cake:testing_instructions>TEST4</cake:testing_instructions>
|
51
|
-
<cake:offer_id>0</cake:offer_id>
|
52
|
-
<cake:tags_modification_type>add</cake:tags_modification_type>
|
53
|
-
<cake:third_party_name/>
|
54
|
-
<cake:redirect_offer_contract_id>0</cake:redirect_offer_contract_id>
|
55
|
-
<cake:pixel_html/>
|
56
|
-
<cake:postback_url/>
|
57
|
-
<cake:expiration_date_modification_type>do_not_change</cake:expiration_date_modification_type>
|
58
|
-
<cake:offer_contract_name/>
|
59
|
-
<cake:preview_link/>
|
60
|
-
<cake:thumbnail_file_import_url/>
|
61
44
|
<cake:allow_affiliates_to_create_creatives>no_change</cake:allow_affiliates_to_create_creatives>
|
62
45
|
<cake:unsubscribe_link/>
|
46
|
+
<cake:from_lines>from</cake:from_lines>
|
47
|
+
<cake:subject_lines>subject</cake:subject_lines>
|
63
48
|
<cake:conversions_from_whitelist_only>off</cake:conversions_from_whitelist_only>
|
64
49
|
<cake:allowed_media_type_modification_type>do_not_change</cake:allowed_media_type_modification_type>
|
65
50
|
<cake:track_search_terms_from_non_supported_search_engines>off</cake:track_search_terms_from_non_supported_search_engines>
|
@@ -69,7 +54,22 @@ http_interactions:
|
|
69
54
|
<cake:session_regeneration_type_id>0</cake:session_regeneration_type_id>
|
70
55
|
<cake:payout_modification_type>change</cake:payout_modification_type>
|
71
56
|
<cake:received_modification_type>change</cake:received_modification_type>
|
57
|
+
<cake:tags_modification_type>add</cake:tags_modification_type>
|
58
|
+
<cake:conversion_cap_behavior>5</cake:conversion_cap_behavior>
|
59
|
+
<cake:conversion_behavior_on_redirect>5</cake:conversion_behavior_on_redirect>
|
72
60
|
<cake:expiration_date>2115-01-24T01:00:00</cake:expiration_date>
|
61
|
+
<cake:offer_type_id>3</cake:offer_type_id>
|
62
|
+
<cake:currency_id>2</cake:currency_id>
|
63
|
+
<cake:advertiser_id>15886</cake:advertiser_id>
|
64
|
+
<cake:vertical_id>41</cake:vertical_id>
|
65
|
+
<cake:postback_url_ms_delay>60</cake:postback_url_ms_delay>
|
66
|
+
<cake:offer_contract_hidden>off</cake:offer_contract_hidden>
|
67
|
+
<cake:price_format_id>1</cake:price_format_id>
|
68
|
+
<cake:received>2.0</cake:received>
|
69
|
+
<cake:received_percentage>off</cake:received_percentage>
|
70
|
+
<cake:payout>1.5</cake:payout>
|
71
|
+
<cake:tags>some,tags</cake:tags>
|
72
|
+
<cake:offer_id>0</cake:offer_id>
|
73
73
|
</cake:Offer>
|
74
74
|
</env:Body>
|
75
75
|
</env:Envelope>
|
@@ -92,7 +92,7 @@ http_interactions:
|
|
92
92
|
X-Powered-By:
|
93
93
|
- ASP.NET
|
94
94
|
Date:
|
95
|
-
- Thu, 30 Apr 2015
|
95
|
+
- Thu, 30 Apr 2015 13:24:51 GMT
|
96
96
|
Content-Length:
|
97
97
|
- '565'
|
98
98
|
body:
|
@@ -100,7 +100,7 @@ http_interactions:
|
|
100
100
|
string: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
|
101
101
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><OfferResponse
|
102
102
|
xmlns="http://cakemarketing.com/api/5/"><OfferResult><success>true</success><message>Offer
|
103
|
-
|
103
|
+
10084 Created</message><success_info><offer_id>10084</offer_id><offer_contract_id>5789</offer_contract_id><campaign_id>17650</campaign_id><creative_id>10605</creative_id></success_info></OfferResult></OfferResponse></soap:Body></soap:Envelope>
|
104
104
|
http_version:
|
105
105
|
recorded_at: Tue, 17 Feb 2015 12:00:00 GMT
|
106
106
|
recorded_with: VCR 2.9.3
|
@@ -12,17 +12,6 @@ http_interactions:
|
|
12
12
|
<env:Body>
|
13
13
|
<cake:Offer>
|
14
14
|
<cake:api_key>cake-api-key</cake:api_key>
|
15
|
-
<cake:offer_id>8910</cake:offer_id>
|
16
|
-
<cake:advertiser_id>15886</cake:advertiser_id>
|
17
|
-
<cake:vertical_id>41</cake:vertical_id>
|
18
|
-
<cake:postback_url_ms_delay>50</cake:postback_url_ms_delay>
|
19
|
-
<cake:offer_contract_hidden>off</cake:offer_contract_hidden>
|
20
|
-
<cake:price_format_id>1</cake:price_format_id>
|
21
|
-
<cake:received>2.0</cake:received>
|
22
|
-
<cake:received_percentage>off</cake:received_percentage>
|
23
|
-
<cake:payout>1.5</cake:payout>
|
24
|
-
<cake:tags/>
|
25
|
-
<cake:tags_modification_type>remove_all</cake:tags_modification_type>
|
26
15
|
<cake:offer_name/>
|
27
16
|
<cake:third_party_name/>
|
28
17
|
<cake:hidden>no_change</cake:hidden>
|
@@ -65,9 +54,20 @@ http_interactions:
|
|
65
54
|
<cake:session_regeneration_type_id>0</cake:session_regeneration_type_id>
|
66
55
|
<cake:payout_modification_type>change</cake:payout_modification_type>
|
67
56
|
<cake:received_modification_type>change</cake:received_modification_type>
|
57
|
+
<cake:tags_modification_type>remove_all</cake:tags_modification_type>
|
68
58
|
<cake:conversion_cap_behavior>0</cake:conversion_cap_behavior>
|
69
59
|
<cake:conversion_behavior_on_redirect>0</cake:conversion_behavior_on_redirect>
|
70
60
|
<cake:expiration_date>2115-01-24T01:00:00</cake:expiration_date>
|
61
|
+
<cake:offer_id>8910</cake:offer_id>
|
62
|
+
<cake:advertiser_id>15886</cake:advertiser_id>
|
63
|
+
<cake:vertical_id>41</cake:vertical_id>
|
64
|
+
<cake:postback_url_ms_delay>50</cake:postback_url_ms_delay>
|
65
|
+
<cake:offer_contract_hidden>off</cake:offer_contract_hidden>
|
66
|
+
<cake:price_format_id>1</cake:price_format_id>
|
67
|
+
<cake:received>2.0</cake:received>
|
68
|
+
<cake:received_percentage>off</cake:received_percentage>
|
69
|
+
<cake:payout>1.5</cake:payout>
|
70
|
+
<cake:tags/>
|
71
71
|
</cake:Offer>
|
72
72
|
</env:Body>
|
73
73
|
</env:Envelope>
|
@@ -90,7 +90,7 @@ http_interactions:
|
|
90
90
|
X-Powered-By:
|
91
91
|
- ASP.NET
|
92
92
|
Date:
|
93
|
-
- Thu, 30 Apr 2015
|
93
|
+
- Thu, 30 Apr 2015 13:24:51 GMT
|
94
94
|
Content-Length:
|
95
95
|
- '559'
|
96
96
|
body:
|
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.6.
|
4
|
+
version: 1.6.9
|
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-
|
11
|
+
date: 2015-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -173,7 +173,6 @@ extra_rdoc_files: []
|
|
173
173
|
files:
|
174
174
|
- ".gitignore"
|
175
175
|
- ".rspec"
|
176
|
-
- ".rubocop_todo.yml"
|
177
176
|
- ".ruby-version"
|
178
177
|
- Gemfile
|
179
178
|
- LICENSE.txt
|
data/.rubocop_todo.yml
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
# This configuration was generated by `rubocop --auto-gen-config`
|
2
|
-
# on 2015-04-27 16:05:40 +0200 using RuboCop version 0.30.1.
|
3
|
-
# The point is for the user to remove these configuration records
|
4
|
-
# one by one as the offenses are removed from the code base.
|
5
|
-
# Note that changes in the inspected code, or installation of new
|
6
|
-
# versions of RuboCop, may require this file to be generated again.
|
7
|
-
|
8
|
-
# Offense count: 4
|
9
|
-
Metrics/AbcSize:
|
10
|
-
Max: 35
|
11
|
-
|
12
|
-
# Offense count: 1
|
13
|
-
# Configuration parameters: CountComments.
|
14
|
-
Metrics/ClassLength:
|
15
|
-
Max: 159
|
16
|
-
|
17
|
-
# Offense count: 1
|
18
|
-
Metrics/CyclomaticComplexity:
|
19
|
-
Max: 7
|
20
|
-
|
21
|
-
# Offense count: 2
|
22
|
-
# Configuration parameters: CountComments.
|
23
|
-
Metrics/MethodLength:
|
24
|
-
Max: 28
|
25
|
-
|
26
|
-
# Offense count: 1
|
27
|
-
Metrics/PerceivedComplexity:
|
28
|
-
Max: 8
|