soapy_cake 1.6.8 → 1.6.9
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 +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
|