Avatax_AddressService 1.0.9 → 1.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Avatax_AddressService.gemspec +5 -4
- data/samples/Ping.rb +23 -0
- data/samples/Validate.rb +37 -0
- data/samples/credentials.yml +5 -0
- data/spec/addressservice_spec.rb +42 -0
- data/spec/isauthorized_spec.rb +75 -0
- data/spec/ping_spec.rb +75 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/validate_spec.rb +83 -0
- metadata +9 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDE0YjRhNzgxMDVmY2M2MDQ1YTRmYjdhOTFhZTMzNjM0ODdlZTAwYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjkyYmJjYjc0YjJlYzVjMzAwMmEwNjZjMmIxNzZmYTYyNDQ0YjczYg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZWI4NjkyOGFkMzJjMGNmYmJjNWVhYjVkMmE3ZjBhNDRhZmRjZjM0MjI3OTA0
|
10
|
+
MDFkNmYwYzVkNDc5MGYzZTczM2Y2YmE4MjJjM2FlYmQ0NWVjMWUwYjU0MjBl
|
11
|
+
MGUyOGUzYmU3ZjNiMzY3NzE2MWFlZmY0MWU3MWNjZjRhYWFjM2I=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NmUzODk2NWE3NWYwOGNiYTU4MGMyNmNhNTVhMWFmYTdlYzU1NTVkMzU5OGNl
|
14
|
+
NmY1MTkwNDNlMGY1NDNmNmQxMWRhODM0YWIzZjdiYmNhMmQwYjc5ZTQ5ZWM1
|
15
|
+
NjlhNTY2OWMwMTFlMzVhYjdlMzAzN2ZmZTg0ZWJkOGM1MjA1YTk=
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "Avatax_AddressService"
|
3
|
-
s.version = "1.0.
|
3
|
+
s.version = "1.0.10"
|
4
4
|
s.date = "2012-12-16"
|
5
5
|
s.author = "Graham S Wilson"
|
6
6
|
s.email = "support@Avalara.com"
|
@@ -10,10 +10,11 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.description = "Ruby SDK provides means of communication with Avatax Web Services."
|
11
11
|
s.files = ["lib/address_log.txt", "lib/addressservice_dev.wsdl", "lib/addressservice_prd.wsdl", "lib/avatax_addressservice.rb",
|
12
12
|
"lib/template_validate.erb","lib/template_ping.erb","lib/template_isauthorized.erb",
|
13
|
-
"
|
13
|
+
"samples/credentials.yml", "samples/Ping.rb","samples/Validate.rb",
|
14
|
+
"spec/addressservice_spec.rb","spec/isauthorized_spec.rb","spec/ping_spec.rb","spec/spec_helper.rb","spec/validate_spec.rb",
|
15
|
+
"Avatax_AddressService.gemspec","Avatax Ruby SDK Guide.docx","LICENSE.txt"]
|
14
16
|
# s.add_dependency "nokogiri", ">= 1.4.0", "< 1.6"
|
15
17
|
s.add_dependency "savon", ">= 2.3.0"
|
16
18
|
s.required_ruby_version = '>=1.9.1'
|
17
19
|
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
|
-
|
20
|
+
end
|
data/samples/Ping.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'Avatax_AddressService'
|
2
|
+
require 'yaml'
|
3
|
+
#Note that the ping function exists in both the AddressSvc and TaxSvc classes - it works the same way in both.
|
4
|
+
|
5
|
+
#Create an instance of the service class
|
6
|
+
credentials = YAML::load(File.open('credentials.yml'))
|
7
|
+
svc = AvaTax::AddressService.new(:username => credentials['username'],
|
8
|
+
:password => credentials['password'],
|
9
|
+
:clientname => credentials['clientname'],
|
10
|
+
:use_production_url => credentials['production'])
|
11
|
+
|
12
|
+
#Call the service
|
13
|
+
result = svc.ping
|
14
|
+
#print result
|
15
|
+
|
16
|
+
#Display the result
|
17
|
+
puts "Ping ResultCode: "+result[:result_code]
|
18
|
+
|
19
|
+
#If we encountered an error
|
20
|
+
if result[:result_code] != "Success"
|
21
|
+
#Print the first error message returned
|
22
|
+
puts result[:details]
|
23
|
+
end
|
data/samples/Validate.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'Avatax_AddressService'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
#Create an instance of the service class
|
5
|
+
credentials = YAML::load(File.open('credentials.yml'))
|
6
|
+
svc = AvaTax::AddressService.new(:username => credentials['username'],
|
7
|
+
:password => credentials['password'],
|
8
|
+
:clientname => credentials['clientname'],
|
9
|
+
:use_production_url => credentials['production'])
|
10
|
+
|
11
|
+
# Create the request
|
12
|
+
input = {
|
13
|
+
:line1 => "General Delivery", #Required
|
14
|
+
:line2 => "Suite 100", #Optional
|
15
|
+
:line3 => "Attn: Accounts Payable", #Optional
|
16
|
+
:city =>"Seattle", #Required, if PostalCode is not specified
|
17
|
+
:region=>"WA", #Required, if PostalCode is not specified
|
18
|
+
:postalcode =>"98101", #Required, if City and Region are not specified
|
19
|
+
:country => "US" #Optional
|
20
|
+
}
|
21
|
+
#Call the service
|
22
|
+
result = svc.validate(input)
|
23
|
+
#Display the result
|
24
|
+
#print result
|
25
|
+
|
26
|
+
#If we encountered an error
|
27
|
+
if result[:result_code] != "Success"
|
28
|
+
#puts the first error message returned
|
29
|
+
puts "Address Validation ResultCode: "+result[:result_code]
|
30
|
+
puts result[:details]
|
31
|
+
else
|
32
|
+
puts "Validated Address: "
|
33
|
+
result[:valid_addresses][:valid_address].each do |key, value|
|
34
|
+
puts key.to_s + ": " + value.to_s if not value.nil?
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "AddressService" do
|
4
|
+
before :each do
|
5
|
+
credentials = YAML::load(File.open('credentials.yml'))
|
6
|
+
@creds = {:username => credentials['username'],
|
7
|
+
:password => credentials['password'],
|
8
|
+
:clientname => credentials['clientname'],
|
9
|
+
:use_production_url => credentials['production']}
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "does not allow instantiation with" do
|
13
|
+
it "no values" do
|
14
|
+
lambda { AvaTax::AddressService.new }.should raise_exception
|
15
|
+
end
|
16
|
+
it "optional values only" do
|
17
|
+
lambda { AvaTax::AddressService.new(
|
18
|
+
:clientname => @creds[:clientname],
|
19
|
+
:adapter => "AvaTaxCalcRuby",
|
20
|
+
:machine => "MyComputer",
|
21
|
+
:use_production_account => @creds[:use_production_url] ) }.should raise_exception
|
22
|
+
end
|
23
|
+
end
|
24
|
+
describe "allows instantiation with" do
|
25
|
+
it "required values only" do
|
26
|
+
lambda { AvaTax::AddressService.new(
|
27
|
+
:username => @creds[:username],
|
28
|
+
:password => @creds[:password],
|
29
|
+
:clientname => @creds[:clientname]) }.should_not raise_exception
|
30
|
+
end
|
31
|
+
it "required and optional values" do
|
32
|
+
lambda { AvaTax::AddressService.new(
|
33
|
+
:username => @creds[:username],
|
34
|
+
:password => @creds[:password],
|
35
|
+
:clientname => @creds[:clientname],
|
36
|
+
:adapter => "AvaTaxCalcRuby",
|
37
|
+
:machine => "MyComputer",
|
38
|
+
:use_production_account => false ) }.should_not raise_exception
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "IsAuthorized" do
|
4
|
+
before :each do
|
5
|
+
credentials = YAML::load(File.open('credentials.yml'))
|
6
|
+
@creds = {:username => credentials['username'],
|
7
|
+
:password => credentials['password'],
|
8
|
+
:clientname => credentials['clientname'],
|
9
|
+
:use_production_url => credentials['production']}
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "returns a meaningful" do
|
13
|
+
it "error when URL is missing" do
|
14
|
+
@creds[:use_production_url] = nil
|
15
|
+
@service = AvaTax::AddressService.new(@creds)
|
16
|
+
@service.isauthorized[:result_code].should eql "Success"
|
17
|
+
end
|
18
|
+
it "success when URL is specified" do
|
19
|
+
@creds[:use_production_url] = false
|
20
|
+
@service = AvaTax::AddressService.new(@creds)
|
21
|
+
@service.isauthorized[:result_code].should eql "Success"
|
22
|
+
end
|
23
|
+
it "error when username is missing" do
|
24
|
+
@creds[:username] = nil
|
25
|
+
@service = AvaTax::AddressService.new(@creds)
|
26
|
+
@service.isauthorized[:result_code].should eql "Error"
|
27
|
+
end
|
28
|
+
it "error when password is omitted" do
|
29
|
+
@creds[:password] = nil
|
30
|
+
@service = AvaTax::AddressService.new(@creds)
|
31
|
+
@service.isauthorized[:result_code].should eql "Error"
|
32
|
+
end
|
33
|
+
it "success when clientname is omitted" do
|
34
|
+
@creds[:clientname] = nil
|
35
|
+
@service = AvaTax::AddressService.new(@creds)
|
36
|
+
@service.isauthorized[:result_code].should eql "Success"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "has consistent formatting for" do
|
41
|
+
it "internal logic errors" do
|
42
|
+
@service = AvaTax::AddressService.new(@creds)
|
43
|
+
lambda { @service.isauthorized("param1","param2") }.should raise_exception
|
44
|
+
end
|
45
|
+
it "server-side errors" do
|
46
|
+
@creds[:password] = nil
|
47
|
+
@service = AvaTax::AddressService.new(@creds)
|
48
|
+
@result = @service.isauthorized
|
49
|
+
@result[:result_code].should eql "Error" and @result[:details].should eql "The user or account could not be authenticated."
|
50
|
+
end
|
51
|
+
it "successful results" do
|
52
|
+
@service = AvaTax::AddressService.new(@creds)
|
53
|
+
@result = @service.isauthorized
|
54
|
+
@result[:result_code].should eql "Success" and @result[:expires].should_not be_nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
describe "requests with" do
|
58
|
+
it "missing required parameters fail" do
|
59
|
+
true #there are no required parameters for isauthorized
|
60
|
+
end
|
61
|
+
it "invalid parameters fail" do
|
62
|
+
@service = AvaTax::AddressService.new(@creds)
|
63
|
+
lambda { @service.isauthorized("param1","param2") }.should raise_exception
|
64
|
+
end
|
65
|
+
it "missing optional parameters succeed" do
|
66
|
+
@service = AvaTax::AddressService.new(@creds)
|
67
|
+
@service.isauthorized[:result_code].should eql "Success"
|
68
|
+
end
|
69
|
+
it "all parameters succeed" do
|
70
|
+
@service = AvaTax::AddressService.new(@creds)
|
71
|
+
@service.isauthorized("Message")[:result_code].should eql "Success"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
data/spec/ping_spec.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Ping" do
|
4
|
+
before :each do
|
5
|
+
credentials = YAML::load(File.open('credentials.yml'))
|
6
|
+
@creds = {:username => credentials['username'],
|
7
|
+
:password => credentials['password'],
|
8
|
+
:clientname => credentials['clientname'],
|
9
|
+
:use_production_url => credentials['production']}
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "returns a meaningful" do
|
13
|
+
it "error when URL is missing" do
|
14
|
+
@creds[:use_production_url] = nil
|
15
|
+
@service = AvaTax::AddressService.new(@creds)
|
16
|
+
@service.ping[:result_code].should eql "Success"
|
17
|
+
end
|
18
|
+
it "success when URL is specified" do
|
19
|
+
@creds[:use_production_url] = false
|
20
|
+
@service = AvaTax::AddressService.new(@creds)
|
21
|
+
@service.ping[:result_code].should eql "Success"
|
22
|
+
end
|
23
|
+
it "error when username is missing" do
|
24
|
+
@creds[:username] = nil
|
25
|
+
@service = AvaTax::AddressService.new(@creds)
|
26
|
+
@service.ping[:result_code].should eql "Error"
|
27
|
+
end
|
28
|
+
it "error when password is omitted" do
|
29
|
+
@creds[:password] = nil
|
30
|
+
@service = AvaTax::AddressService.new(@creds)
|
31
|
+
@service.ping[:result_code].should eql "Error"
|
32
|
+
end
|
33
|
+
it "success when clientname is omitted" do
|
34
|
+
@creds[:clientname] = nil
|
35
|
+
@service = AvaTax::AddressService.new(@creds)
|
36
|
+
@service.ping[:result_code].should eql "Success"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "has consistent formatting for" do
|
41
|
+
it "internal logic errors" do
|
42
|
+
@service = AvaTax::AddressService.new(@creds)
|
43
|
+
lambda { @service.ping("param1","param2") }.should raise_exception
|
44
|
+
end
|
45
|
+
it "server-side errors" do
|
46
|
+
@creds[:password] = nil
|
47
|
+
@service = AvaTax::AddressService.new(@creds)
|
48
|
+
@result = @service.ping
|
49
|
+
@result[:result_code].should eql "Error" and @result[:details].should eql "The user or account could not be authenticated."
|
50
|
+
end
|
51
|
+
it "successful results" do
|
52
|
+
@service = AvaTax::AddressService.new(@creds)
|
53
|
+
@result = @service.ping
|
54
|
+
@result[:result_code].should eql "Success" and @result[:version].should_not be_nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
describe "requests with" do
|
58
|
+
it "missing required parameters fail" do
|
59
|
+
true #there are no required parameters for ping
|
60
|
+
end
|
61
|
+
it "invalid parameters fail" do
|
62
|
+
@service = AvaTax::AddressService.new(@creds)
|
63
|
+
lambda { @service.ping("param1","param2") }.should raise_exception
|
64
|
+
end
|
65
|
+
it "missing optional parameters succeed" do
|
66
|
+
@service = AvaTax::AddressService.new(@creds)
|
67
|
+
@service.ping[:result_code].should eql "Success"
|
68
|
+
end
|
69
|
+
it "all parameters succeed" do
|
70
|
+
@service = AvaTax::AddressService.new(@creds)
|
71
|
+
@service.ping("Message")[:result_code].should eql "Success"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# spec/awesome_gem/awesome.rb
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
3
|
+
$: << File.join(APP_ROOT, 'lib') # so rspec knows where your file could be
|
4
|
+
require 'avatax_addressservice.rb' # this loads the class you want to test
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
# Use color in STDOUT
|
10
|
+
config.color_enabled = true
|
11
|
+
|
12
|
+
# Use color not only in STDOUT but also in pagers and files
|
13
|
+
config.tty = true
|
14
|
+
|
15
|
+
# Use the specified formatter
|
16
|
+
config.formatter = :documentation # :progress, :html, :textmate
|
17
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Validate" do
|
4
|
+
before :each do
|
5
|
+
@address_req = {:line1 => "100 Ravine Lane NE", :postalcode => "98110"}
|
6
|
+
@address_opt = {
|
7
|
+
:addresscode => "02",
|
8
|
+
:line2 => "Attn: Avalara",
|
9
|
+
:line3 => "Suite 200",
|
10
|
+
:city => "Bainbridge Island",
|
11
|
+
:region => "WA",
|
12
|
+
:country => "US",
|
13
|
+
:taxregionid => "234",
|
14
|
+
:latitude => "47.624935",
|
15
|
+
:longitude => "-122.515068",
|
16
|
+
:textcase => "Upper",
|
17
|
+
:coordinates => "true",
|
18
|
+
:taxability => "true"}
|
19
|
+
credentials = YAML::load(File.open('credentials.yml'))
|
20
|
+
@creds = {:username => credentials['username'],
|
21
|
+
:password => credentials['password'],
|
22
|
+
:clientname => credentials['clientname'],
|
23
|
+
:use_production_url => credentials['production']}
|
24
|
+
@svc = AvaTax::AddressService.new(@creds)
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "returns a meaningful" do
|
28
|
+
it "error when URL is missing" do
|
29
|
+
@creds[:use_production_url] = nil
|
30
|
+
@service = AvaTax::AddressService.new(@creds)
|
31
|
+
@service.validate(@address_req)[:result_code].should eql "Success"
|
32
|
+
end
|
33
|
+
it "success when URL is specified" do
|
34
|
+
@creds[:use_production_url] = false
|
35
|
+
@service = AvaTax::AddressService.new(@creds)
|
36
|
+
@service.validate(@address_req)[:result_code].should eql "Success"
|
37
|
+
end
|
38
|
+
it "error when username is missing" do
|
39
|
+
@creds[:username] = nil
|
40
|
+
@service = AvaTax::AddressService.new(@creds)
|
41
|
+
@service.validate(@address_req)[:result_code].should eql "Error"
|
42
|
+
end
|
43
|
+
it "error when password is omitted" do
|
44
|
+
@creds[:password] = nil
|
45
|
+
@service = AvaTax::AddressService.new(@creds)
|
46
|
+
@service.validate(@address_req)[:result_code].should eql "Error"
|
47
|
+
end
|
48
|
+
it "success when clientname is omitted" do
|
49
|
+
@creds[:clientname] = nil
|
50
|
+
@service = AvaTax::AddressService.new(@creds)
|
51
|
+
@service.validate(@address_req)[:result_code].should eql "Success"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "has consistent formatting for" do
|
56
|
+
it "internal logic errors" do
|
57
|
+
lambda { @svc.validate(@address_req, @address_req) }.should raise_exception
|
58
|
+
end
|
59
|
+
it "server-side errors" do
|
60
|
+
@creds[:password] = nil
|
61
|
+
@service = AvaTax::AddressService.new(@creds)
|
62
|
+
@result = @service.validate(@address_req)
|
63
|
+
@result[:result_code].should eql "Error" and @result[:details].should eql "The user or account could not be authenticated."
|
64
|
+
end
|
65
|
+
it "successful results" do
|
66
|
+
@result = @svc.validate(@address_req)
|
67
|
+
@result[:result_code].should eql "Success" and @result[:valid_addresses].should_not be_nil
|
68
|
+
end
|
69
|
+
end
|
70
|
+
describe "requests with" do
|
71
|
+
it "missing required parameters fail" do
|
72
|
+
@address_req[:line1] = nil
|
73
|
+
@svc.validate(@address_req)[:result_code].should eql "Error"
|
74
|
+
end
|
75
|
+
it "missing optional parameters succeed" do
|
76
|
+
@svc.validate(@address_req)[:result_code].should eql "Success"
|
77
|
+
end
|
78
|
+
it "all parameters succeed" do
|
79
|
+
@address_full = @address_req.merge(@address_opt)
|
80
|
+
@svc.validate(@address_full)[:result_code].should eql "Success"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Avatax_AddressService
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Graham S Wilson
|
@@ -37,6 +37,14 @@ files:
|
|
37
37
|
- lib/template_validate.erb
|
38
38
|
- lib/template_ping.erb
|
39
39
|
- lib/template_isauthorized.erb
|
40
|
+
- samples/credentials.yml
|
41
|
+
- samples/Ping.rb
|
42
|
+
- samples/Validate.rb
|
43
|
+
- spec/addressservice_spec.rb
|
44
|
+
- spec/isauthorized_spec.rb
|
45
|
+
- spec/ping_spec.rb
|
46
|
+
- spec/spec_helper.rb
|
47
|
+
- spec/validate_spec.rb
|
40
48
|
- Avatax_AddressService.gemspec
|
41
49
|
- Avatax Ruby SDK Guide.docx
|
42
50
|
- LICENSE.txt
|