Avatax_AddressService 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "Avatax_AddressService"
3
+ s.version = "1.0.1"
4
+ s.date = "2012-10-28"
5
+ s.author = "Graham S Wilson"
6
+ s.email = "support@Avalara.com"
7
+ s.summary = "Ruby SDK for Avatax Address Web Services"
8
+ s.homepage = "http://www.avalara.com/"
9
+ s.description = "Ruby SDK provides means of communication with Avatax Web Services."
10
+ s.files = ["lib/address_log.txt", "lib/addressservice_dev.wsdl", "lib/addressservice_prd.wsdl", "lib/avatax_addressservice.rb",
11
+ "lib/template_validate.erb","lib/template_ping.erb","lib/template_isauthorized.erb",
12
+ "lib/xpath_validate.txt", "lib/xpath_ping.txt","lib/xpath_isauthorized.txt","test/test_address.rb",
13
+ "Avatax_AddressService.gemspec", "Avatax Ruby SDK Guide.docx", "LICENSE.txt"]
14
+ s.add_dependency "nokogiri", ">= 1.4.0", "< 1.6"
15
+ s.add_dependency "savon", ">= 2.3.0"
16
+ s.required_ruby_version = '>=1.9.3'
17
+ s.post_install_message = 'Thanks for installing the Avalara AddressService Ruby SDK. Refer to "Avatax Ruby SDK User Guide.docx" to get started.'
18
+ end
19
+
@@ -0,0 +1,21 @@
1
+ Ruby SDK for AvaTax [License]
2
+ Copyright (c) 2013 Avalara Inc.
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,290 @@
1
+ <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://avatax.avalara.com/services" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://avatax.avalara.com/services">
2
+ <wsdl:types>
3
+ <s:schema elementFormDefault="qualified" targetNamespace="http://avatax.avalara.com/services">
4
+ <s:element name="Validate">
5
+ <s:complexType>
6
+ <s:sequence>
7
+ <s:element minOccurs="0" maxOccurs="1" name="ValidateRequest" type="tns:ValidateRequest"/>
8
+ </s:sequence>
9
+ </s:complexType>
10
+ </s:element>
11
+ <s:complexType name="ValidateRequest">
12
+ <s:sequence>
13
+ <s:element minOccurs="0" maxOccurs="1" name="Address" type="tns:BaseAddress"/>
14
+ <s:element minOccurs="1" maxOccurs="1" name="TextCase" type="tns:TextCase"/>
15
+ <s:element minOccurs="1" maxOccurs="1" name="Coordinates" type="s:boolean"/>
16
+ <s:element minOccurs="1" maxOccurs="1" name="Taxability" type="s:boolean"/>
17
+ <s:element minOccurs="1" maxOccurs="1" name="Date" type="s:date"/>
18
+ </s:sequence>
19
+ </s:complexType>
20
+ <s:complexType name="BaseAddress">
21
+ <s:sequence>
22
+ <s:element minOccurs="0" maxOccurs="1" name="AddressCode" type="s:string"/>
23
+ <s:element minOccurs="0" maxOccurs="1" name="Line1" type="s:string"/>
24
+ <s:element minOccurs="0" maxOccurs="1" name="Line2" type="s:string"/>
25
+ <s:element minOccurs="0" maxOccurs="1" name="Line3" type="s:string"/>
26
+ <s:element minOccurs="0" maxOccurs="1" name="City" type="s:string"/>
27
+ <s:element minOccurs="0" maxOccurs="1" name="Region" type="s:string"/>
28
+ <s:element minOccurs="0" maxOccurs="1" name="PostalCode" type="s:string"/>
29
+ <s:element minOccurs="0" maxOccurs="1" name="Country" type="s:string"/>
30
+ <s:element minOccurs="1" maxOccurs="1" name="TaxRegionId" type="s:int"/>
31
+ <s:element minOccurs="0" maxOccurs="1" name="Latitude" type="s:string"/>
32
+ <s:element minOccurs="0" maxOccurs="1" name="Longitude" type="s:string"/>
33
+ </s:sequence>
34
+ </s:complexType>
35
+ <s:complexType name="ValidAddress">
36
+ <s:complexContent mixed="false">
37
+ <s:extension base="tns:BaseAddress">
38
+ <s:sequence>
39
+ <s:element minOccurs="0" maxOccurs="1" name="Line4" type="s:string"/>
40
+ <s:element minOccurs="0" maxOccurs="1" name="County" type="s:string"/>
41
+ <s:element minOccurs="0" maxOccurs="1" name="FipsCode" type="s:string"/>
42
+ <s:element minOccurs="0" maxOccurs="1" name="CarrierRoute" type="s:string"/>
43
+ <s:element minOccurs="0" maxOccurs="1" name="PostNet" type="s:string"/>
44
+ <s:element minOccurs="0" maxOccurs="1" name="AddressType" type="s:string"/>
45
+ <s:element minOccurs="0" maxOccurs="1" name="ValidateStatus" type="s:string"/>
46
+ <s:element minOccurs="0" maxOccurs="1" name="GeocodeType" type="s:string"/>
47
+ </s:sequence>
48
+ </s:extension>
49
+ </s:complexContent>
50
+ </s:complexType>
51
+ <s:simpleType name="TextCase">
52
+ <s:restriction base="s:string">
53
+ <s:enumeration value="Default"/>
54
+ <s:enumeration value="Upper"/>
55
+ <s:enumeration value="Mixed"/>
56
+ </s:restriction>
57
+ </s:simpleType>
58
+ <s:element name="ValidateResponse">
59
+ <s:complexType>
60
+ <s:sequence>
61
+ <s:element minOccurs="0" maxOccurs="1" name="ValidateResult" type="tns:ValidateResult"/>
62
+ </s:sequence>
63
+ </s:complexType>
64
+ </s:element>
65
+ <s:complexType name="ValidateResult">
66
+ <s:complexContent mixed="false">
67
+ <s:extension base="tns:BaseResult">
68
+ <s:sequence>
69
+ <s:element minOccurs="0" maxOccurs="1" name="ValidAddresses" type="tns:ArrayOfValidAddress"/>
70
+ <s:element minOccurs="1" maxOccurs="1" name="Taxable" type="s:boolean"/>
71
+ </s:sequence>
72
+ </s:extension>
73
+ </s:complexContent>
74
+ </s:complexType>
75
+ <s:complexType name="BaseResult">
76
+ <s:sequence>
77
+ <s:element minOccurs="0" maxOccurs="1" name="TransactionId" type="s:string"/>
78
+ <s:element minOccurs="1" maxOccurs="1" name="ResultCode" type="tns:SeverityLevel"/>
79
+ <s:element minOccurs="0" maxOccurs="1" name="Messages" type="tns:ArrayOfMessage"/>
80
+ </s:sequence>
81
+ </s:complexType>
82
+ <s:simpleType name="SeverityLevel">
83
+ <s:restriction base="s:string">
84
+ <s:enumeration value="Success"/>
85
+ <s:enumeration value="Warning"/>
86
+ <s:enumeration value="Error"/>
87
+ <s:enumeration value="Exception"/>
88
+ </s:restriction>
89
+ </s:simpleType>
90
+ <s:complexType name="ArrayOfMessage">
91
+ <s:sequence>
92
+ <s:element minOccurs="0" maxOccurs="unbounded" name="Message" nillable="true" type="tns:Message"/>
93
+ </s:sequence>
94
+ </s:complexType>
95
+ <s:complexType name="Message">
96
+ <s:sequence>
97
+ <s:element minOccurs="0" maxOccurs="1" name="Summary" type="s:string"/>
98
+ <s:element minOccurs="0" maxOccurs="1" name="Details" type="s:string"/>
99
+ <s:element minOccurs="0" maxOccurs="1" name="HelpLink" type="s:string"/>
100
+ <s:element minOccurs="0" maxOccurs="1" name="RefersTo" type="s:string"/>
101
+ <s:element minOccurs="1" maxOccurs="1" name="Severity" type="tns:SeverityLevel"/>
102
+ <s:element minOccurs="0" maxOccurs="1" name="Source" type="s:string"/>
103
+ </s:sequence>
104
+ <s:attribute name="Name" type="s:string"/>
105
+ </s:complexType>
106
+ <s:complexType name="ArrayOfValidAddress">
107
+ <s:sequence>
108
+ <s:element minOccurs="0" maxOccurs="unbounded" name="ValidAddress" nillable="true" type="tns:ValidAddress"/>
109
+ </s:sequence>
110
+ </s:complexType>
111
+ <s:element name="Profile" type="tns:Profile"/>
112
+ <s:complexType name="Profile">
113
+ <s:sequence>
114
+ <s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string"/>
115
+ <s:element minOccurs="0" maxOccurs="1" name="Client" type="s:string"/>
116
+ <s:element minOccurs="0" maxOccurs="1" name="Adapter" type="s:string"/>
117
+ <s:element minOccurs="0" maxOccurs="1" name="Machine" type="s:string"/>
118
+ </s:sequence>
119
+ <s:anyAttribute/>
120
+ </s:complexType>
121
+ <s:element name="Ping">
122
+ <s:complexType>
123
+ <s:sequence>
124
+ <s:element minOccurs="0" maxOccurs="1" name="Message" type="s:string"/>
125
+ </s:sequence>
126
+ </s:complexType>
127
+ </s:element>
128
+ <s:element name="PingResponse">
129
+ <s:complexType>
130
+ <s:sequence>
131
+ <s:element minOccurs="0" maxOccurs="1" name="PingResult" type="tns:PingResult"/>
132
+ </s:sequence>
133
+ </s:complexType>
134
+ </s:element>
135
+ <s:complexType name="PingResult">
136
+ <s:complexContent mixed="false">
137
+ <s:extension base="tns:BaseResult">
138
+ <s:sequence>
139
+ <s:element minOccurs="0" maxOccurs="1" name="Version" type="s:string"/>
140
+ </s:sequence>
141
+ </s:extension>
142
+ </s:complexContent>
143
+ </s:complexType>
144
+ <s:element name="IsAuthorized">
145
+ <s:complexType>
146
+ <s:sequence>
147
+ <s:element minOccurs="0" maxOccurs="1" name="Operations" type="s:string"/>
148
+ </s:sequence>
149
+ </s:complexType>
150
+ </s:element>
151
+ <s:element name="IsAuthorizedResponse">
152
+ <s:complexType>
153
+ <s:sequence>
154
+ <s:element minOccurs="0" maxOccurs="1" name="IsAuthorizedResult" type="tns:IsAuthorizedResult"/>
155
+ </s:sequence>
156
+ </s:complexType>
157
+ </s:element>
158
+ <s:complexType name="IsAuthorizedResult">
159
+ <s:complexContent mixed="false">
160
+ <s:extension base="tns:BaseResult">
161
+ <s:sequence>
162
+ <s:element minOccurs="0" maxOccurs="1" name="Operations" type="s:string"/>
163
+ <s:element minOccurs="1" maxOccurs="1" name="Expires" type="s:dateTime"/>
164
+ </s:sequence>
165
+ </s:extension>
166
+ </s:complexContent>
167
+ </s:complexType>
168
+ </s:schema>
169
+ </wsdl:types>
170
+ <wsdl:message name="ValidateSoapIn">
171
+ <wsdl:part name="parameters" element="tns:Validate"/>
172
+ </wsdl:message>
173
+ <wsdl:message name="ValidateSoapOut">
174
+ <wsdl:part name="parameters" element="tns:ValidateResponse"/>
175
+ </wsdl:message>
176
+ <wsdl:message name="ValidateProfile">
177
+ <wsdl:part name="Profile" element="tns:Profile"/>
178
+ </wsdl:message>
179
+ <wsdl:message name="PingSoapIn">
180
+ <wsdl:part name="parameters" element="tns:Ping"/>
181
+ </wsdl:message>
182
+ <wsdl:message name="PingSoapOut">
183
+ <wsdl:part name="parameters" element="tns:PingResponse"/>
184
+ </wsdl:message>
185
+ <wsdl:message name="PingProfile">
186
+ <wsdl:part name="Profile" element="tns:Profile"/>
187
+ </wsdl:message>
188
+ <wsdl:message name="IsAuthorizedSoapIn">
189
+ <wsdl:part name="parameters" element="tns:IsAuthorized"/>
190
+ </wsdl:message>
191
+ <wsdl:message name="IsAuthorizedSoapOut">
192
+ <wsdl:part name="parameters" element="tns:IsAuthorizedResponse"/>
193
+ </wsdl:message>
194
+ <wsdl:message name="IsAuthorizedProfile">
195
+ <wsdl:part name="Profile" element="tns:Profile"/>
196
+ </wsdl:message>
197
+ <wsdl:portType name="AddressSvcSoap">
198
+ <wsdl:operation name="Validate">
199
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Validate an Address</wsdl:documentation>
200
+ <wsdl:input message="tns:ValidateSoapIn"/>
201
+ <wsdl:output message="tns:ValidateSoapOut"/>
202
+ </wsdl:operation>
203
+ <wsdl:operation name="Ping">
204
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Tests connectivity and version of the service</wsdl:documentation>
205
+ <wsdl:input message="tns:PingSoapIn"/>
206
+ <wsdl:output message="tns:PingSoapOut"/>
207
+ </wsdl:operation>
208
+ <wsdl:operation name="IsAuthorized">
209
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
210
+ Checks authentication and authorization to one or more operations on the service.
211
+ </wsdl:documentation>
212
+ <wsdl:input message="tns:IsAuthorizedSoapIn"/>
213
+ <wsdl:output message="tns:IsAuthorizedSoapOut"/>
214
+ </wsdl:operation>
215
+ </wsdl:portType>
216
+ <wsdl:binding name="AddressSvcSoap" type="tns:AddressSvcSoap">
217
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
218
+ <wsdl:operation name="Validate">
219
+ <soap:operation soapAction="http://avatax.avalara.com/services/Validate" style="document"/>
220
+ <wsdl:input>
221
+ <soap:body use="literal"/>
222
+ <soap:header message="tns:ValidateProfile" part="Profile" use="literal"/>
223
+ </wsdl:input>
224
+ <wsdl:output>
225
+ <soap:body use="literal"/>
226
+ </wsdl:output>
227
+ </wsdl:operation>
228
+ <wsdl:operation name="Ping">
229
+ <soap:operation soapAction="http://avatax.avalara.com/services/Ping" style="document"/>
230
+ <wsdl:input>
231
+ <soap:body use="literal"/>
232
+ <soap:header message="tns:PingProfile" part="Profile" use="literal"/>
233
+ </wsdl:input>
234
+ <wsdl:output>
235
+ <soap:body use="literal"/>
236
+ </wsdl:output>
237
+ </wsdl:operation>
238
+ <wsdl:operation name="IsAuthorized">
239
+ <soap:operation soapAction="http://avatax.avalara.com/services/IsAuthorized" style="document"/>
240
+ <wsdl:input>
241
+ <soap:body use="literal"/>
242
+ <soap:header message="tns:IsAuthorizedProfile" part="Profile" use="literal"/>
243
+ </wsdl:input>
244
+ <wsdl:output>
245
+ <soap:body use="literal"/>
246
+ </wsdl:output>
247
+ </wsdl:operation>
248
+ </wsdl:binding>
249
+ <wsdl:binding name="AddressSvcSoap12" type="tns:AddressSvcSoap">
250
+ <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
251
+ <wsdl:operation name="Validate">
252
+ <soap12:operation soapAction="http://avatax.avalara.com/services/Validate" style="document"/>
253
+ <wsdl:input>
254
+ <soap12:body use="literal"/>
255
+ <soap12:header message="tns:ValidateProfile" part="Profile" use="literal"/>
256
+ </wsdl:input>
257
+ <wsdl:output>
258
+ <soap12:body use="literal"/>
259
+ </wsdl:output>
260
+ </wsdl:operation>
261
+ <wsdl:operation name="Ping">
262
+ <soap12:operation soapAction="http://avatax.avalara.com/services/Ping" style="document"/>
263
+ <wsdl:input>
264
+ <soap12:body use="literal"/>
265
+ <soap12:header message="tns:PingProfile" part="Profile" use="literal"/>
266
+ </wsdl:input>
267
+ <wsdl:output>
268
+ <soap12:body use="literal"/>
269
+ </wsdl:output>
270
+ </wsdl:operation>
271
+ <wsdl:operation name="IsAuthorized">
272
+ <soap12:operation soapAction="http://avatax.avalara.com/services/IsAuthorized" style="document"/>
273
+ <wsdl:input>
274
+ <soap12:body use="literal"/>
275
+ <soap12:header message="tns:IsAuthorizedProfile" part="Profile" use="literal"/>
276
+ </wsdl:input>
277
+ <wsdl:output>
278
+ <soap12:body use="literal"/>
279
+ </wsdl:output>
280
+ </wsdl:operation>
281
+ </wsdl:binding>
282
+ <wsdl:service name="AddressSvc">
283
+ <wsdl:port name="AddressSvcSoap" binding="tns:AddressSvcSoap">
284
+ <soap:address location="https://development.avalara.net/Address/AddressSvc.asmx"/>
285
+ </wsdl:port>
286
+ <wsdl:port name="AddressSvcSoap12" binding="tns:AddressSvcSoap12">
287
+ <soap12:address location="https://development.avalara.net/Address/AddressSvc.asmx"/>
288
+ </wsdl:port>
289
+ </wsdl:service>
290
+ </wsdl:definitions>
@@ -0,0 +1,290 @@
1
+ <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://avatax.avalara.com/services" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://avatax.avalara.com/services">
2
+ <wsdl:types>
3
+ <s:schema elementFormDefault="qualified" targetNamespace="http://avatax.avalara.com/services">
4
+ <s:element name="Validate">
5
+ <s:complexType>
6
+ <s:sequence>
7
+ <s:element minOccurs="0" maxOccurs="1" name="ValidateRequest" type="tns:ValidateRequest"/>
8
+ </s:sequence>
9
+ </s:complexType>
10
+ </s:element>
11
+ <s:complexType name="ValidateRequest">
12
+ <s:sequence>
13
+ <s:element minOccurs="0" maxOccurs="1" name="Address" type="tns:BaseAddress"/>
14
+ <s:element minOccurs="1" maxOccurs="1" name="TextCase" type="tns:TextCase"/>
15
+ <s:element minOccurs="1" maxOccurs="1" name="Coordinates" type="s:boolean"/>
16
+ <s:element minOccurs="1" maxOccurs="1" name="Taxability" type="s:boolean"/>
17
+ <s:element minOccurs="1" maxOccurs="1" name="Date" type="s:date"/>
18
+ </s:sequence>
19
+ </s:complexType>
20
+ <s:complexType name="BaseAddress">
21
+ <s:sequence>
22
+ <s:element minOccurs="0" maxOccurs="1" name="AddressCode" type="s:string"/>
23
+ <s:element minOccurs="0" maxOccurs="1" name="Line1" type="s:string"/>
24
+ <s:element minOccurs="0" maxOccurs="1" name="Line2" type="s:string"/>
25
+ <s:element minOccurs="0" maxOccurs="1" name="Line3" type="s:string"/>
26
+ <s:element minOccurs="0" maxOccurs="1" name="City" type="s:string"/>
27
+ <s:element minOccurs="0" maxOccurs="1" name="Region" type="s:string"/>
28
+ <s:element minOccurs="0" maxOccurs="1" name="PostalCode" type="s:string"/>
29
+ <s:element minOccurs="0" maxOccurs="1" name="Country" type="s:string"/>
30
+ <s:element minOccurs="1" maxOccurs="1" name="TaxRegionId" type="s:int"/>
31
+ <s:element minOccurs="0" maxOccurs="1" name="Latitude" type="s:string"/>
32
+ <s:element minOccurs="0" maxOccurs="1" name="Longitude" type="s:string"/>
33
+ </s:sequence>
34
+ </s:complexType>
35
+ <s:complexType name="ValidAddress">
36
+ <s:complexContent mixed="false">
37
+ <s:extension base="tns:BaseAddress">
38
+ <s:sequence>
39
+ <s:element minOccurs="0" maxOccurs="1" name="Line4" type="s:string"/>
40
+ <s:element minOccurs="0" maxOccurs="1" name="County" type="s:string"/>
41
+ <s:element minOccurs="0" maxOccurs="1" name="FipsCode" type="s:string"/>
42
+ <s:element minOccurs="0" maxOccurs="1" name="CarrierRoute" type="s:string"/>
43
+ <s:element minOccurs="0" maxOccurs="1" name="PostNet" type="s:string"/>
44
+ <s:element minOccurs="0" maxOccurs="1" name="AddressType" type="s:string"/>
45
+ <s:element minOccurs="0" maxOccurs="1" name="ValidateStatus" type="s:string"/>
46
+ <s:element minOccurs="0" maxOccurs="1" name="GeocodeType" type="s:string"/>
47
+ </s:sequence>
48
+ </s:extension>
49
+ </s:complexContent>
50
+ </s:complexType>
51
+ <s:simpleType name="TextCase">
52
+ <s:restriction base="s:string">
53
+ <s:enumeration value="Default"/>
54
+ <s:enumeration value="Upper"/>
55
+ <s:enumeration value="Mixed"/>
56
+ </s:restriction>
57
+ </s:simpleType>
58
+ <s:element name="ValidateResponse">
59
+ <s:complexType>
60
+ <s:sequence>
61
+ <s:element minOccurs="0" maxOccurs="1" name="ValidateResult" type="tns:ValidateResult"/>
62
+ </s:sequence>
63
+ </s:complexType>
64
+ </s:element>
65
+ <s:complexType name="ValidateResult">
66
+ <s:complexContent mixed="false">
67
+ <s:extension base="tns:BaseResult">
68
+ <s:sequence>
69
+ <s:element minOccurs="0" maxOccurs="1" name="ValidAddresses" type="tns:ArrayOfValidAddress"/>
70
+ <s:element minOccurs="1" maxOccurs="1" name="Taxable" type="s:boolean"/>
71
+ </s:sequence>
72
+ </s:extension>
73
+ </s:complexContent>
74
+ </s:complexType>
75
+ <s:complexType name="BaseResult">
76
+ <s:sequence>
77
+ <s:element minOccurs="0" maxOccurs="1" name="TransactionId" type="s:string"/>
78
+ <s:element minOccurs="1" maxOccurs="1" name="ResultCode" type="tns:SeverityLevel"/>
79
+ <s:element minOccurs="0" maxOccurs="1" name="Messages" type="tns:ArrayOfMessage"/>
80
+ </s:sequence>
81
+ </s:complexType>
82
+ <s:simpleType name="SeverityLevel">
83
+ <s:restriction base="s:string">
84
+ <s:enumeration value="Success"/>
85
+ <s:enumeration value="Warning"/>
86
+ <s:enumeration value="Error"/>
87
+ <s:enumeration value="Exception"/>
88
+ </s:restriction>
89
+ </s:simpleType>
90
+ <s:complexType name="ArrayOfMessage">
91
+ <s:sequence>
92
+ <s:element minOccurs="0" maxOccurs="unbounded" name="Message" nillable="true" type="tns:Message"/>
93
+ </s:sequence>
94
+ </s:complexType>
95
+ <s:complexType name="Message">
96
+ <s:sequence>
97
+ <s:element minOccurs="0" maxOccurs="1" name="Summary" type="s:string"/>
98
+ <s:element minOccurs="0" maxOccurs="1" name="Details" type="s:string"/>
99
+ <s:element minOccurs="0" maxOccurs="1" name="HelpLink" type="s:string"/>
100
+ <s:element minOccurs="0" maxOccurs="1" name="RefersTo" type="s:string"/>
101
+ <s:element minOccurs="1" maxOccurs="1" name="Severity" type="tns:SeverityLevel"/>
102
+ <s:element minOccurs="0" maxOccurs="1" name="Source" type="s:string"/>
103
+ </s:sequence>
104
+ <s:attribute name="Name" type="s:string"/>
105
+ </s:complexType>
106
+ <s:complexType name="ArrayOfValidAddress">
107
+ <s:sequence>
108
+ <s:element minOccurs="0" maxOccurs="unbounded" name="ValidAddress" nillable="true" type="tns:ValidAddress"/>
109
+ </s:sequence>
110
+ </s:complexType>
111
+ <s:element name="Profile" type="tns:Profile"/>
112
+ <s:complexType name="Profile">
113
+ <s:sequence>
114
+ <s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string"/>
115
+ <s:element minOccurs="0" maxOccurs="1" name="Client" type="s:string"/>
116
+ <s:element minOccurs="0" maxOccurs="1" name="Adapter" type="s:string"/>
117
+ <s:element minOccurs="0" maxOccurs="1" name="Machine" type="s:string"/>
118
+ </s:sequence>
119
+ <s:anyAttribute/>
120
+ </s:complexType>
121
+ <s:element name="Ping">
122
+ <s:complexType>
123
+ <s:sequence>
124
+ <s:element minOccurs="0" maxOccurs="1" name="Message" type="s:string"/>
125
+ </s:sequence>
126
+ </s:complexType>
127
+ </s:element>
128
+ <s:element name="PingResponse">
129
+ <s:complexType>
130
+ <s:sequence>
131
+ <s:element minOccurs="0" maxOccurs="1" name="PingResult" type="tns:PingResult"/>
132
+ </s:sequence>
133
+ </s:complexType>
134
+ </s:element>
135
+ <s:complexType name="PingResult">
136
+ <s:complexContent mixed="false">
137
+ <s:extension base="tns:BaseResult">
138
+ <s:sequence>
139
+ <s:element minOccurs="0" maxOccurs="1" name="Version" type="s:string"/>
140
+ </s:sequence>
141
+ </s:extension>
142
+ </s:complexContent>
143
+ </s:complexType>
144
+ <s:element name="IsAuthorized">
145
+ <s:complexType>
146
+ <s:sequence>
147
+ <s:element minOccurs="0" maxOccurs="1" name="Operations" type="s:string"/>
148
+ </s:sequence>
149
+ </s:complexType>
150
+ </s:element>
151
+ <s:element name="IsAuthorizedResponse">
152
+ <s:complexType>
153
+ <s:sequence>
154
+ <s:element minOccurs="0" maxOccurs="1" name="IsAuthorizedResult" type="tns:IsAuthorizedResult"/>
155
+ </s:sequence>
156
+ </s:complexType>
157
+ </s:element>
158
+ <s:complexType name="IsAuthorizedResult">
159
+ <s:complexContent mixed="false">
160
+ <s:extension base="tns:BaseResult">
161
+ <s:sequence>
162
+ <s:element minOccurs="0" maxOccurs="1" name="Operations" type="s:string"/>
163
+ <s:element minOccurs="1" maxOccurs="1" name="Expires" type="s:dateTime"/>
164
+ </s:sequence>
165
+ </s:extension>
166
+ </s:complexContent>
167
+ </s:complexType>
168
+ </s:schema>
169
+ </wsdl:types>
170
+ <wsdl:message name="ValidateSoapIn">
171
+ <wsdl:part name="parameters" element="tns:Validate"/>
172
+ </wsdl:message>
173
+ <wsdl:message name="ValidateSoapOut">
174
+ <wsdl:part name="parameters" element="tns:ValidateResponse"/>
175
+ </wsdl:message>
176
+ <wsdl:message name="ValidateProfile">
177
+ <wsdl:part name="Profile" element="tns:Profile"/>
178
+ </wsdl:message>
179
+ <wsdl:message name="PingSoapIn">
180
+ <wsdl:part name="parameters" element="tns:Ping"/>
181
+ </wsdl:message>
182
+ <wsdl:message name="PingSoapOut">
183
+ <wsdl:part name="parameters" element="tns:PingResponse"/>
184
+ </wsdl:message>
185
+ <wsdl:message name="PingProfile">
186
+ <wsdl:part name="Profile" element="tns:Profile"/>
187
+ </wsdl:message>
188
+ <wsdl:message name="IsAuthorizedSoapIn">
189
+ <wsdl:part name="parameters" element="tns:IsAuthorized"/>
190
+ </wsdl:message>
191
+ <wsdl:message name="IsAuthorizedSoapOut">
192
+ <wsdl:part name="parameters" element="tns:IsAuthorizedResponse"/>
193
+ </wsdl:message>
194
+ <wsdl:message name="IsAuthorizedProfile">
195
+ <wsdl:part name="Profile" element="tns:Profile"/>
196
+ </wsdl:message>
197
+ <wsdl:portType name="AddressSvcSoap">
198
+ <wsdl:operation name="Validate">
199
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Validate an Address</wsdl:documentation>
200
+ <wsdl:input message="tns:ValidateSoapIn"/>
201
+ <wsdl:output message="tns:ValidateSoapOut"/>
202
+ </wsdl:operation>
203
+ <wsdl:operation name="Ping">
204
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Tests connectivity and version of the service</wsdl:documentation>
205
+ <wsdl:input message="tns:PingSoapIn"/>
206
+ <wsdl:output message="tns:PingSoapOut"/>
207
+ </wsdl:operation>
208
+ <wsdl:operation name="IsAuthorized">
209
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
210
+ Checks authentication and authorization to one or more operations on the service.
211
+ </wsdl:documentation>
212
+ <wsdl:input message="tns:IsAuthorizedSoapIn"/>
213
+ <wsdl:output message="tns:IsAuthorizedSoapOut"/>
214
+ </wsdl:operation>
215
+ </wsdl:portType>
216
+ <wsdl:binding name="AddressSvcSoap" type="tns:AddressSvcSoap">
217
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
218
+ <wsdl:operation name="Validate">
219
+ <soap:operation soapAction="http://avatax.avalara.com/services/Validate" style="document"/>
220
+ <wsdl:input>
221
+ <soap:body use="literal"/>
222
+ <soap:header message="tns:ValidateProfile" part="Profile" use="literal"/>
223
+ </wsdl:input>
224
+ <wsdl:output>
225
+ <soap:body use="literal"/>
226
+ </wsdl:output>
227
+ </wsdl:operation>
228
+ <wsdl:operation name="Ping">
229
+ <soap:operation soapAction="http://avatax.avalara.com/services/Ping" style="document"/>
230
+ <wsdl:input>
231
+ <soap:body use="literal"/>
232
+ <soap:header message="tns:PingProfile" part="Profile" use="literal"/>
233
+ </wsdl:input>
234
+ <wsdl:output>
235
+ <soap:body use="literal"/>
236
+ </wsdl:output>
237
+ </wsdl:operation>
238
+ <wsdl:operation name="IsAuthorized">
239
+ <soap:operation soapAction="http://avatax.avalara.com/services/IsAuthorized" style="document"/>
240
+ <wsdl:input>
241
+ <soap:body use="literal"/>
242
+ <soap:header message="tns:IsAuthorizedProfile" part="Profile" use="literal"/>
243
+ </wsdl:input>
244
+ <wsdl:output>
245
+ <soap:body use="literal"/>
246
+ </wsdl:output>
247
+ </wsdl:operation>
248
+ </wsdl:binding>
249
+ <wsdl:binding name="AddressSvcSoap12" type="tns:AddressSvcSoap">
250
+ <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
251
+ <wsdl:operation name="Validate">
252
+ <soap12:operation soapAction="http://avatax.avalara.com/services/Validate" style="document"/>
253
+ <wsdl:input>
254
+ <soap12:body use="literal"/>
255
+ <soap12:header message="tns:ValidateProfile" part="Profile" use="literal"/>
256
+ </wsdl:input>
257
+ <wsdl:output>
258
+ <soap12:body use="literal"/>
259
+ </wsdl:output>
260
+ </wsdl:operation>
261
+ <wsdl:operation name="Ping">
262
+ <soap12:operation soapAction="http://avatax.avalara.com/services/Ping" style="document"/>
263
+ <wsdl:input>
264
+ <soap12:body use="literal"/>
265
+ <soap12:header message="tns:PingProfile" part="Profile" use="literal"/>
266
+ </wsdl:input>
267
+ <wsdl:output>
268
+ <soap12:body use="literal"/>
269
+ </wsdl:output>
270
+ </wsdl:operation>
271
+ <wsdl:operation name="IsAuthorized">
272
+ <soap12:operation soapAction="http://avatax.avalara.com/services/IsAuthorized" style="document"/>
273
+ <wsdl:input>
274
+ <soap12:body use="literal"/>
275
+ <soap12:header message="tns:IsAuthorizedProfile" part="Profile" use="literal"/>
276
+ </wsdl:input>
277
+ <wsdl:output>
278
+ <soap12:body use="literal"/>
279
+ </wsdl:output>
280
+ </wsdl:operation>
281
+ </wsdl:binding>
282
+ <wsdl:service name="AddressSvc">
283
+ <wsdl:port name="AddressSvcSoap" binding="tns:AddressSvcSoap">
284
+ <soap:address location="https://avatax.avalara.net/Address/AddressSvc.asmx"/>
285
+ </wsdl:port>
286
+ <wsdl:port name="AddressSvcSoap12" binding="tns:AddressSvcSoap12">
287
+ <soap12:address location="https://avatax.avalara.net/Address/AddressSvc.asmx"/>
288
+ </wsdl:port>
289
+ </wsdl:service>
290
+ </wsdl:definitions>
@@ -0,0 +1,178 @@
1
+ require 'savon'
2
+ require 'erb'
3
+ require 'nokogiri'
4
+
5
+ module AvaTax
6
+
7
+ #Avalara address class
8
+ class AddressService
9
+
10
+ def initialize(username,password,name,clientname,adapter,machine)
11
+
12
+ #Set credentials and Profile information
13
+ @username = username == nil ? "" : username
14
+ @password = password == nil ? "" : password
15
+ @name = name == nil ? "" : name
16
+ @clientname = clientname == nil ? "" : clientname
17
+ @adapter = adapter == nil ? "" : adapter
18
+ @machine = machine == nil ? "" : machine
19
+
20
+ #Set @def_locn to the Avatax-x.x.x gem install library. This enables the ruby programs to
21
+ #find other objects that it needs.
22
+ @def_locn = 'C:\Ruby193\lib\ruby\gems\1.9.1\gems\Avatax_AddressService-1.0.0\lib'
23
+
24
+ #Open Avatax Error Log
25
+ @log = File.new(@def_locn + '\address_log.txt', "w")
26
+ @log.puts "#{Time.now}: Address service started"
27
+
28
+ #log :false turns off HTTP logging
29
+ @client = Savon.client(wsdl: @def_locn + '/addressservice_dev.wsdl', log: false)
30
+
31
+ begin
32
+ #Read in the SOAP template for Ping
33
+ @template_ping = ERB.new(File.read(@def_locn + '\template_ping.erb'))
34
+ rescue
35
+ @log.puts "#{Time.now}: Error loading the Ping template"
36
+ end
37
+
38
+ begin
39
+ #Read in the SOAP template for Validate
40
+ @template_validate = ERB.new(File.read(@def_locn + '\template_validate.erb'))
41
+ rescue
42
+ @log.puts "#{Time.now}: Error loading the Validate template"
43
+ end
44
+
45
+ begin
46
+ #Read in the SOAP template for IsAuthorized
47
+ @template_isauthorized = ERB.new(File.read(@def_locn + '\template_isauthorized.erb'))
48
+ rescue
49
+ @log.puts "#{Time.now}: Error loading the IsAuthorized template"
50
+ end
51
+ # Create hash for validate result
52
+ @return_data = Hash.new
53
+ end
54
+
55
+ ############################################################################################################
56
+ # ping - Verifies connectivity to the web service and returns version information
57
+ ############################################################################################################
58
+ def ping(message = nil)
59
+ #Read in the SOAP template
60
+ @message = message == nil ? "?" : message
61
+
62
+ # Subsitute real vales for template place holders
63
+ @soap = @template_ping.result(binding)
64
+
65
+ #Clear return hash
66
+ @return_data.clear
67
+
68
+ # Make the call to the Avalara Ping service
69
+ begin
70
+ @response = @client.call(:ping, xml: @soap).to_s
71
+ rescue
72
+ @log.puts "#{Time.now}: Error calling Ping service ... check username and password"
73
+ end
74
+ # Load the response into a Nokogiri object and remove namespaces
75
+ @doc = Nokogiri::XML(@response).remove_namespaces!
76
+
77
+ #Read in an array of XPATH pointers
78
+ @ping_xpath = File.readlines(@def_locn + '\xpath_ping.txt')
79
+
80
+ #Read each array element, extract the result returned by the service and place in a the @return_data hash
81
+ @ping_xpath.each{|xpath| @return_data[xpath[2...xpath.length].chomp.to_sym] = @doc.xpath(xpath).text}
82
+
83
+ return @return_data
84
+ end
85
+
86
+ ############################################################################################################
87
+ # validate - call the adddress validation service
88
+ ############################################################################################################
89
+ def validate(addresscode = nil,
90
+ line1 = nil,
91
+ line2 = nil,
92
+ line3 = nil,
93
+ city = nil,
94
+ region = nil,
95
+ postalcode = nil,
96
+ country = nil,
97
+ taxregionid = nil,
98
+ latitude = nil,
99
+ longitude = nil,
100
+ textcase = nil,
101
+ coordinates = nil,
102
+ taxability = nil)
103
+
104
+ #Set parms passed by user - If Nil then default else use passed value
105
+ @addresscode = addresscode == nil ? "123" : addresscode
106
+ @line1 = line1 == nil ? "" : line1
107
+ @line2 = line2 == nil ? "" : line2
108
+ @line3 = line3 == nil ? "" : line3
109
+ @city = city == nil ? "" : city
110
+ @region = region == nil ? "" : region
111
+ @postalcode = postalcode == nil ? "" : postalcode
112
+ @country = country == nil ? "" : country
113
+ @taxregionid = taxregionid == nil ? "0" : taxregionid
114
+ @latitude = latitude == nil ? "" : latitude
115
+ @longitude = longitude == nil ? "" : longitude
116
+ @textcase = textcase == nil ? "Default" : textcase
117
+ @coordinates = coordinates == nil ? "true" : coordinates
118
+ @taxability = taxability == nil ? "false" : taxability
119
+
120
+ # Subsitute real vales for template place holders
121
+ @soap = @template_validate.result(binding)
122
+
123
+ #Clear return hash
124
+ @return_data.clear
125
+
126
+ # Make the call to the Avalara Validate service
127
+ begin
128
+ @response = @client.call(:validate, xml: @soap).to_s
129
+
130
+ rescue
131
+ @log.puts "#{Time.now}: Error calling Validate service ... check username and password"
132
+ end
133
+
134
+ # Load the response into a Nokogiri object and remove namespaces
135
+ @doc = Nokogiri::XML(@response).remove_namespaces!
136
+
137
+ #Read in an array of XPATH pointers
138
+ @validate_xpath = File.readlines(@def_locn + '\xpath_validate.txt')
139
+
140
+ #Read each array element, extract the result returned by the service and place in a the @return_data hash
141
+ @validate_xpath.each{|xpath| @return_data[xpath[2...xpath.length].chomp.to_sym] = @doc.xpath(xpath).text}
142
+
143
+ return @return_data
144
+ end
145
+
146
+ ############################################################################################################
147
+ #Verifies connectivity to the web service and returns version information about the service.
148
+ ############################################################################################################
149
+ def isauthorized(operation = nil)
150
+ #Read in the SOAP template
151
+ @operation = operation == nil ? "?" : operation
152
+
153
+ # Subsitute real vales for template place holders
154
+ @soap = @template_isauthorized.result(binding)
155
+
156
+ #Clear return hash
157
+ @return_data.clear
158
+
159
+ # Make the call to the Avalara Ping service
160
+ begin
161
+ @response = @client.call(:is_authorized, xml: @soap).to_s
162
+ rescue
163
+ @log.puts "#{Time.now}: Error calling IsAuthorized service ... check username and password"
164
+ end
165
+
166
+ # Load the response into a Nokogiri object and remove namespaces
167
+ @doc = Nokogiri::XML(@response).remove_namespaces!
168
+
169
+ #Read in an array of XPATH pointers
170
+ @isauthorized_xpath = File.readlines(@def_locn + '\xpath_isauthorized.txt')
171
+
172
+ #Read each array element, extract the result returned by the service and place in a the @return_data hash
173
+ @isauthorized_xpath.each{|xpath| @return_data[xpath[2...xpath.length].chomp.to_sym] = @doc.xpath(xpath).text}
174
+
175
+ return @return_data
176
+ end
177
+ end
178
+ end
@@ -0,0 +1,22 @@
1
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://avatax.avalara.com/services">
2
+ <soapenv:Header>
3
+ <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
4
+ <wsse:UsernameToken wsu:Id="UsernameToken-7" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
5
+ <wsse:Username><%= @username %></wsse:Username>
6
+ <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><%= @password %></wsse:Password>
7
+ <wsu:Created>2012-03-02T23:41:44.511Z</wsu:Created>
8
+ </wsse:UsernameToken>
9
+ </wsse:Security>
10
+ <ser:Profile>
11
+ <ser:Name><%= @name %></ser:Name>
12
+ <ser:Client><%= @clientname %></ser:Client>
13
+ <ser:Adapter><%= @adapter %></ser:Adapter>
14
+ <ser:Machine><%= @machine %></ser:Machine>
15
+ </ser:Profile>
16
+ </soapenv:Header>
17
+ <soapenv:Body>
18
+ <ser:IsAuthorized>
19
+ <ser:Operations><%= @operation %></ser:Operations>
20
+ </ser:IsAuthorized>
21
+ </soapenv:Body>
22
+ </soapenv:Envelope>
@@ -0,0 +1,22 @@
1
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://avatax.avalara.com/services">
2
+ <soapenv:Header>
3
+ <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
4
+ <wsse:UsernameToken wsu:Id="UsernameToken-7" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
5
+ <wsse:Username><%= @username %></wsse:Username>
6
+ <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><%= @password %></wsse:Password>
7
+ <wsu:Created>2012-03-02T23:41:44.511Z</wsu:Created>
8
+ </wsse:UsernameToken>
9
+ </wsse:Security>
10
+ <ser:Profile>
11
+ <ser:Name><%= @name %></ser:Name>
12
+ <ser:Client><%= @clientname %></ser:Client>
13
+ <ser:Adapter><%= @adapter %></ser:Adapter>
14
+ <ser:Machine><%= @machine %></ser:Machine>
15
+ </ser:Profile>
16
+ </soapenv:Header>
17
+ <soapenv:Body>
18
+ <ser:Ping>
19
+ <ser:Message><%= @ping_message %></ser:Message>
20
+ </ser:Ping>
21
+ </soapenv:Body>
22
+ </soapenv:Envelope>
@@ -0,0 +1,40 @@
1
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://avatax.avalara.com/services">
2
+ <soapenv:Header>
3
+ <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
4
+ <wsse:UsernameToken wsu:Id="UsernameToken-7" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
5
+ <wsse:Username><%= @username %></wsse:Username>
6
+ <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><%= @password %></wsse:Password>
7
+ <wsu:Created>2012-03-02T23:41:44.511Z</wsu:Created>
8
+ </wsse:UsernameToken>
9
+ </wsse:Security>
10
+ <ser:Profile>
11
+ <ser:Name><%= @name %></ser:Name>
12
+ <ser:Client><%= @clientname %></ser:Client>
13
+ <ser:Adapter><%= @adapter %></ser:Adapter>
14
+ <ser:Machine><%= @machine %></ser:Machine>
15
+ </ser:Profile>
16
+ </soapenv:Header>
17
+ <soapenv:Body>
18
+ <ser:Validate>
19
+ <ser:ValidateRequest>
20
+ <ser:Address>
21
+ <ser:AddressCode><%= @addresscode %></ser:AddressCode>
22
+ <ser:Line1><%= @line1 %></ser:Line1>
23
+ <ser:Line2><%= @line2 %></ser:Line2>
24
+ <ser:Line3><%= @line3 %></ser:Line3>
25
+ <ser:City><%= @city %></ser:City>
26
+ <ser:Region><%= @region %></ser:Region>
27
+ <ser:PostalCode><%= @postalcode %></ser:PostalCode>
28
+ <ser:Country><%= @country %></ser:Country>
29
+ <ser:TaxRegionId><%= @taxregionid %></ser:TaxRegionId>
30
+ <ser:Latitude><%= @latitude %></ser:Latitude>
31
+ <ser:Longitude><%= @longitude %></ser:Longitude>
32
+ </ser:Address>
33
+ <ser:TextCase><%= @textcase %></ser:TextCase>
34
+ <ser:Coordinates><%= @coordinates %></ser:Coordinates>
35
+ <ser:Taxability><%= @taxability %></ser:Taxability>
36
+ <ser:Date>1900-01-01</ser:Date>
37
+ </ser:ValidateRequest>
38
+ </ser:Validate>
39
+ </soapenv:Body>
40
+ </soapenv:Envelope>
@@ -0,0 +1,4 @@
1
+ //TransactionId
2
+ //ResultCode
3
+ //Operations
4
+ //Expires
@@ -0,0 +1,9 @@
1
+ //TransactionId
2
+ //ResultCode
3
+ //Summary
4
+ //Details
5
+ //Helplink
6
+ //RefersTo
7
+ //Severity
8
+ //Source
9
+ //Version
@@ -0,0 +1,29 @@
1
+ //TransactionId
2
+ //ResultCode
3
+ //Summary
4
+ //Details
5
+ //Helplink
6
+ //RefersTo
7
+ //Severity
8
+ //Source
9
+ //AddressCode
10
+ //Line1
11
+ //Line2
12
+ //Line3
13
+ //Line4
14
+ //City
15
+ //Region
16
+ //PostalCode
17
+ //Country
18
+ //TaxRegionId
19
+ //Latitude
20
+ //Longitude
21
+ //County
22
+ //FipsCode
23
+ //CarrierRoute
24
+ //PostNet
25
+ //AddressType
26
+ //Longitude
27
+ //ValidateStatus
28
+ //Geocode
29
+ //Taxable
@@ -0,0 +1,105 @@
1
+ #Load the Avalara Address Service module
2
+ require 'avatax_addressservice'
3
+ #require green_shoes for the GUI
4
+ require 'green_shoes'
5
+
6
+ #Create an address service instance
7
+ #Call the gettax service
8
+ username = 'USERNAME
9
+ password = 'PASSWORD'
10
+ name = 'Avalara Inc.'
11
+ clientname = 'MyShoppingCart'
12
+ adapter = 'Avatax SDK for Ruby 1.0.1'
13
+ machine = 'Lenovo W520 Windows 7'
14
+ AddrService = AvaTax::AddressService.new(username,password,name,clientname,adapter,machine)
15
+
16
+ #Open a window to get the address to validate
17
+ Shoes.app :width => 400, :height => 700, :title => "Avalara - Address Validation Tester" do
18
+
19
+ #Set window characteristics
20
+ background green..orange
21
+
22
+ #Get the address to validate from the user
23
+ stack :margin => 10 do
24
+ #Get user input
25
+ para "Line 1:"
26
+ @line1 = edit_line text: "100 rav"
27
+ para "Line 2:"
28
+ @line2 = edit_line
29
+ para "Line 3:"
30
+ @line3 = edit_line
31
+ para "City"
32
+ @city = edit_line width: 100, text: "bainbridge"
33
+ para "State"
34
+ @state = edit_line width: 40, text: 'WA'
35
+ para "Zip"
36
+ @zip = edit_line width: 60, text: "98110"
37
+ para "Country"
38
+ @country = edit_line width: 30, text: "US"
39
+ para "Textcase"
40
+ @textcase = "Default"
41
+ list_box items: ["Default", "Upper", "Mixed"],
42
+ width: 120, choose: @textcase do |list|
43
+ @textcase = list.text
44
+ end
45
+ @validate = button "Validate"
46
+ end
47
+
48
+
49
+ #When the user clicks the Validate button then call the Validate service
50
+ @validate.click {
51
+
52
+ #Call the validate service
53
+ val_addr = AddrService.validate(nil, @line1.text, nil, nil, @city.text, @state.text, @zip.text, 'US', nil, nil, nil, @textcase, nil, nil)
54
+
55
+ if val_addr[:ResultCode] == "Success"
56
+ #Display validated result in a new window
57
+ Shoes.app :width => 400, :height => 700, :left => 1000, :title => "Avalara - Address Validation Result" do
58
+
59
+ background orange..blue
60
+
61
+ stack :margin => 10 do
62
+ #Display result
63
+ para "Line 1:"
64
+ edit_line :text => val_addr[:Line1]
65
+ para "Line 2:"
66
+ edit_line :text => val_addr[:Line2]
67
+ para "Line 3:"
68
+ edit_line :text => val_addr[:Line3]
69
+ para "City"
70
+ edit_line :text => val_addr[:City]
71
+ para "State"
72
+ edit_line :text => val_addr[:Region]
73
+ para "Zip"
74
+ edit_line :text => val_addr[:PostalCode]
75
+ para "Country"
76
+ edit_line :text => val_addr[:Country]
77
+ end
78
+ end
79
+ else
80
+ #Display error message in a new window
81
+ Shoes.app :width => 400, :height => 500, :title => "Address Validation Error" do
82
+
83
+ background orange..red
84
+
85
+ if val_addr[:ResultCode] == "Error"
86
+ stack :margin => 10 do
87
+ #Dispay error details
88
+ para "RESULT: #{val_addr[:ResultCode]}"
89
+ para "SUMMARY: #{val_addr[:Summary]}"
90
+ para "DETAILS: #{val_addr[:Details]}"
91
+ para "HELP LINK: #{val_addr[:Helplink]}"
92
+ para "REFERS TO: #{val_addr[:RefersTo]}"
93
+ para "SEVERITY: #{val_addr[:Severity]}"
94
+ para "SOURCE #{val_addr[:Source]}"
95
+ end
96
+ else
97
+ #Dispay error details
98
+ para "RESULT: Error"
99
+ para "SUMMARY: Unexpected error"
100
+ para "DETAILS: An unexpected error has occurred ... please check avalog.txt for details"
101
+ end
102
+ end
103
+ end}
104
+ end
105
+
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Avatax_AddressService
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Graham S Wilson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.4.0
22
+ - - <
23
+ - !ruby/object:Gem::Version
24
+ version: '1.6'
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 1.4.0
33
+ - - <
34
+ - !ruby/object:Gem::Version
35
+ version: '1.6'
36
+ - !ruby/object:Gem::Dependency
37
+ name: savon
38
+ requirement: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 2.3.0
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: 2.3.0
52
+ description: Ruby SDK provides means of communication with Avatax Web Services.
53
+ email: support@Avalara.com
54
+ executables: []
55
+ extensions: []
56
+ extra_rdoc_files: []
57
+ files:
58
+ - lib/address_log.txt
59
+ - lib/addressservice_dev.wsdl
60
+ - lib/addressservice_prd.wsdl
61
+ - lib/avatax_addressservice.rb
62
+ - lib/template_validate.erb
63
+ - lib/template_ping.erb
64
+ - lib/template_isauthorized.erb
65
+ - lib/xpath_validate.txt
66
+ - lib/xpath_ping.txt
67
+ - lib/xpath_isauthorized.txt
68
+ - test/test_address.rb
69
+ - Avatax_AddressService.gemspec
70
+ - Avatax Ruby SDK Guide.docx
71
+ - LICENSE.txt
72
+ homepage: http://www.avalara.com/
73
+ licenses: []
74
+ post_install_message: Thanks for installing the Avalara AddressService Ruby SDK. Refer
75
+ to "Avatax Ruby SDK User Guide.docx" to get started.
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: 1.9.3
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 1.8.24
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: Ruby SDK for Avatax Address Web Services
97
+ test_files: []