sekken 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|
-
[](https://www.gittip.com/
|
26
|
+
[](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
|