sekken 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -1
- data/CHANGELOG.md +3 -0
- data/Gemfile +1 -0
- data/README.md +2 -2
- data/lib/sekken.rb +3 -3
- data/lib/sekken/message.rb +35 -3
- data/lib/sekken/operation.rb +12 -5
- data/lib/sekken/version.rb +1 -1
- data/lib/sekken/xs/types.rb +1 -1
- data/spec/fixtures/wsdl/daisycon.wsdl +403 -0
- data/spec/sekken/operation/build_spec.rb +74 -5
- data/spec/sekken/operation_spec.rb +1 -2
- data/spec/sekken/xs/complex_type_spec.rb +36 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 113a2291ad7a1beeb56e9cc689fb64e0e8981b12
|
4
|
+
data.tar.gz: 6eaa38a8ff63c9a0658a11a9a45af007c063bf42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 278a43d288ddfe7b88be45f7e38cc2ff91b7e2a0253cb869caa4fd8bf43431039721b06eb0a08bfaf8752c7c5533553c3e30d0ac833c70c8a6030a638b525910
|
7
|
+
data.tar.gz: a4979836de3440b806cf7ffb92e4d70a0ce7703f5886ae656c08b1a81382c93005c03439ea6e955a955aa7a4f53a8b6eea6e48f2e92819a55e98c412f80329c7
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -21,8 +21,8 @@ Sekken is still in a very early stage, but [there is some documentation!](http:/
|
|
21
21
|
## Give back
|
22
22
|
|
23
23
|
If you're using Sekken and you or your company is making money from it, then please consider
|
24
|
-
donating via [Gittip](https://www.gittip.com/
|
24
|
+
donating via [Gittip](https://www.gittip.com/tjarratt/) so that I can continue to improve it.
|
25
25
|
|
26
|
-
[![donate](donate.png)](https://www.gittip.com/
|
26
|
+
[![donate](donate.png)](https://www.gittip.com/tjarratt/)
|
27
27
|
|
28
28
|
Donate icon from the [Noun Project](http://thenounproject.com/noun/donate/#icon-No285).
|
data/lib/sekken.rb
CHANGED
@@ -66,9 +66,9 @@ class Sekken
|
|
66
66
|
# Private: Raises if the operation style is not supported.
|
67
67
|
def verify_operation_style!(operation)
|
68
68
|
if operation.input_style == 'rpc/encoded'
|
69
|
-
|
70
|
-
|
71
|
-
|
69
|
+
raise UnsupportedStyleError,
|
70
|
+
"#{operation.name.inspect} is an #{operation.input_style.inspect} style operation.\n" \
|
71
|
+
"Currently this style is not supported."
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
data/lib/sekken/message.rb
CHANGED
@@ -58,7 +58,13 @@ class Sekken
|
|
58
58
|
end
|
59
59
|
if value.is_a? Hash
|
60
60
|
attributes, value = extract_attributes(value)
|
61
|
-
|
61
|
+
if attributes.empty? && tag[1].nil?
|
62
|
+
t = xml.tag! *tag, {} do |b|
|
63
|
+
build_from_hash(b, value, xml)
|
64
|
+
end
|
65
|
+
else
|
66
|
+
xml.tag! *tag, value[tag[1]], attributes
|
67
|
+
end
|
62
68
|
else
|
63
69
|
xml.tag! *tag, value
|
64
70
|
end
|
@@ -73,6 +79,22 @@ class Sekken
|
|
73
79
|
end
|
74
80
|
end
|
75
81
|
|
82
|
+
# build_from_hash 'foo', {a: {b: c: 123}}, xml
|
83
|
+
#
|
84
|
+
# => <foo><a><b><c>123</c></b></a></foo>
|
85
|
+
#
|
86
|
+
def build_from_hash(key, value, xml)
|
87
|
+
value.each do |k, v|
|
88
|
+
if v.is_a? Hash
|
89
|
+
key.tag!(k) do |nested|
|
90
|
+
build_from_hash(nested, v, xml)
|
91
|
+
end
|
92
|
+
else
|
93
|
+
key.tag! k, v
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
76
98
|
def build_complex_type_element(element, xml, tag, value)
|
77
99
|
if element.singular?
|
78
100
|
unless value.kind_of? Hash
|
@@ -99,8 +121,18 @@ class Sekken
|
|
99
121
|
xml.tag! *tag, attributes do |xml|
|
100
122
|
build_elements(children, value, xml)
|
101
123
|
end
|
102
|
-
elsif value
|
103
|
-
|
124
|
+
elsif value
|
125
|
+
if value.is_a? Hash
|
126
|
+
if attributes.empty? && tag[1].nil?
|
127
|
+
t=xml.tag!(*tag) do |b|
|
128
|
+
build_from_hash(b, value, xml)
|
129
|
+
end
|
130
|
+
else
|
131
|
+
xml.tag! *tag, tag[1] ? value[tag[1]] : value, attributes
|
132
|
+
end
|
133
|
+
else
|
134
|
+
xml.tag! *tag, value
|
135
|
+
end
|
104
136
|
else
|
105
137
|
xml.tag! *tag, attributes
|
106
138
|
end
|
data/lib/sekken/operation.rb
CHANGED
@@ -8,8 +8,8 @@ class Sekken
|
|
8
8
|
ENCODING = 'UTF-8'
|
9
9
|
|
10
10
|
CONTENT_TYPE = {
|
11
|
-
'1.1' => 'text/xml
|
12
|
-
'1.2' => 'application/soap+xml
|
11
|
+
'1.1' => 'text/xml',
|
12
|
+
'1.2' => 'application/soap+xml'
|
13
13
|
}
|
14
14
|
|
15
15
|
def initialize(operation, wsdl, http)
|
@@ -39,9 +39,16 @@ class Sekken
|
|
39
39
|
def http_headers
|
40
40
|
return @http_headers if @http_headers
|
41
41
|
headers = {}
|
42
|
+
content_type = [ CONTENT_TYPE[soap_version], "charset=#{encoding}" ]
|
42
43
|
|
43
|
-
|
44
|
-
|
44
|
+
case soap_version
|
45
|
+
when '1.1'
|
46
|
+
headers['SOAPAction'] = soap_action.nil? ? '' : %{"#{soap_action}"}
|
47
|
+
when '1.2'
|
48
|
+
content_type << %{action="#{soap_action}"} if soap_action && !soap_action.empty?
|
49
|
+
end
|
50
|
+
|
51
|
+
headers['Content-Type'] = content_type.join(';')
|
45
52
|
|
46
53
|
@http_headers = headers
|
47
54
|
end
|
@@ -72,7 +79,7 @@ class Sekken
|
|
72
79
|
|
73
80
|
# Public: Build the request XML for this operation.
|
74
81
|
def build
|
75
|
-
Envelope.new(@operation, header, body).to_s
|
82
|
+
@build ||= Envelope.new(@operation, header, body).to_s
|
76
83
|
end
|
77
84
|
|
78
85
|
# Public: Sets the request envelope XML. Use in place of body().
|
data/lib/sekken/version.rb
CHANGED
data/lib/sekken/xs/types.rb
CHANGED
@@ -0,0 +1,403 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<?xml-stylesheet type="text/xsl" href="http://api.daisycon.com/wsdlviewer.xsl" ?>
|
3
|
+
<definitions name="transaction" targetNamespace="http://api.daisycon.com/advertiser/soap//transaction/"
|
4
|
+
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
5
|
+
xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
|
6
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
7
|
+
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
8
|
+
xmlns:tns="http://api.daisycon.com/advertiser/soap//transaction/"
|
9
|
+
>
|
10
|
+
<types>
|
11
|
+
<xsd:schema targetNamespace="http://api.daisycon.com/advertiser/soap//transaction/">
|
12
|
+
<xsd:simpleType name="orderFieldsDirection">
|
13
|
+
<xsd:restriction base="xsd:string">
|
14
|
+
<xsd:enumeration value="ASCENDING" />
|
15
|
+
<xsd:enumeration value="DESCENDING" />
|
16
|
+
</xsd:restriction>
|
17
|
+
</xsd:simpleType>
|
18
|
+
<xsd:complexType name="orderFields">
|
19
|
+
<xsd:all>
|
20
|
+
<xsd:element name="field" type="xsd:string" />
|
21
|
+
<xsd:element name="direction" type="tns:orderFieldsDirection" />
|
22
|
+
</xsd:all>
|
23
|
+
</xsd:complexType>
|
24
|
+
<xsd:complexType name="ArrayOfOrderfields">
|
25
|
+
<xsd:complexContent>
|
26
|
+
<xsd:restriction base="soap-enc:Array">
|
27
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:orderFields[]" />
|
28
|
+
</xsd:restriction>
|
29
|
+
</xsd:complexContent>
|
30
|
+
</xsd:complexType>
|
31
|
+
<xsd:complexType name="ArrayOfString">
|
32
|
+
<xsd:complexContent>
|
33
|
+
<xsd:restriction base="soap-enc:Array">
|
34
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="xsd:string[]" />
|
35
|
+
</xsd:restriction>
|
36
|
+
</xsd:complexContent>
|
37
|
+
</xsd:complexType>
|
38
|
+
<xsd:complexType name="ArrayOfInt">
|
39
|
+
<xsd:complexContent>
|
40
|
+
<xsd:restriction base="soap-enc:Array">
|
41
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="xsd:int[]" />
|
42
|
+
</xsd:restriction>
|
43
|
+
</xsd:complexContent>
|
44
|
+
</xsd:complexType>
|
45
|
+
<xsd:simpleType name="transactionsFilterGender">
|
46
|
+
<xsd:restriction base="xsd:string">
|
47
|
+
<xsd:enumeration value="male" />
|
48
|
+
<xsd:enumeration value="female" />
|
49
|
+
<xsd:enumeration value="unknown" />
|
50
|
+
</xsd:restriction>
|
51
|
+
</xsd:simpleType>
|
52
|
+
<xsd:complexType name="ArrayOfTransactionsFilterGender">
|
53
|
+
<xsd:complexContent>
|
54
|
+
<xsd:restriction base="soap-enc:Array">
|
55
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:transactionsFilterGender[]" />
|
56
|
+
</xsd:restriction>
|
57
|
+
</xsd:complexContent>
|
58
|
+
</xsd:complexType>
|
59
|
+
<xsd:simpleType name="transactionsFilterMediatype">
|
60
|
+
<xsd:restriction base="xsd:string">
|
61
|
+
<xsd:enumeration value="website" />
|
62
|
+
<xsd:enumeration value="keyword_marketing" />
|
63
|
+
<xsd:enumeration value="email_marketing" />
|
64
|
+
<xsd:enumeration value="socialmedia" />
|
65
|
+
<xsd:enumeration value="cashback" />
|
66
|
+
</xsd:restriction>
|
67
|
+
</xsd:simpleType>
|
68
|
+
<xsd:complexType name="ArrayOfTransactionsFilterMediatype">
|
69
|
+
<xsd:complexContent>
|
70
|
+
<xsd:restriction base="soap-enc:Array">
|
71
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:transactionsFilterMediatype[]" />
|
72
|
+
</xsd:restriction>
|
73
|
+
</xsd:complexContent>
|
74
|
+
</xsd:complexType>
|
75
|
+
<xsd:simpleType name="transactionsFilterProvince">
|
76
|
+
<xsd:restriction base="xsd:string">
|
77
|
+
<xsd:enumeration value="unknown" />
|
78
|
+
<xsd:enumeration value="DR" />
|
79
|
+
<xsd:enumeration value="FL" />
|
80
|
+
<xsd:enumeration value="FR" />
|
81
|
+
<xsd:enumeration value="GE" />
|
82
|
+
<xsd:enumeration value="GR" />
|
83
|
+
<xsd:enumeration value="LI" />
|
84
|
+
<xsd:enumeration value="NH" />
|
85
|
+
<xsd:enumeration value="NB" />
|
86
|
+
<xsd:enumeration value="OV" />
|
87
|
+
<xsd:enumeration value="UT" />
|
88
|
+
<xsd:enumeration value="ZE" />
|
89
|
+
<xsd:enumeration value="ZH" />
|
90
|
+
</xsd:restriction>
|
91
|
+
</xsd:simpleType>
|
92
|
+
<xsd:complexType name="ArrayOfTransactionsFilterProvince">
|
93
|
+
<xsd:complexContent>
|
94
|
+
<xsd:restriction base="soap-enc:Array">
|
95
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:transactionsFilterProvince[]" />
|
96
|
+
</xsd:restriction>
|
97
|
+
</xsd:complexContent>
|
98
|
+
</xsd:complexType>
|
99
|
+
<xsd:simpleType name="transactionsFilterStatus">
|
100
|
+
<xsd:restriction base="xsd:string">
|
101
|
+
<xsd:enumeration value="open" />
|
102
|
+
<xsd:enumeration value="approved" />
|
103
|
+
<xsd:enumeration value="disapproved" />
|
104
|
+
</xsd:restriction>
|
105
|
+
</xsd:simpleType>
|
106
|
+
<xsd:complexType name="ArrayOfTransactionsFilterStatus">
|
107
|
+
<xsd:complexContent>
|
108
|
+
<xsd:restriction base="soap-enc:Array">
|
109
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:transactionsFilterStatus[]" />
|
110
|
+
</xsd:restriction>
|
111
|
+
</xsd:complexContent>
|
112
|
+
</xsd:complexType>
|
113
|
+
<xsd:complexType name="transactionsFilter">
|
114
|
+
<xsd:all>
|
115
|
+
<xsd:element name="offset" type="xsd:int" nillable="true" />
|
116
|
+
<xsd:element name="limitCount" type="xsd:int" nillable="true" />
|
117
|
+
<xsd:element name="orderBy" type="tns:ArrayOfOrderfields" nillable="true" />
|
118
|
+
<xsd:element name="affiliatemarketing_id" type="tns:ArrayOfString" nillable="true" />
|
119
|
+
<xsd:element name="selection_start" type="xsd:date" maxOccurs="1" minOccurs="1" />
|
120
|
+
<xsd:element name="selection_end" type="xsd:date" maxOccurs="1" minOccurs="1" />
|
121
|
+
<xsd:element name="by_mutation" type="xsd:boolean" nillable="true" />
|
122
|
+
<xsd:element name="program_ids" type="tns:ArrayOfInt" nillable="true" />
|
123
|
+
<xsd:element name="advertiser_ids" type="tns:ArrayOfInt" />
|
124
|
+
<xsd:element name="media_ids" type="tns:ArrayOfInt" nillable="true" />
|
125
|
+
<xsd:element name="gender" type="tns:ArrayOfTransactionsFilterGender" nillable="true" />
|
126
|
+
<xsd:element name="description" type="xsd:string" nillable="true" />
|
127
|
+
<xsd:element name="mediatype" type="tns:ArrayOfTransactionsFilterMediatype" nillable="true" />
|
128
|
+
<xsd:element name="extra1" type="xsd:string" nillable="true" />
|
129
|
+
<xsd:element name="extra2" type="xsd:string" nillable="true" />
|
130
|
+
<xsd:element name="extra3" type="xsd:string" nillable="true" />
|
131
|
+
<xsd:element name="extra4" type="xsd:string" nillable="true" />
|
132
|
+
<xsd:element name="extra5" type="xsd:string" nillable="true" />
|
133
|
+
<xsd:element name="program_tag" type="xsd:string" nillable="true" />
|
134
|
+
<xsd:element name="province" type="tns:ArrayOfTransactionsFilterProvince" nillable="true" />
|
135
|
+
<xsd:element name="status" type="tns:ArrayOfTransactionsFilterStatus" nillable="true" />
|
136
|
+
</xsd:all>
|
137
|
+
</xsd:complexType>
|
138
|
+
<xsd:simpleType name="transactionCurrency">
|
139
|
+
<xsd:restriction base="xsd:string">
|
140
|
+
<xsd:enumeration value="EUR" />
|
141
|
+
</xsd:restriction>
|
142
|
+
</xsd:simpleType>
|
143
|
+
<xsd:simpleType name="transactionStatus">
|
144
|
+
<xsd:restriction base="xsd:string">
|
145
|
+
<xsd:enumeration value="open" />
|
146
|
+
<xsd:enumeration value="approved" />
|
147
|
+
<xsd:enumeration value="disapproved" />
|
148
|
+
</xsd:restriction>
|
149
|
+
</xsd:simpleType>
|
150
|
+
<xsd:simpleType name="transactionProvince">
|
151
|
+
<xsd:restriction base="xsd:string">
|
152
|
+
<xsd:enumeration value="unknown" />
|
153
|
+
<xsd:enumeration value="DR" />
|
154
|
+
<xsd:enumeration value="FL" />
|
155
|
+
<xsd:enumeration value="FR" />
|
156
|
+
<xsd:enumeration value="GE" />
|
157
|
+
<xsd:enumeration value="GR" />
|
158
|
+
<xsd:enumeration value="LI" />
|
159
|
+
<xsd:enumeration value="NH" />
|
160
|
+
<xsd:enumeration value="NB" />
|
161
|
+
<xsd:enumeration value="OV" />
|
162
|
+
<xsd:enumeration value="UT" />
|
163
|
+
<xsd:enumeration value="ZE" />
|
164
|
+
<xsd:enumeration value="ZH" />
|
165
|
+
</xsd:restriction>
|
166
|
+
</xsd:simpleType>
|
167
|
+
<xsd:complexType name="ArrayOfTransactionProvince">
|
168
|
+
<xsd:complexContent>
|
169
|
+
<xsd:restriction base="soap-enc:Array">
|
170
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:transactionProvince[]" />
|
171
|
+
</xsd:restriction>
|
172
|
+
</xsd:complexContent>
|
173
|
+
</xsd:complexType>
|
174
|
+
<xsd:simpleType name="transactionGender">
|
175
|
+
<xsd:restriction base="xsd:string">
|
176
|
+
<xsd:enumeration value="male" />
|
177
|
+
<xsd:enumeration value="female" />
|
178
|
+
<xsd:enumeration value="unknown" />
|
179
|
+
</xsd:restriction>
|
180
|
+
</xsd:simpleType>
|
181
|
+
<xsd:complexType name="ArrayOfTransactionGender">
|
182
|
+
<xsd:complexContent>
|
183
|
+
<xsd:restriction base="soap-enc:Array">
|
184
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:transactionGender[]" />
|
185
|
+
</xsd:restriction>
|
186
|
+
</xsd:complexContent>
|
187
|
+
</xsd:complexType>
|
188
|
+
<xsd:complexType name="transaction">
|
189
|
+
<xsd:all>
|
190
|
+
<xsd:element name="affiliatemarketing_id" type="xsd:string" nillable="true" />
|
191
|
+
<xsd:element name="date_transaction" type="xsd:dateTime" maxOccurs="1" minOccurs="1" />
|
192
|
+
<xsd:element name="date_click" type="xsd:dateTime" maxOccurs="1" minOccurs="1" />
|
193
|
+
<xsd:element name="advertiser_id" type="xsd:int" nillable="true" />
|
194
|
+
<xsd:element name="publisher_id" type="xsd:int" nillable="true" />
|
195
|
+
<xsd:element name="media_id" type="xsd:int" nillable="true" />
|
196
|
+
<xsd:element name="media_name" type="xsd:string" nillable="true" />
|
197
|
+
<xsd:element name="program_id" type="xsd:int" nillable="true" />
|
198
|
+
<xsd:element name="program_name" type="xsd:string" nillable="true" />
|
199
|
+
<xsd:element name="adgroup_id" type="xsd:int" nillable="true" />
|
200
|
+
<xsd:element name="ad_id" type="xsd:int" nillable="true" />
|
201
|
+
<xsd:element name="commission" type="xsd:float" nillable="true" />
|
202
|
+
<xsd:element name="currency" type="tns:transactionCurrency" />
|
203
|
+
<xsd:element name="program_description" type="xsd:string" nillable="true" />
|
204
|
+
<xsd:element name="program_tag" type="xsd:string" nillable="true" />
|
205
|
+
<xsd:element name="ip" type="xsd:string" nillable="true" />
|
206
|
+
<xsd:element name="referer" type="xsd:string" nillable="true" />
|
207
|
+
<xsd:element name="status" type="tns:transactionStatus" nillable="true" />
|
208
|
+
<xsd:element name="disapprove_reason" type="xsd:string" nillable="true" />
|
209
|
+
<xsd:element name="approval_date" type="xsd:dateTime" maxOccurs="1" nillable="true" />
|
210
|
+
<xsd:element name="last_modified" type="xsd:dateTime" maxOccurs="1" nillable="true" />
|
211
|
+
<xsd:element name="country_id" type="xsd:int" nillable="true" />
|
212
|
+
<xsd:element name="country_code" type="xsd:string" nillable="true" />
|
213
|
+
<xsd:element name="province" type="tns:ArrayOfTransactionProvince" nillable="true" />
|
214
|
+
<xsd:element name="gender" type="tns:ArrayOfTransactionGender" nillable="true" />
|
215
|
+
<xsd:element name="birthday" type="xsd:dateTime" maxOccurs="1" nillable="true" />
|
216
|
+
<xsd:element name="revenue" type="xsd:float" nillable="true" />
|
217
|
+
<xsd:element name="extra1" type="xsd:string" nillable="true" />
|
218
|
+
<xsd:element name="extra2" type="xsd:string" nillable="true" />
|
219
|
+
<xsd:element name="extra3" type="xsd:string" nillable="true" />
|
220
|
+
<xsd:element name="extra4" type="xsd:string" nillable="true" />
|
221
|
+
<xsd:element name="extra5" type="xsd:string" nillable="true" />
|
222
|
+
</xsd:all>
|
223
|
+
</xsd:complexType>
|
224
|
+
<xsd:complexType name="ArrayOfTransaction">
|
225
|
+
<xsd:complexContent>
|
226
|
+
<xsd:restriction base="soap-enc:Array">
|
227
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:transaction[]" />
|
228
|
+
</xsd:restriction>
|
229
|
+
</xsd:complexContent>
|
230
|
+
</xsd:complexType>
|
231
|
+
<xsd:simpleType name="validate_transactionStatus">
|
232
|
+
<xsd:restriction base="xsd:string">
|
233
|
+
<xsd:enumeration value="open" />
|
234
|
+
<xsd:enumeration value="approved" />
|
235
|
+
<xsd:enumeration value="disapproved" />
|
236
|
+
</xsd:restriction>
|
237
|
+
</xsd:simpleType>
|
238
|
+
<xsd:simpleType name="validate_transactionDisapprove_reason">
|
239
|
+
<xsd:restriction base="xsd:string">
|
240
|
+
<xsd:enumeration value="invalid" />
|
241
|
+
<xsd:enumeration value="duplicate" />
|
242
|
+
<xsd:enumeration value="cancelled" />
|
243
|
+
<xsd:enumeration value="nopayment" />
|
244
|
+
<xsd:enumeration value="refunded" />
|
245
|
+
<xsd:enumeration value="testorder" />
|
246
|
+
</xsd:restriction>
|
247
|
+
</xsd:simpleType>
|
248
|
+
<xsd:complexType name="validate_transaction">
|
249
|
+
<xsd:all>
|
250
|
+
<xsd:element name="program_id" type="xsd:int" />
|
251
|
+
<xsd:element name="affiliatemarketing_id" type="xsd:string" nillable="true" />
|
252
|
+
<xsd:element name="program_tag" type="xsd:string" nillable="true" />
|
253
|
+
<xsd:element name="commission" type="xsd:float" nillable="true" />
|
254
|
+
<xsd:element name="status" type="tns:validate_transactionStatus" nillable="true" />
|
255
|
+
<xsd:element name="disapprove_reason" type="tns:validate_transactionDisapprove_reason" nillable="true" />
|
256
|
+
</xsd:all>
|
257
|
+
</xsd:complexType>
|
258
|
+
<xsd:complexType name="ArrayOfValidate_transaction">
|
259
|
+
<xsd:complexContent>
|
260
|
+
<xsd:restriction base="soap-enc:Array">
|
261
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:validate_transaction[]" />
|
262
|
+
</xsd:restriction>
|
263
|
+
</xsd:complexContent>
|
264
|
+
</xsd:complexType>
|
265
|
+
<xsd:simpleType name="successesStatus">
|
266
|
+
<xsd:restriction base="xsd:string">
|
267
|
+
<xsd:enumeration value="open" />
|
268
|
+
<xsd:enumeration value="approved" />
|
269
|
+
<xsd:enumeration value="disapproved" />
|
270
|
+
</xsd:restriction>
|
271
|
+
</xsd:simpleType>
|
272
|
+
<xsd:simpleType name="successesDisapprove_reason">
|
273
|
+
<xsd:restriction base="xsd:string">
|
274
|
+
<xsd:enumeration value="invalid" />
|
275
|
+
<xsd:enumeration value="duplicate" />
|
276
|
+
<xsd:enumeration value="cancelled" />
|
277
|
+
<xsd:enumeration value="nopayment" />
|
278
|
+
<xsd:enumeration value="refunded" />
|
279
|
+
<xsd:enumeration value="testorder" />
|
280
|
+
</xsd:restriction>
|
281
|
+
</xsd:simpleType>
|
282
|
+
<xsd:complexType name="successes">
|
283
|
+
<xsd:all>
|
284
|
+
<xsd:element name="program_id" type="xsd:int" />
|
285
|
+
<xsd:element name="affiliatemarketing_id" type="xsd:string" nillable="true" />
|
286
|
+
<xsd:element name="program_tag" type="xsd:string" nillable="true" />
|
287
|
+
<xsd:element name="commission" type="xsd:float" nillable="true" />
|
288
|
+
<xsd:element name="status" type="tns:successesStatus" nillable="true" />
|
289
|
+
<xsd:element name="disapprove_reason" type="tns:successesDisapprove_reason" nillable="true" />
|
290
|
+
</xsd:all>
|
291
|
+
</xsd:complexType>
|
292
|
+
<xsd:complexType name="ArrayOfSuccesses">
|
293
|
+
<xsd:complexContent>
|
294
|
+
<xsd:restriction base="soap-enc:Array">
|
295
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:successes[]" />
|
296
|
+
</xsd:restriction>
|
297
|
+
</xsd:complexContent>
|
298
|
+
</xsd:complexType>
|
299
|
+
<xsd:simpleType name="failuresStatus">
|
300
|
+
<xsd:restriction base="xsd:string">
|
301
|
+
<xsd:enumeration value="open" />
|
302
|
+
<xsd:enumeration value="approved" />
|
303
|
+
<xsd:enumeration value="disapproved" />
|
304
|
+
</xsd:restriction>
|
305
|
+
</xsd:simpleType>
|
306
|
+
<xsd:simpleType name="failuresDisapprove_reason">
|
307
|
+
<xsd:restriction base="xsd:string">
|
308
|
+
<xsd:enumeration value="invalid" />
|
309
|
+
<xsd:enumeration value="duplicate" />
|
310
|
+
<xsd:enumeration value="cancelled" />
|
311
|
+
<xsd:enumeration value="nopayment" />
|
312
|
+
<xsd:enumeration value="refunded" />
|
313
|
+
<xsd:enumeration value="testorder" />
|
314
|
+
</xsd:restriction>
|
315
|
+
</xsd:simpleType>
|
316
|
+
<xsd:complexType name="failures">
|
317
|
+
<xsd:all>
|
318
|
+
<xsd:element name="program_id" type="xsd:int" />
|
319
|
+
<xsd:element name="affiliatemarketing_id" type="xsd:string" nillable="true" />
|
320
|
+
<xsd:element name="program_tag" type="xsd:string" nillable="true" />
|
321
|
+
<xsd:element name="commission" type="xsd:float" nillable="true" />
|
322
|
+
<xsd:element name="status" type="tns:failuresStatus" nillable="true" />
|
323
|
+
<xsd:element name="disapprove_reason" type="tns:failuresDisapprove_reason" nillable="true" />
|
324
|
+
<xsd:element name="error" type="xsd:string" nillable="true" />
|
325
|
+
</xsd:all>
|
326
|
+
</xsd:complexType>
|
327
|
+
<xsd:complexType name="ArrayOfFailures">
|
328
|
+
<xsd:complexContent>
|
329
|
+
<xsd:restriction base="soap-enc:Array">
|
330
|
+
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:failures[]" />
|
331
|
+
</xsd:restriction>
|
332
|
+
</xsd:complexContent>
|
333
|
+
</xsd:complexType>
|
334
|
+
<xsd:complexType name="validatedTransactionReturn">
|
335
|
+
<xsd:all>
|
336
|
+
<xsd:element name="success" type="tns:ArrayOfSuccesses" nillable="true" />
|
337
|
+
<xsd:element name="failures" type="tns:ArrayOfFailures" nillable="true" />
|
338
|
+
</xsd:all>
|
339
|
+
</xsd:complexType>
|
340
|
+
<xsd:complexType name="responseInfo">
|
341
|
+
<xsd:all>
|
342
|
+
<xsd:element name="totalResults" type="xsd:int" nillable="true" />
|
343
|
+
<xsd:element name="startOffset" type="xsd:int" nillable="true" />
|
344
|
+
<xsd:element name="endOffset" type="xsd:int" nillable="true" />
|
345
|
+
<xsd:element name="requestTime" type="xsd:int" nillable="true" />
|
346
|
+
<xsd:element name="message" type="xsd:string" nillable="true" />
|
347
|
+
</xsd:all>
|
348
|
+
</xsd:complexType>
|
349
|
+
</xsd:schema>
|
350
|
+
</types>
|
351
|
+
<portType name="transactionPort">
|
352
|
+
<operation name="getTransactions">
|
353
|
+
<documentation>Get transactions</documentation>
|
354
|
+
<input message="tns:getTransactionsIn" />
|
355
|
+
<output message="tns:getTransactionsOut" />
|
356
|
+
</operation>
|
357
|
+
<operation name="validateTransaction">
|
358
|
+
<documentation>Validate transaction by affiliatemarketing_id or by program_tag | max 5000 per request</documentation>
|
359
|
+
<input message="tns:validateTransactionIn" />
|
360
|
+
<output message="tns:validateTransactionOut" />
|
361
|
+
</operation>
|
362
|
+
</portType>
|
363
|
+
<binding name="transactionBinding" type="tns:transactionPort">
|
364
|
+
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
|
365
|
+
<operation name="getTransactions">
|
366
|
+
<soap:operation soapAction="http://api.daisycon.com/advertiser/soap//transaction/#getTransactions" />
|
367
|
+
<input>
|
368
|
+
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://api.daisycon.com/advertiser/soap//transaction/" />
|
369
|
+
</input>
|
370
|
+
<output>
|
371
|
+
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://api.daisycon.com/advertiser/soap//transaction/" />
|
372
|
+
</output>
|
373
|
+
</operation>
|
374
|
+
<operation name="validateTransaction">
|
375
|
+
<soap:operation soapAction="http://api.daisycon.com/advertiser/soap//transaction/#validateTransaction" />
|
376
|
+
<input>
|
377
|
+
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://api.daisycon.com/advertiser/soap//transaction/" />
|
378
|
+
</input>
|
379
|
+
<output>
|
380
|
+
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://api.daisycon.com/advertiser/soap//transaction/" />
|
381
|
+
</output>
|
382
|
+
</operation>
|
383
|
+
</binding>
|
384
|
+
<service name="transactionService">
|
385
|
+
<port name="transactionPort" binding="tns:transactionBinding">
|
386
|
+
<soap:address location="http://api.daisycon.com/advertiser/soap//transaction/" />
|
387
|
+
</port>
|
388
|
+
</service>
|
389
|
+
<message name="getTransactionsIn">
|
390
|
+
<part name="filter" type="tns:transactionsFilter" />
|
391
|
+
</message>
|
392
|
+
<message name="getTransactionsOut">
|
393
|
+
<part name="return" type="tns:ArrayOfTransaction" />
|
394
|
+
<part name="responseInfo" type="tns:responseInfo" />
|
395
|
+
</message>
|
396
|
+
<message name="validateTransactionIn">
|
397
|
+
<part name="transactions" type="tns:ArrayOfValidate_transaction" />
|
398
|
+
</message>
|
399
|
+
<message name="validateTransactionOut">
|
400
|
+
<part name="return" type="tns:validatedTransactionReturn" />
|
401
|
+
<part name="responseInfo" type="tns:responseInfo" />
|
402
|
+
</message>
|
403
|
+
</definitions>
|
@@ -26,7 +26,7 @@ describe Sekken::Operation do
|
|
26
26
|
client.operation(service, port, 'VatAccount_UpdateFromDataArray')
|
27
27
|
}
|
28
28
|
|
29
|
-
let(:zanox_export_service){
|
29
|
+
let(:zanox_export_service){
|
30
30
|
client = Sekken.new fixture('wsdl/zanox_export_service')
|
31
31
|
|
32
32
|
service, port = "ExportService", "ExportServiceSoap"
|
@@ -35,6 +35,34 @@ describe Sekken::Operation do
|
|
35
35
|
}
|
36
36
|
|
37
37
|
describe '#build' do
|
38
|
+
describe 'multiple calls' do
|
39
|
+
let(:body) do
|
40
|
+
{
|
41
|
+
addLogins: {
|
42
|
+
accounts: [
|
43
|
+
{
|
44
|
+
username: 'first',
|
45
|
+
password: 'secret',
|
46
|
+
contactInformation: {
|
47
|
+
email: 'first@example.com',
|
48
|
+
_type: 'any'
|
49
|
+
}
|
50
|
+
}
|
51
|
+
]
|
52
|
+
}
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'cached on next call' do
|
57
|
+
add_logins.body = body
|
58
|
+
|
59
|
+
first_call = add_logins.build
|
60
|
+
second_call = add_logins.build
|
61
|
+
|
62
|
+
expect(first_call).to eq(second_call)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
38
66
|
it 'expects Arrays of complex types as Arrays of Hashes' do
|
39
67
|
add_logins.body = {
|
40
68
|
addLogins: {
|
@@ -46,7 +74,7 @@ describe Sekken::Operation do
|
|
46
74
|
username: 'first',
|
47
75
|
password: 'secret',
|
48
76
|
contactInformation: {
|
49
|
-
email: 'first@example.com'
|
77
|
+
email: 'first@example.com'
|
50
78
|
}
|
51
79
|
},
|
52
80
|
{
|
@@ -187,7 +215,7 @@ describe Sekken::Operation do
|
|
187
215
|
to raise_error(ArgumentError, "Expected an Array of values for the :betId simple type")
|
188
216
|
end
|
189
217
|
|
190
|
-
it '
|
218
|
+
it 'expects elements of Hashes containing attributes and key with same to return corresponding xml with attributes and text inside' do
|
191
219
|
zanox_export_service.header = {
|
192
220
|
zanox: {
|
193
221
|
ticket: 'EFB745D691DBFF2DFA9F8B10A4D7A7B1AEA850CD'
|
@@ -198,7 +226,7 @@ describe Sekken::Operation do
|
|
198
226
|
programid: 5574,
|
199
227
|
ppsfilter: {
|
200
228
|
period: {
|
201
|
-
:_from => '2013-10-01T00:00:00+02:00',
|
229
|
+
:_from => '2013-10-01T00:00:00+02:00',
|
202
230
|
:_to => '2013-11-12T00:00:00+02:00'
|
203
231
|
},
|
204
232
|
:reviewstate => {reviewstate: 0, :_negate => 1},
|
@@ -227,7 +255,7 @@ describe Sekken::Operation do
|
|
227
255
|
</env:Envelope>})
|
228
256
|
|
229
257
|
expect(Nokogiri.XML zanox_export_service.build).
|
230
|
-
to be_equivalent_to(expected).respecting_element_order
|
258
|
+
to be_equivalent_to(expected).respecting_element_order
|
231
259
|
end
|
232
260
|
|
233
261
|
it 'expects Array of Hashes with attributes to return Array of complex types with attributes' do
|
@@ -303,6 +331,47 @@ describe Sekken::Operation do
|
|
303
331
|
expect(Nokogiri.XML vatAccount_update_from_data_array.build).
|
304
332
|
to be_equivalent_to(expected).respecting_element_order
|
305
333
|
end
|
334
|
+
|
335
|
+
# TODO: Finish me
|
336
|
+
|
337
|
+
# let(:test_body) do
|
338
|
+
# client = Savon.new fixture('wsdl/daisycon.wsdl')
|
339
|
+
|
340
|
+
# service, port = "transactionService", "transactionPort"
|
341
|
+
|
342
|
+
# client.operation(service, port, 'validateTransaction')
|
343
|
+
# end
|
344
|
+
# it 'test' do
|
345
|
+
# test_body.body = {
|
346
|
+
# transactions: {
|
347
|
+
# "validate_transaction" => {
|
348
|
+
# "program_id" => 5623,
|
349
|
+
# "affiliatemarketing_id" => "WQACE273RVA8YF49YQ",
|
350
|
+
# "status" => "disapproved",
|
351
|
+
# "disapprove_reason" => "testorder"
|
352
|
+
# }
|
353
|
+
# }
|
354
|
+
# }
|
355
|
+
|
356
|
+
# expected = Nokogiri.XML(%{
|
357
|
+
# <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://api.daisycon.com/advertiser/soap//transaction/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
|
358
|
+
# <env:Body>
|
359
|
+
# <tns:validateTransaction>
|
360
|
+
# <transactions>
|
361
|
+
# <validate_transaction>
|
362
|
+
# <program_id>5623</program_id>
|
363
|
+
# <affiliatemarketing_id>WQACE273RVA8YF49YQ</affiliatemarketing_id>
|
364
|
+
# <status>disapproved</status>
|
365
|
+
# <disapprove_reason>testorder</disapprove_reason>
|
366
|
+
# </validate_transaction>
|
367
|
+
# </transactions>
|
368
|
+
# </tns:validateTransaction>
|
369
|
+
# </env:Body>
|
370
|
+
# </env:Envelope>
|
371
|
+
# })
|
372
|
+
|
373
|
+
# expect( Nokogiri.XML test_body.build ).to be_equivalent_to(expected).respecting_element_order
|
374
|
+
# end
|
306
375
|
end
|
307
376
|
|
308
377
|
end
|
@@ -54,8 +54,7 @@ describe Sekken::Operation do
|
|
54
54
|
describe '#http_headers' do
|
55
55
|
it 'returns a Hash of HTTP headers for a SOAP 1.2 operation' do
|
56
56
|
expect(operation.http_headers).to eq(
|
57
|
-
'
|
58
|
-
'Content-Type' => 'application/soap+xml;charset=UTF-8'
|
57
|
+
'Content-Type' => 'application/soap+xml;charset=UTF-8;action="http://www.webserviceX.NET/ConvertTemp"'
|
59
58
|
)
|
60
59
|
end
|
61
60
|
|
@@ -96,6 +96,42 @@ describe Sekken::XS::ComplexType do
|
|
96
96
|
expect(complex_type.collect_child_elements).to eq(all_elements)
|
97
97
|
end
|
98
98
|
|
99
|
+
specify 'complexType/simpleContent (plus annotations)' do
|
100
|
+
base_type = new_complex_type('
|
101
|
+
<complexType name="baseObject">
|
102
|
+
<sequence>
|
103
|
+
<element minOccurs="0" maxOccurs="unbounded" name="ExemptState" nillable="true" type="tns:ExemptState" />
|
104
|
+
</sequence>
|
105
|
+
</complexType>
|
106
|
+
')
|
107
|
+
schemas = mock('schemas')
|
108
|
+
schemas.expects(:complex_type).with('http://example.com/ons', 'baseObject').returns(base_type)
|
109
|
+
|
110
|
+
complex_type = new_complex_type('
|
111
|
+
<complexType name="Account" xmlns="http://www.w3.org/2001/XMLSchema"
|
112
|
+
xmlns:ons="http://example.com/ons"
|
113
|
+
xmlns:ens="http://example.com/ens">
|
114
|
+
<xs:annotation>
|
115
|
+
<xs:documentation>
|
116
|
+
Basic type for specifying measures and the system of measurement.
|
117
|
+
</xs:documentation>
|
118
|
+
</xs:annotation>
|
119
|
+
|
120
|
+
<complexContent>
|
121
|
+
<extension base="ons:baseObject">
|
122
|
+
<sequence>
|
123
|
+
<element minOccurs="0" name="The Child Element" nillable="true" type="string" />
|
124
|
+
</sequence>
|
125
|
+
</extension>
|
126
|
+
</complexContent>
|
127
|
+
</complexType>
|
128
|
+
', schemas)
|
129
|
+
|
130
|
+
children = complex_type.collect_child_elements
|
131
|
+
expect(children.size).to eq(2)
|
132
|
+
expect(children[1].name).to eq('The Child Element')
|
133
|
+
end
|
134
|
+
|
99
135
|
specify 'complexType/simpleContent/attribute (plus annotations)' do
|
100
136
|
complex_type = new_complex_type('
|
101
137
|
<xs:complexType name="MeasureType">
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sekken
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Harrington
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-05-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nori
|
@@ -146,6 +146,7 @@ files:
|
|
146
146
|
- .gitignore
|
147
147
|
- .travis.yml
|
148
148
|
- .yardopts
|
149
|
+
- CHANGELOG.md
|
149
150
|
- CONTRIBUTING.md
|
150
151
|
- Gemfile
|
151
152
|
- MIT-LICENSE
|
@@ -228,6 +229,7 @@ files:
|
|
228
229
|
- spec/fixtures/wsdl/bydexchange/bydexchange7.xsd
|
229
230
|
- spec/fixtures/wsdl/bydexchange/bydexchange8.xsd
|
230
231
|
- spec/fixtures/wsdl/crowd.wsdl
|
232
|
+
- spec/fixtures/wsdl/daisycon.wsdl
|
231
233
|
- spec/fixtures/wsdl/data_exchange.wsdl
|
232
234
|
- spec/fixtures/wsdl/document_literal_wrapped.wsdl
|
233
235
|
- spec/fixtures/wsdl/economic.wsdl
|