soapy_cake 1.7.0 → 1.7.1
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.rb +1 -0
- data/lib/soapy_cake/response.rb +1 -15
- data/lib/soapy_cake/response_value.rb +62 -0
- data/lib/soapy_cake/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/SoapyCake_Admin/does_not_parse_a_transaction_id_as_an_integer.yml +162 -0
- data/spec/integration/soapy_cake/admin_spec.rb +11 -0
- data/spec/lib/soapy_cake/response_value_spec.rb +59 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00d5799aaeb8efca06f9ab1c1f9cbd90c4159f64
|
4
|
+
data.tar.gz: 96e577c979fec1ae24018e09598bc07763ffdb00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39d2eadbaf1878b02ce401aa50d16cb96f710ca7d5f6a2a55f55f060d28d34def74fd95668854e8c579ff2a970709a0c70efaa9d9561fe80363f767394df70b8
|
7
|
+
data.tar.gz: 2f224424014bfc7d70c2f19e31d68b057e5b5c06b27753485dfe1a3fd34770be94cf3bf36e61d224d4cad639f02103e75ffd55ce9565ca3b02c3a512666e5d08
|
data/lib/soapy_cake.rb
CHANGED
data/lib/soapy_cake/response.rb
CHANGED
@@ -24,24 +24,10 @@ module SoapyCake
|
|
24
24
|
|
25
25
|
def typed_element(element)
|
26
26
|
walk_tree(element) do |value, key|
|
27
|
-
|
27
|
+
ResponseValue.new(key, value, time_offset: time_offset).parse
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
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)
|
36
|
-
|
37
|
-
# cast to primitive string to get rid of Saxerator string class
|
38
|
-
value.to_s
|
39
|
-
end
|
40
|
-
|
41
|
-
def parse_date(value)
|
42
|
-
DateTime.parse(value + format('%+03d:00', time_offset.to_i))
|
43
|
-
end
|
44
|
-
|
45
31
|
def sax
|
46
32
|
@sax ||= Saxerator.parser(StringIO.new(body)) do |config|
|
47
33
|
config.symbolize_keys!
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module SoapyCake
|
2
|
+
class ResponseValue
|
3
|
+
attr_reader :value
|
4
|
+
attr_reader :key
|
5
|
+
|
6
|
+
# Known string ids that should not be parsed as integers
|
7
|
+
STRING_IDS = %w(tax_id transaction_id)
|
8
|
+
|
9
|
+
def initialize(key, value, opts = {})
|
10
|
+
@key = key.to_s
|
11
|
+
@value = value
|
12
|
+
@opts = opts
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse
|
16
|
+
return parse_int if id? && !string_id?
|
17
|
+
return false if false?
|
18
|
+
return true if true?
|
19
|
+
return parse_date if date?
|
20
|
+
|
21
|
+
# cast to primitive string to get rid of Saxerator string class
|
22
|
+
value.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def false?
|
28
|
+
value == 'false'
|
29
|
+
end
|
30
|
+
|
31
|
+
def true?
|
32
|
+
value == 'true'
|
33
|
+
end
|
34
|
+
|
35
|
+
def date?
|
36
|
+
value =~ /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.?\d*\z/
|
37
|
+
end
|
38
|
+
|
39
|
+
def id?
|
40
|
+
key.to_s.end_with?('_id')
|
41
|
+
end
|
42
|
+
|
43
|
+
def string_id?
|
44
|
+
STRING_IDS.any? { |id| key.end_with?(id) }
|
45
|
+
end
|
46
|
+
|
47
|
+
def numeric?
|
48
|
+
value =~ /\A-?\d*\z/
|
49
|
+
end
|
50
|
+
|
51
|
+
def parse_int
|
52
|
+
unless value.nil? || numeric?
|
53
|
+
fail Error, "'#{key}' contains non-digit chars but was to be parsed as an integer id"
|
54
|
+
end
|
55
|
+
value.to_i
|
56
|
+
end
|
57
|
+
|
58
|
+
def parse_date
|
59
|
+
DateTime.parse(value + format('%+03d:00', @opts[:time_offset].to_i))
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/soapy_cake/version.rb
CHANGED
data/spec/fixtures/vcr_cassettes/SoapyCake_Admin/does_not_parse_a_transaction_id_as_an_integer.yml
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://cake-partner-domain.com/api/11/reports.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/11/">
|
11
|
+
<env:Header/>
|
12
|
+
<env:Body>
|
13
|
+
<cake:Conversions>
|
14
|
+
<cake:api_key>cake-api-key</cake:api_key>
|
15
|
+
<cake:start_date>2015-04-11T01:00:00</cake:start_date>
|
16
|
+
<cake:end_date>2015-04-12T01:00:00</cake:end_date>
|
17
|
+
<cake:row_limit>1</cake:row_limit>
|
18
|
+
<cake:conversion_type>conversions</cake:conversion_type>
|
19
|
+
</cake:Conversions>
|
20
|
+
</env:Body>
|
21
|
+
</env:Envelope>
|
22
|
+
headers:
|
23
|
+
Content-Type:
|
24
|
+
- application/soap+xml;charset=UTF-8
|
25
|
+
response:
|
26
|
+
status:
|
27
|
+
code: 200
|
28
|
+
message: OK
|
29
|
+
headers:
|
30
|
+
Cache-Control:
|
31
|
+
- private, max-age=0
|
32
|
+
Content-Type:
|
33
|
+
- application/soap+xml; charset=utf-8
|
34
|
+
Server:
|
35
|
+
- Microsoft-IIS/8.0
|
36
|
+
X-Aspnet-Version:
|
37
|
+
- 4.0.30319
|
38
|
+
X-Powered-By:
|
39
|
+
- ASP.NET
|
40
|
+
Date:
|
41
|
+
- Thu, 07 May 2015 09:36:54 GMT
|
42
|
+
Content-Length:
|
43
|
+
- '5081'
|
44
|
+
body:
|
45
|
+
encoding: ASCII-8BIT
|
46
|
+
string: !binary |-
|
47
|
+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c29hcDpF
|
48
|
+
bnZlbG9wZSB4bWxuczpzb2FwPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzLzA1
|
49
|
+
L3NvYXAtZW52ZWxvcGUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcv
|
50
|
+
MjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3
|
51
|
+
dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPjxzb2FwOkJvZHk+PENvbnZlcnNp
|
52
|
+
b25zUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9jYWtlbWFya2V0aW5nLmNvbS9h
|
53
|
+
cGkvMTEvIj48Q29udmVyc2lvbnNSZXN1bHQ+PHN1Y2Nlc3M+dHJ1ZTwvc3Vj
|
54
|
+
Y2Vzcz48cm93X2NvdW50PjI2OTk5PC9yb3dfY291bnQ+PGNvbnZlcnNpb25z
|
55
|
+
Pjxjb252ZXJzaW9uPjxjb252ZXJzaW9uX2lkPjgyOTczMjM8L2NvbnZlcnNp
|
56
|
+
b25faWQ+PHZpc2l0b3JfaWQ+MzcxOTA0OTMwPC92aXNpdG9yX2lkPjxyZXF1
|
57
|
+
ZXN0X3Nlc3Npb25faWQ+NzAzMzg3NDgzPC9yZXF1ZXN0X3Nlc3Npb25faWQ+
|
58
|
+
PGNsaWNrX3JlcXVlc3Rfc2Vzc2lvbl9pZD42NTM5Mjg5MTI8L2NsaWNrX3Jl
|
59
|
+
cXVlc3Rfc2Vzc2lvbl9pZD48Y2xpY2tfaWQ+NDk0MDQ5NDA2PC9jbGlja19p
|
60
|
+
ZD48Y29udmVyc2lvbl9kYXRlPjIwMTUtMDQtMTFUMDE6MDA6MDAuNTI8L2Nv
|
61
|
+
bnZlcnNpb25fZGF0ZT48bGFzdF91cGRhdGVkPjIwMTUtMDQtMTFUMDE6MDk6
|
62
|
+
MzAuMzk3PC9sYXN0X3VwZGF0ZWQ+PGNsaWNrX2RhdGU+MjAxNS0wMy0yNlQx
|
63
|
+
Nzo1Nzo1OC4yNDwvY2xpY2tfZGF0ZT48YWZmaWxpYXRlPjxhZmZpbGlhdGVf
|
64
|
+
aWQgeG1sbnM9IkFQSTppZF9uYW1lX3N0b3JlIj4xNjU2ODwvYWZmaWxpYXRl
|
65
|
+
X2lkPjxhZmZpbGlhdGVfbmFtZSB4bWxucz0iQVBJOmlkX25hbWVfc3RvcmUi
|
66
|
+
PkFnw6puY2lhIFByb21tbyAtIEV2ZW50b3MgZSBNa3RnIFByb21vY2lvbmFs
|
67
|
+
IEVpcmVsaTwvYWZmaWxpYXRlX25hbWU+PC9hZmZpbGlhdGU+PGFkdmVydGlz
|
68
|
+
ZXI+PGFkdmVydGlzZXJfaWQgeG1sbnM9IkFQSTppZF9uYW1lX3N0b3JlIj4x
|
69
|
+
NTg4NDwvYWR2ZXJ0aXNlcl9pZD48YWR2ZXJ0aXNlcl9uYW1lIHhtbG5zPSJB
|
70
|
+
UEk6aWRfbmFtZV9zdG9yZSI+U21pbGVnYXRlIFdlc3QgKEc0Ym94KTwvYWR2
|
71
|
+
ZXJ0aXNlcl9uYW1lPjwvYWR2ZXJ0aXNlcj48b2ZmZXI+PG9mZmVyX2lkIHht
|
72
|
+
bG5zPSJBUEk6aWRfbmFtZV9zdG9yZSI+OTYxMTwvb2ZmZXJfaWQ+PG9mZmVy
|
73
|
+
X25hbWUgeG1sbnM9IkFQSTppZF9uYW1lX3N0b3JlIj5Dcm9zc2ZpcmUgWW91
|
74
|
+
dHViZSBCUjwvb2ZmZXJfbmFtZT48L29mZmVyPjxvZmZlcl9jb250cmFjdD48
|
75
|
+
b2ZmZXJfY29udHJhY3RfaWQgeG1sbnM9IkFQSTppZF9uYW1lX3N0b3JlIj4y
|
76
|
+
MTYzPC9vZmZlcl9jb250cmFjdF9pZD48b2ZmZXJfY29udHJhY3RfbmFtZSB4
|
77
|
+
bWxucz0iQVBJOmlkX25hbWVfc3RvcmUiIC8+PC9vZmZlcl9jb250cmFjdD48
|
78
|
+
Y2FtcGFpZ24+PGNhbXBhaWduX2lkPjE2Mjg2NjwvY2FtcGFpZ25faWQ+PGNh
|
79
|
+
bXBhaWduX3R5cGU+PGNhbXBhaWduX3R5cGVfaWQ+MTwvY2FtcGFpZ25fdHlw
|
80
|
+
ZV9pZD48Y2FtcGFpZ25fdHlwZV9uYW1lPlN0YW5kYXJkPC9jYW1wYWlnbl90
|
81
|
+
eXBlX25hbWU+PC9jYW1wYWlnbl90eXBlPjwvY2FtcGFpZ24+PGNyZWF0aXZl
|
82
|
+
PjxjcmVhdGl2ZV9pZCB4bWxucz0iQVBJOmlkX25hbWVfc3RvcmUiPjQwMzE3
|
83
|
+
PC9jcmVhdGl2ZV9pZD48Y3JlYXRpdmVfbmFtZSB4bWxucz0iQVBJOmlkX25h
|
84
|
+
bWVfc3RvcmUiPjQwMzE3PC9jcmVhdGl2ZV9uYW1lPjwvY3JlYXRpdmU+PHN1
|
85
|
+
Yl9pZF8xPnZpbGhlbmE8L3N1Yl9pZF8xPjxzdWJfaWRfMiAvPjxzdWJfaWRf
|
86
|
+
MyAvPjxzdWJfaWRfNCAvPjxzdWJfaWRfNSAvPjxjb252ZXJzaW9uX2lwX2Fk
|
87
|
+
ZHJlc3M+MTg3LjM4LjYwLjk0PC9jb252ZXJzaW9uX2lwX2FkZHJlc3M+PGNs
|
88
|
+
aWNrX2lwX2FkZHJlc3M+MTg3LjM4LjYwLjk0PC9jbGlja19pcF9hZGRyZXNz
|
89
|
+
Pjxjb252ZXJzaW9uX3JlZmVycmVyX3VybD5odHRwOi8vYnIuejhnYW1lcy5j
|
90
|
+
b20vbG9naW5nL2dsb2JlcmVnaXN0ZXJfZG9uZS5odG1sP3NpZ251cD1kb25l
|
91
|
+
PC9jb252ZXJzaW9uX3JlZmVycmVyX3VybD48Y29udmVyc2lvbl91c2VyX2Fn
|
92
|
+
ZW50Pk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMSkgQXBwbGVXZWJLaXQv
|
93
|
+
NTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQxLjAuMjI3Mi4x
|
94
|
+
MTggU2FmYXJpLzUzNy4zNjwvY29udmVyc2lvbl91c2VyX2FnZW50PjxjbGlj
|
95
|
+
a191c2VyX2FnZW50Pk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMSkgQXBw
|
96
|
+
bGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQx
|
97
|
+
LjAuMjI3Mi4xMDEgU2FmYXJpLzUzNy4zNjwvY2xpY2tfdXNlcl9hZ2VudD48
|
98
|
+
c291cmNlX3R5cGU+Q2xpY2s8L3NvdXJjZV90eXBlPjxwcmljZV9mb3JtYXQ+
|
99
|
+
PHByaWNlX2Zvcm1hdF9pZCB4bWxucz0iQVBJOmlkX25hbWVfc3RvcmUiPjE8
|
100
|
+
L3ByaWNlX2Zvcm1hdF9pZD48cHJpY2VfZm9ybWF0X25hbWUgeG1sbnM9IkFQ
|
101
|
+
STppZF9uYW1lX3N0b3JlIj5DUEE8L3ByaWNlX2Zvcm1hdF9uYW1lPjwvcHJp
|
102
|
+
Y2VfZm9ybWF0PjxwYWlkPjxjdXJyZW5jeV9pZD4xPC9jdXJyZW5jeV9pZD48
|
103
|
+
YW1vdW50PjAuNzAwMDwvYW1vdW50Pjxmb3JtYXR0ZWRfYW1vdW50PiQwLjcw
|
104
|
+
PC9mb3JtYXR0ZWRfYW1vdW50PjwvcGFpZD48cGFpZF91bmJpbGxlZD48Y3Vy
|
105
|
+
cmVuY3lfaWQ+MTwvY3VycmVuY3lfaWQ+PGFtb3VudD4wLjcwMDA8L2Ftb3Vu
|
106
|
+
dD48Zm9ybWF0dGVkX2Ftb3VudD4kMC43MDwvZm9ybWF0dGVkX2Ftb3VudD48
|
107
|
+
L3BhaWRfdW5iaWxsZWQ+PHJlY2VpdmVkPjxjdXJyZW5jeV9pZD4xPC9jdXJy
|
108
|
+
ZW5jeV9pZD48YW1vdW50PjEuMDAwMDwvYW1vdW50Pjxmb3JtYXR0ZWRfYW1v
|
109
|
+
dW50PiQxLjAwPC9mb3JtYXR0ZWRfYW1vdW50PjwvcmVjZWl2ZWQ+PHJlY2Vp
|
110
|
+
dmVkX3VuYmlsbGVkPjxjdXJyZW5jeV9pZD4xPC9jdXJyZW5jeV9pZD48YW1v
|
111
|
+
dW50PjAuMDg2NTwvYW1vdW50Pjxmb3JtYXR0ZWRfYW1vdW50PiQwLjA4NjU8
|
112
|
+
L2Zvcm1hdHRlZF9hbW91bnQ+PC9yZWNlaXZlZF91bmJpbGxlZD48c3RlcF9y
|
113
|
+
ZWFjaGVkPjE8L3N0ZXBfcmVhY2hlZD48cGl4ZWxfZHJvcHBlZD5mYWxzZTwv
|
114
|
+
cGl4ZWxfZHJvcHBlZD48c3VwcHJlc3NlZD5mYWxzZTwvc3VwcHJlc3NlZD48
|
115
|
+
cmV0dXJuZWQ+ZmFsc2U8L3JldHVybmVkPjx0ZXN0PmZhbHNlPC90ZXN0Pjx0
|
116
|
+
cmFuc2FjdGlvbl9pZD5UUkFOU0FDVElPTl9JRDwvdHJhbnNhY3Rpb25faWQ+
|
117
|
+
PGN1cnJlbnRfZGlzcG9zaXRpb24+PGRpc3Bvc2l0aW9uX2lkPjM8L2Rpc3Bv
|
118
|
+
c2l0aW9uX2lkPjxkaXNwb3NpdGlvbl9uYW1lPkFwcHJvdmVkPC9kaXNwb3Np
|
119
|
+
dGlvbl9uYW1lPjxkaXNwb3NpdGlvbl90eXBlPjxkaXNwb3NpdGlvbl90eXBl
|
120
|
+
X2lkIHhtbG5zPSJBUEk6aWRfbmFtZV9zdG9yZSI+MzwvZGlzcG9zaXRpb25f
|
121
|
+
dHlwZV9pZD48ZGlzcG9zaXRpb25fdHlwZV9uYW1lIHhtbG5zPSJBUEk6aWRf
|
122
|
+
bmFtZV9zdG9yZSI+QXBwcm92ZWQ8L2Rpc3Bvc2l0aW9uX3R5cGVfbmFtZT48
|
123
|
+
L2Rpc3Bvc2l0aW9uX3R5cGU+PGNvbnRhY3Q+U3lzdGVtIFByb2Nlc3M8L2Nv
|
124
|
+
bnRhY3Q+PGRpc3Bvc2l0aW9uX2RhdGU+MjAxNS0wNC0xMVQwMTowMDowMC41
|
125
|
+
MjwvZGlzcG9zaXRpb25fZGF0ZT48L2N1cnJlbnRfZGlzcG9zaXRpb24+PGNv
|
126
|
+
bnZlcnNpb25fc2NvcmU+MC4wMDwvY29udmVyc2lvbl9zY29yZT48Y291bnRy
|
127
|
+
eT48Y291bnRyeV9jb2RlIHhtbG5zPSJBUEk6aWRfbmFtZV9zdG9yZSI+QlI8
|
128
|
+
L2NvdW50cnlfY29kZT48Y291bnRyeV9uYW1lIHhtbG5zPSJBUEk6aWRfbmFt
|
129
|
+
ZV9zdG9yZSI+QnJhemlsPC9jb3VudHJ5X25hbWU+PC9jb3VudHJ5PjxyZWdp
|
130
|
+
b24+PHJlZ2lvbl9jb2RlIHhtbG5zPSJBUEk6aWRfbmFtZV9zdG9yZSI+U1A8
|
131
|
+
L3JlZ2lvbl9jb2RlPjxyZWdpb25fbmFtZSB4bWxucz0iQVBJOmlkX25hbWVf
|
132
|
+
c3RvcmUiPlNhbyBQYXVsbzwvcmVnaW9uX25hbWU+PC9yZWdpb24+PGxhbmd1
|
133
|
+
YWdlPjxsYW5ndWFnZV9pZCB4bWxucz0iQVBJOmlkX25hbWVfc3RvcmUiPjc0
|
134
|
+
PC9sYW5ndWFnZV9pZD48bGFuZ3VhZ2VfbmFtZSB4bWxucz0iQVBJOmlkX25h
|
135
|
+
bWVfc3RvcmUiPlBvcnR1Z3Vlc2U8L2xhbmd1YWdlX25hbWU+PC9sYW5ndWFn
|
136
|
+
ZT48aXNwPjxpc3BfaWQgeG1sbnM9IkFQSTppZF9uYW1lX3N0b3JlIj4zNzYy
|
137
|
+
NDwvaXNwX2lkPjxpc3BfbmFtZSB4bWxucz0iQVBJOmlkX25hbWVfc3RvcmUi
|
138
|
+
Pk5ldCBTZXJ2aW9zIERlIENvbXVuaWNhbyBTLkEuPC9pc3BfbmFtZT48L2lz
|
139
|
+
cD48b3BlcmF0aW5nX3N5c3RlbT48b3BlcmF0aW5nX3N5c3RlbV9pZD4xODwv
|
140
|
+
b3BlcmF0aW5nX3N5c3RlbV9pZD48b3BlcmF0aW5nX3N5c3RlbV9uYW1lPldp
|
141
|
+
bmRvd3M8L29wZXJhdGluZ19zeXN0ZW1fbmFtZT48b3BlcmF0aW5nX3N5c3Rl
|
142
|
+
bV92ZXJzaW9uPjx2ZXJzaW9uX2lkIHhtbG5zPSJBUEk6aWRfbmFtZV9zdG9y
|
143
|
+
ZSI+OTwvdmVyc2lvbl9pZD48dmVyc2lvbl9uYW1lIHhtbG5zPSJBUEk6aWRf
|
144
|
+
bmFtZV9zdG9yZSI+V2luZG93cyA3PC92ZXJzaW9uX25hbWU+PC9vcGVyYXRp
|
145
|
+
bmdfc3lzdGVtX3ZlcnNpb24+PG9wZXJhdGluZ19zeXN0ZW1fdmVyc2lvbl9t
|
146
|
+
aW5vcj48dmVyc2lvbl9pZCB4bWxucz0iQVBJOmlkX25hbWVfc3RvcmUiPjk8
|
147
|
+
L3ZlcnNpb25faWQ+PHZlcnNpb25fbmFtZSB4bWxucz0iQVBJOmlkX25hbWVf
|
148
|
+
c3RvcmUiIC8+PC9vcGVyYXRpbmdfc3lzdGVtX3ZlcnNpb25fbWlub3I+PC9v
|
149
|
+
cGVyYXRpbmdfc3lzdGVtPjxicm93c2VyPjxicm93c2VyX2lkPjI8L2Jyb3dz
|
150
|
+
ZXJfaWQ+PGJyb3dzZXJfbmFtZT5DaHJvbWU8L2Jyb3dzZXJfbmFtZT48YnJv
|
151
|
+
d3Nlcl92ZXJzaW9uPjx2ZXJzaW9uX2lkIHhtbG5zPSJBUEk6aWRfbmFtZV9z
|
152
|
+
dG9yZSI+MjQ8L3ZlcnNpb25faWQ+PHZlcnNpb25fbmFtZSB4bWxucz0iQVBJ
|
153
|
+
OmlkX25hbWVfc3RvcmUiPk90aGVyPC92ZXJzaW9uX25hbWU+PC9icm93c2Vy
|
154
|
+
X3ZlcnNpb24+PGJyb3dzZXJfdmVyc2lvbl9taW5vcj48dmVyc2lvbl9pZCB4
|
155
|
+
bWxucz0iQVBJOmlkX25hbWVfc3RvcmUiPjI0PC92ZXJzaW9uX2lkPjx2ZXJz
|
156
|
+
aW9uX25hbWUgeG1sbnM9IkFQSTppZF9uYW1lX3N0b3JlIiAvPjwvYnJvd3Nl
|
157
|
+
cl92ZXJzaW9uX21pbm9yPjwvYnJvd3Nlcj48bm90ZSAvPjwvY29udmVyc2lv
|
158
|
+
bj48L2NvbnZlcnNpb25zPjwvQ29udmVyc2lvbnNSZXN1bHQ+PC9Db252ZXJz
|
159
|
+
aW9uc1Jlc3BvbnNlPjwvc29hcDpCb2R5Pjwvc29hcDpFbnZlbG9wZT4=
|
160
|
+
http_version:
|
161
|
+
recorded_at: Thu, 07 May 2015 09:37:00 GMT
|
162
|
+
recorded_with: VCR 2.9.3
|
@@ -38,6 +38,17 @@ RSpec.describe SoapyCake::Admin do
|
|
38
38
|
)
|
39
39
|
end
|
40
40
|
|
41
|
+
it 'does not parse a transaction_id as an integer', :vcr do
|
42
|
+
result = subject.conversions(
|
43
|
+
start_date: Date.new(2015, 4, 11),
|
44
|
+
end_date: Date.new(2015, 4, 12),
|
45
|
+
row_limit: 1
|
46
|
+
)
|
47
|
+
|
48
|
+
expect(result.count).to eq(1)
|
49
|
+
expect(result.first[:transaction_id]).to eq('TRANSACTION_ID')
|
50
|
+
end
|
51
|
+
|
41
52
|
it 'raises if there is an error', :vcr do
|
42
53
|
expect do
|
43
54
|
subject.affiliates(affiliate_id: 'bloops')
|
@@ -0,0 +1,59 @@
|
|
1
|
+
RSpec.describe SoapyCake::ResponseValue do
|
2
|
+
def subject(*args)
|
3
|
+
described_class.new(*args)
|
4
|
+
end
|
5
|
+
|
6
|
+
describe '#parse' do
|
7
|
+
context 'booleans' do
|
8
|
+
it 'converts the string "true" to the true value' do
|
9
|
+
expect(subject(:foo, 'true').parse).to eq(true)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'converts the string "false" to the false value' do
|
13
|
+
expect(subject(:foo, 'false').parse).to eq(false)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'dates' do
|
18
|
+
it 'parses an ISO-formatted date' do
|
19
|
+
expect(subject(:foo, '2014-06-30T01:00:00').parse).to eq(DateTime.new(2014, 6, 30, 1))
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'properly applies the provided time offset' do
|
23
|
+
expect(subject(:foo, '2014-01-01T00:00:00', time_offset: 5).parse)
|
24
|
+
.to eq(DateTime.new(2014, 1, 1, 0).change(offset: '+0500'))
|
25
|
+
|
26
|
+
expect(subject(:foo, '2014-12-31T01:00:00', time_offset: -2).parse)
|
27
|
+
.to eq(DateTime.new(2014, 12, 31, 1).change(offset: '-0200'))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'strings' do
|
32
|
+
it 'parses a string' do
|
33
|
+
expect(subject(:foo, 'abc').parse).to eq('abc')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'IDs' do
|
38
|
+
it 'converts keys ending in "_id" to integers' do
|
39
|
+
expect(subject(:conversion_id, '42').parse).to eq(42)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "doesn't convert ids in the blacklist to integers" do
|
43
|
+
expect(subject(:tax_id, '123abc').parse).to eq('123abc')
|
44
|
+
expect(subject(:other_tax_id, '123abc').parse).to eq('123abc')
|
45
|
+
expect(subject(:transaction_id, '123abc').parse).to eq('123abc')
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'raises an error if not in the blacklist and non-digit characters are detected' do
|
49
|
+
expect { subject(:foo_id, '123abc').parse }.to raise_error(SoapyCake::Error)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'does not raise an error if the value is absent' do
|
53
|
+
expect(subject(:foo_id, '-1').parse).to eq(-1)
|
54
|
+
expect(subject(:foo_id, '').parse).to eq(0)
|
55
|
+
expect(subject(:foo_id, nil).parse).to eq(0)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soapy_cake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ad2games GmbH
|
@@ -191,8 +191,10 @@ files:
|
|
191
191
|
- lib/soapy_cake/helper.rb
|
192
192
|
- lib/soapy_cake/request.rb
|
193
193
|
- lib/soapy_cake/response.rb
|
194
|
+
- lib/soapy_cake/response_value.rb
|
194
195
|
- lib/soapy_cake/version.rb
|
195
196
|
- soapy_cake.gemspec
|
197
|
+
- spec/fixtures/vcr_cassettes/SoapyCake_Admin/does_not_parse_a_transaction_id_as_an_integer.yml
|
196
198
|
- spec/fixtures/vcr_cassettes/SoapyCake_Admin/raises_if_there_is_an_error.yml
|
197
199
|
- spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_a_clicks_report_with_a_defined_time_range.yml
|
198
200
|
- spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_an_affiliate_with_correct_data_types.yml
|
@@ -213,6 +215,7 @@ files:
|
|
213
215
|
- spec/lib/soapy_cake/admin_track_spec.rb
|
214
216
|
- spec/lib/soapy_cake/affiliate_spec.rb
|
215
217
|
- spec/lib/soapy_cake/request_spec.rb
|
218
|
+
- spec/lib/soapy_cake/response_value_spec.rb
|
216
219
|
- spec/spec_helper.rb
|
217
220
|
- spec/support/admin_method_example.rb
|
218
221
|
homepage: http://ad2games.com
|
@@ -235,11 +238,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
235
238
|
version: '0'
|
236
239
|
requirements: []
|
237
240
|
rubyforge_project:
|
238
|
-
rubygems_version: 2.4.
|
241
|
+
rubygems_version: 2.4.5
|
239
242
|
signing_key:
|
240
243
|
specification_version: 4
|
241
244
|
summary: Simple client for the CAKE API
|
242
245
|
test_files:
|
246
|
+
- spec/fixtures/vcr_cassettes/SoapyCake_Admin/does_not_parse_a_transaction_id_as_an_integer.yml
|
243
247
|
- spec/fixtures/vcr_cassettes/SoapyCake_Admin/raises_if_there_is_an_error.yml
|
244
248
|
- spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_a_clicks_report_with_a_defined_time_range.yml
|
245
249
|
- spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_an_affiliate_with_correct_data_types.yml
|
@@ -260,5 +264,6 @@ test_files:
|
|
260
264
|
- spec/lib/soapy_cake/admin_track_spec.rb
|
261
265
|
- spec/lib/soapy_cake/affiliate_spec.rb
|
262
266
|
- spec/lib/soapy_cake/request_spec.rb
|
267
|
+
- spec/lib/soapy_cake/response_value_spec.rb
|
263
268
|
- spec/spec_helper.rb
|
264
269
|
- spec/support/admin_method_example.rb
|