tax_cloud 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. data/.travis.yml +9 -0
  2. data/CHANGELOG.rdoc +28 -0
  3. data/CONTRIBUTORS.txt +20 -0
  4. data/Gemfile +1 -1
  5. data/LICENSE.rdoc +22 -0
  6. data/README.rdoc +112 -28
  7. data/Rakefile +10 -2
  8. data/lib/config/locales/en.yml +34 -0
  9. data/lib/hash.rb +8 -6
  10. data/lib/savon_soap_xml.rb +33 -0
  11. data/lib/tasks/tax_cloud.rake +20 -0
  12. data/lib/tasks/tax_code_groups.rake +39 -0
  13. data/lib/tasks/tax_codes.rake +45 -0
  14. data/lib/tax_cloud.rb +43 -16
  15. data/lib/tax_cloud/address.rb +30 -17
  16. data/lib/tax_cloud/cart_item.rb +13 -19
  17. data/lib/tax_cloud/client.rb +48 -0
  18. data/lib/tax_cloud/configuration.rb +17 -2
  19. data/lib/tax_cloud/errors.rb +6 -0
  20. data/lib/tax_cloud/errors/api_error.rb +18 -0
  21. data/lib/tax_cloud/errors/missing_config_error.rb +13 -0
  22. data/lib/tax_cloud/errors/missing_config_option_error.rb +19 -0
  23. data/lib/tax_cloud/errors/soap_error.rb +33 -0
  24. data/lib/tax_cloud/errors/tax_cloud_error.rb +86 -0
  25. data/lib/tax_cloud/errors/unexpected_soap_response_error.rb +23 -0
  26. data/lib/tax_cloud/record.rb +14 -0
  27. data/lib/tax_cloud/responses.rb +13 -0
  28. data/lib/tax_cloud/responses/authorized.rb +10 -0
  29. data/lib/tax_cloud/responses/authorized_with_capture.rb +10 -0
  30. data/lib/tax_cloud/responses/base.rb +88 -0
  31. data/lib/tax_cloud/responses/captured.rb +11 -0
  32. data/lib/tax_cloud/responses/cart_item.rb +24 -0
  33. data/lib/tax_cloud/responses/generic.rb +35 -0
  34. data/lib/tax_cloud/responses/lookup.rb +41 -0
  35. data/lib/tax_cloud/responses/ping.rb +10 -0
  36. data/lib/tax_cloud/responses/returned.rb +10 -0
  37. data/lib/tax_cloud/responses/tax_code_groups.rb +33 -0
  38. data/lib/tax_cloud/responses/tax_codes.rb +33 -0
  39. data/lib/tax_cloud/responses/tax_codes_by_group.rb +33 -0
  40. data/lib/tax_cloud/responses/verify_address.rb +29 -0
  41. data/lib/tax_cloud/tax_code.rb +11 -0
  42. data/lib/tax_cloud/tax_code_constants.rb +562 -0
  43. data/lib/tax_cloud/tax_code_group.rb +30 -0
  44. data/lib/tax_cloud/tax_code_group_constants.rb +31 -0
  45. data/lib/tax_cloud/tax_code_groups.rb +28 -0
  46. data/lib/tax_cloud/tax_codes.rb +24 -47
  47. data/lib/tax_cloud/transaction.rb +39 -34
  48. data/lib/tax_cloud/version.rb +3 -3
  49. data/tax_cloud.gemspec +7 -5
  50. data/test/cassettes/authorized.yml +70 -45
  51. data/test/cassettes/authorized_with_capture.yml +70 -45
  52. data/test/cassettes/captured.yml +101 -67
  53. data/test/cassettes/get_tic_groups.yml +656 -0
  54. data/test/cassettes/get_tics.yml +952 -0
  55. data/test/cassettes/get_tics_by_group.yml +49 -0
  56. data/test/cassettes/invalid_soap_call.yml +651 -0
  57. data/test/cassettes/lookup.yml +644 -25
  58. data/test/cassettes/lookup_ny.yml +651 -0
  59. data/test/cassettes/ping.yml +647 -0
  60. data/test/cassettes/ping_with_invalid_credentials.yml +647 -0
  61. data/test/cassettes/ping_with_invalid_response.yml +647 -0
  62. data/test/cassettes/returned.yml +101 -67
  63. data/test/cassettes/verify_bad_address.yml +578 -976
  64. data/test/cassettes/verify_good_address.yml +36 -23
  65. data/test/helper.rb +4 -19
  66. data/test/test_address.rb +25 -7
  67. data/test/test_client.rb +29 -0
  68. data/test/test_configuration.rb +33 -0
  69. data/test/test_setup.rb +18 -0
  70. data/test/test_soap.rb +13 -0
  71. data/test/test_tax_code_groups.rb +31 -0
  72. data/test/test_tax_codes.rb +19 -0
  73. data/test/test_transaction.rb +22 -11
  74. data/test/test_transaction_ny.rb +27 -0
  75. data/test/vcr_setup.rb +9 -0
  76. metadata +134 -24
  77. data/lib/savon_xml_override.rb +0 -30
@@ -0,0 +1,30 @@
1
+ module TaxCloud #:nodoc:
2
+ # A group of tax codes.
3
+ #
4
+ # See https://taxcloud.net/tic.
5
+ class TaxCodeGroup < Record
6
+
7
+ # Group ID.
8
+ attr_accessor :group_id
9
+ # Group description.
10
+ attr_accessor :description
11
+
12
+ # All Tax Codes in this group.
13
+ def tax_codes
14
+ @tax_codes ||= begin
15
+ response = TaxCloud.client.request :get_ti_cs_by_group, { :tic_group => group_id }
16
+ tax_codes = TaxCloud::Responses::TaxCodesByGroup.parse response
17
+ Hash[tax_codes.map { |tic| [ tic.ticid, tic ] }]
18
+ end
19
+ end
20
+
21
+ # Lookup a tax code by ID.
22
+ #
23
+ # === Parameters
24
+ # [ticid] Tax code ID.
25
+ def [](ticid)
26
+ tax_codes[ticid]
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,31 @@
1
+ module TaxCloud
2
+ class TaxCode
3
+ # Tax Code Groups.
4
+ class Groups
5
+ # Administrative
6
+ ADMINISTRATIVE = 1
7
+ # Clothing and Related Products
8
+ CLOTHING_AND_RELATED_PRODUCTS = 2
9
+ # School Related Products
10
+ SCHOOL_RELATED_PRODUCTS = 3
11
+ # Computer Related Products
12
+ COMPUTER_RELATED_PRODUCTS = 4
13
+ # Digital Products
14
+ DIGITAL_PRODUCTS = 5
15
+ # Food and Food Products
16
+ FOOD_AND_FOOD_PRODUCTS = 6
17
+ # Prepared Food
18
+ PREPARED_FOOD = 7
19
+ # Drugs
20
+ DRUGS = 8
21
+ # Durable Medical Equipment
22
+ DURABLE_MEDICAL_EQUIPMENT = 9
23
+ # Mobilty Enhancing Equipment
24
+ MOBILTY_ENHANCING_EQUIPMENT = 10
25
+ # Prosthetic Devices
26
+ PROSTHETIC_DEVICES = 11
27
+ # Telecommunications
28
+ TELECOMMUNICATIONS = 12
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,28 @@
1
+ module TaxCloud #:nodoc:
2
+ class TaxCode
3
+ # A TaxCloud::TaxCode::Group organizes tax codes in a logical group.
4
+ class Groups
5
+
6
+ class << self
7
+
8
+ # All tax code groups.
9
+ def all
10
+ @tax_code_groups ||= begin
11
+ response = TaxCloud.client.request :get_tic_groups
12
+ tax_code_groups = TaxCloud::Responses::TaxCodeGroups.parse response
13
+ Hash[tax_code_groups.map { |tax_code_group| [ tax_code_group.group_id, tax_code_group ] }]
14
+ end
15
+ end
16
+
17
+ # Lookup a tax code group by ID.
18
+ #
19
+ # === Parameters
20
+ # [group_id] Group ID.
21
+ def [](group_id)
22
+ all[group_id]
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,52 +1,29 @@
1
- module TaxCloud
1
+ module TaxCloud #:nodoc:
2
2
  class TaxCodes
3
- GENERAL = '00000'
4
-
5
- # SHIPPING AND ADMINISTRATIVE
6
- GIFT_CARD = '10005'
7
- SERVICE_FEE = '10010'
8
- INSTALLATION_FEE = '10040'
9
- TRADE_IN_VALUE = '10060'
10
- TELECOM = '10070'
11
- HANDLING_FEE = '11000'
12
- POSTAGE = '11010'
13
- DMAIL_HANDLING_FEE = '11020'
14
- DMAIL_TRANSPORTATION = '11021'
15
- DMAIL_POSTAGE = '11022'
16
-
17
- # CLOTHING, SPORTS, AND ACCESSORIES
18
- CLOTHING = '20010'
19
- ESSENTIAL_CLOTHING = '20015'
20
- CLOTHING_ACCESSORY = '20020'
21
- PROTECTIVE_EQUIPMENT = '20030'
22
- SPORT_EQUIPMENT = '20040'
23
- FUR_CLOTHING = '20050'
24
- CLOTHING_TAX_HOLIDAY = '20130'
25
- SCHOOL_SUPPLY = '20070'
26
-
27
- DISASTER_PREPAREDNESS_SUPPLY = '20150'
28
-
29
- # COMPUTERS, ELECTRONICS, AND APPLIANCES
30
- ENERGY_STAR_APPLIANCE = '20060'
31
- CUSTOM_SOFTWARE = '30015'
32
- SOFTWARE = '30040'
33
- COMPUTER = '30100'
34
- DIGITAL_PRODUCT = '31000'
35
-
36
- # FOOD RELATED
37
- CANDY = '40010'
38
- DIETARY_SUPPLEMENT = '40020'
39
- FOOD = '40030'
40
- VENDING_FOOD = '40040'
41
- SOFT_DRINK = '40050'
42
- BOTTLED_WATER = '40060'
43
- PREPARED_FOOD = '41000'
44
- BULK_FOOD__FROM_MANUFACTURER = '41010'
45
- BULK_FOOD = '41020'
46
- BAKERY_ITEM = '41030'
47
-
48
- # MEDICAL AND HYGENE RELATED
49
3
 
4
+ # General purpose tax code.
5
+ GENERAL = 00000
6
+
7
+ class << self
8
+
9
+ # All tax codes
10
+ def all
11
+ @tax_codes ||= begin
12
+ response = TaxCloud.client.request :get_ti_cs
13
+ tax_codes = TaxCloud::Responses::TaxCodes.parse response
14
+ Hash[tax_codes.map { |tic| [ tic.ticid, tic ] }]
15
+ end
16
+ end
17
+
18
+ # Lookup a tax code by ID.
19
+ #
20
+ # === Parameters
21
+ # [ticid] Tax code ID.
22
+ def [](ticid)
23
+ all[ticid]
24
+ end
25
+
26
+ end
50
27
 
51
28
  end
52
29
  end
@@ -1,27 +1,31 @@
1
- module TaxCloud
1
+ module TaxCloud #:nodoc:
2
2
  # Lookup tax rate, authorize, and capture the information to be logged into TaxCloud.
3
3
  #
4
4
  # *Note:* The Transaction must not change between the <tt>lookup</tt> and <tt>authorization</tt> method calls.
5
- #
6
- # === Attributes
7
- # * <tt>customer_id</tt> - Your defined customer ID for the <tt>Transaction</tt>.
8
- # * <tt>cart_id</tt> - Your defined cart ID for the order.
9
- # * <tt>cart_items</tt> - Array of <tt>CartItem</tt>s.
10
- # * <tt>order_id</tt> - The order ID for <tt>authorized</tt>, <tt>captured</tt>, and <tt>authorzied_with_captured</tt> methods.
11
- # * <tt>origin</tt> - The <tt>Address</tt> of which the shipment originates.
12
- # * <tt>destination</tt> - The <tt>Address</tt> of which the shipment arrives.
13
- class Transaction
14
- attr_accessor :customer_id, :cart_id, :cart_items, :order_id, :origin, :destination
5
+ class Transaction < Record
6
+ # User-defined customer ID for the <tt>Transaction</tt>.
7
+ attr_accessor :customer_id
8
+ # User-defined cart ID for the order.
9
+ attr_accessor :cart_id
10
+ # Array of <tt>CartItem</tt>s.
11
+ attr_accessor :cart_items
12
+ # The order ID for <tt>authorized</tt>, <tt>captured</tt>, and <tt>authorzied_with_captured</tt> methods.
13
+ attr_accessor :order_id
14
+ # The <tt>Address</tt> of which the shipment originates.
15
+ attr_accessor :origin
16
+ # The <tt>Address</tt> of which the shipment arrives.
17
+ attr_accessor :destination
15
18
 
16
- # Creates a new <tt>Transaction</tt> object with the given parameters
19
+ # Create a new transaction.
20
+ # === Parameters
21
+ # [params] Transaction params.
17
22
  def initialize(params = {})
18
23
  params = { :cart_items => [] }.merge(params)
19
- params.each do |key, value|
20
- self.send "#{key}=", value
21
- end
24
+ super params
22
25
  end
23
26
 
24
- # Lookup the tax rate for the transaction. The returned information is based on the originating address, destination address, and cart items.
27
+ # Lookup the tax rate for the transaction.
28
+ # The returned information is based on the originating address, destination address, and cart items.
25
29
  def lookup
26
30
  request_params = {
27
31
  'customerID' => customer_id,
@@ -29,13 +33,10 @@ module TaxCloud
29
33
  'cartItems' => { 'CartItem' => cart_items.map(&:to_hash) },
30
34
  'origin' => origin.to_hash,
31
35
  'destination' => destination.to_hash
32
- }.merge(TaxCloud.auth_params)
33
-
34
- response = TaxCloud.client.request :lookup, :body => request_params
36
+ }
35
37
 
36
- # In the event that a cart_id wasn't specified, TaxCloud will give you one
37
- self.cart_id = response[:lookup_response][:lookup_result][:cart_id] if response[:lookup_response][:lookup_result][:cart_id]
38
- return response
38
+ response = TaxCloud.client.request :lookup, request_params
39
+ TaxCloud::Responses::Lookup.parse response
39
40
  end
40
41
 
41
42
  # Once a purchase has been made and payment has been authorized, this method must be called. A matching Lookup call must have been made before this is called.
@@ -49,15 +50,16 @@ module TaxCloud
49
50
  'cartID' => cart_id,
50
51
  'orderID' => order_id,
51
52
  'dateAuthorized' => options[:date_authorized]
52
- }.merge(TaxCloud.auth_params)
53
+ }
53
54
 
54
- response = TaxCloud.client.request :authorized, :body => request_params
55
+ response = TaxCloud.client.request :authorized, request_params
56
+ TaxCloud::Responses::Authorized.parse response
55
57
  end
56
58
 
57
59
  # Complete the transaction. The <tt>order_id</tt> passed into <tt>captured</tt> must match the <tt>order_id</tt> that was passed into <tt>authorized</tt>.
58
60
  #
59
61
  # === Options
60
- # * <tt>date_captured</tt> - The time the transaction was captured. Default is today.
62
+ # [date_captured] The time the transaction was captured. Default is today.
61
63
  def captured(options = {})
62
64
  options = { :date_captured => Date.today }.merge(options)
63
65
  request_params = {
@@ -65,16 +67,17 @@ module TaxCloud
65
67
  'cartID' => cart_id,
66
68
  'orderID' => order_id,
67
69
  'dateCaptured' => options[:date_captured]
68
- }.merge(TaxCloud.auth_params)
70
+ }
69
71
 
70
- response = TaxCloud.client.request :captured, :body => request_params
72
+ response = TaxCloud.client.request :captured, request_params
73
+ TaxCloud::Responses::Captured.parse response
71
74
  end
72
75
 
73
76
  # Combines the <tt>authorized</tt> and <tt>captured</tt> methods into a single call
74
77
  #
75
78
  # === Options
76
- # * <tt>date_authorized</tt> - The date the transaction was authorized. Default is today.
77
- # * <tt>date_captured</tt> - The date the transaction was captured. Default is today.
79
+ # [date_authorized] The date the transaction was authorized. Default is today.
80
+ # [date_captured] - The date the transaction was captured. Default is today.
78
81
  def authorized_with_capture(options = {})
79
82
  options = { :date_authorized => Date.today, :date_captured => Date.today }.merge(options)
80
83
  request_params = {
@@ -83,24 +86,26 @@ module TaxCloud
83
86
  'orderID' => order_id,
84
87
  'dateAuthorized' => options[:date_authorized],
85
88
  'dateCaptured' => options[:date_captured]
86
- }.merge(TaxCloud.auth_params)
89
+ }
87
90
 
88
- response = TaxCloud.client.request :authorized_with_capture, :body => request_params
91
+ response = TaxCloud.client.request :authorized_with_capture, request_params
92
+ TaxCloud::Responses::AuthorizedWithCapture.parse response
89
93
  end
90
94
 
91
95
  # Marks any included cart items as returned.
92
96
  #
93
97
  # === Options
94
- # * <tt>returned_date</tt> - The date the return occured. Default is today.
98
+ # [returned_date] The date the return occured. Default is today.
95
99
  def returned(options = {})
96
100
  options = { :returned_date => Date.today }.merge(options)
97
101
  request_params = {
98
102
  'orderID' => order_id,
99
103
  'cartItems' => { 'CartItem' => cart_items.map(&:to_hash) },
100
104
  'returnedDate' => options[:returned_date]
101
- }.merge(TaxCloud.auth_params)
105
+ }
102
106
 
103
- TaxCloud.client.request :returned, :body => request_params
107
+ response = TaxCloud.client.request :returned, request_params
108
+ TaxCloud::Responses::Returned.parse response
104
109
  end
105
110
  end
106
111
  end
@@ -1,4 +1,4 @@
1
- module TaxCloud
2
- # TaxCloud gem version
3
- VERSION = "0.1.4"
1
+ module TaxCloud #:nodoc:
2
+ # The version of the <tt>tax_cloud</tt> gem.
3
+ VERSION = "0.2.0"
4
4
  end
@@ -10,17 +10,19 @@ Gem::Specification.new do |s|
10
10
  s.homepage = "https://github.com/drewtempelmeyer/tax_cloud"
11
11
  s.summary = %q{Calculate sales tax using TaxCloud}
12
12
  s.description = %q{Calculate sales tax using the TaxCloud.net API}
13
+ s.licenses = ["MIT"]
13
14
 
14
15
  s.required_rubygems_version = '>= 1.3.6'
15
16
  s.files = `git ls-files`.split("\n")
16
17
  s.test_files = `git ls-files -- {test}/*`.split("\n")
17
18
  s.require_paths = ["lib"]
18
19
 
19
- s.add_runtime_dependency 'savon', '0.9.6'
20
+ s.add_runtime_dependency 'savon', '~> 1.2.0'
21
+ s.add_runtime_dependency 'i18n', '~> 0.6'
22
+ s.add_runtime_dependency 'activesupport', '~> 3.0'
20
23
 
21
- # Development dependencies
22
- s.add_development_dependency 'rake', '>= 0.9.2'
24
+ s.add_development_dependency 'rake', '~> 10.0'
23
25
  s.add_development_dependency 'rdoc', '>= 2.5.0'
24
- s.add_development_dependency 'vcr', '>= 1.11.3'
25
- s.add_development_dependency 'webmock', '>= 1.7.6'
26
+ s.add_development_dependency 'vcr', '~> 2.3'
27
+ s.add_development_dependency 'webmock', '~> 1.8.0'
26
28
  end
@@ -1,63 +1,88 @@
1
- ---
2
- - !ruby/struct:VCR::HTTPInteraction
3
- request: !ruby/struct:VCR::Request
4
- method: :post
5
- uri: https://api.taxcloud.net:443/1.0/TaxCloud.asmx
6
- body: <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://taxcloud.net" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://taxcloud.net"><env:Body><ins0:Lookup><ins0:customerID>2583</ins0:customerID><ins0:cartID>708</ins0:cartID><ins0:cartItems><ins0:CartItem><wsdl:Index>0</wsdl:Index><wsdl:ItemID>SKU-TEST</wsdl:ItemID><wsdl:TIC>00000</wsdl:TIC><wsdl:Price>50.0</wsdl:Price><wsdl:Qty>1</wsdl:Qty></ins0:CartItem><ins0:CartItem><wsdl:Index>1</wsdl:Index><wsdl:ItemID>SKU-TEST1</wsdl:ItemID><wsdl:TIC>00000</wsdl:TIC><wsdl:Price>50.0</wsdl:Price><wsdl:Qty>1</wsdl:Qty></ins0:CartItem></ins0:cartItems><ins0:origin><ins0:Address1>888 6th Ave</ins0:Address1><ins0:Address2 xsi:nil="true"/><ins0:City>New York</ins0:City><ins0:State>NY</ins0:State><ins0:Zip5>10001</ins0:Zip5><ins0:Zip4 xsi:nil="true"/></ins0:origin><ins0:destination><ins0:Address1>888 6th Ave</ins0:Address1><ins0:Address2 xsi:nil="true"/><ins0:City>New York</ins0:City><ins0:State>NY</ins0:State><ins0:Zip5>10001</ins0:Zip5><ins0:Zip4 xsi:nil="true"/></ins0:destination><ins0:apiLoginID>api-login-id</ins0:apiLoginID><ins0:apiKey>api-key</ins0:apiKey></ins0:Lookup></env:Body></env:Envelope>
7
- headers:
8
- soapaction:
9
- - "\"http://taxcloud.net/Lookup\""
10
- content-type:
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.taxcloud.net/1.0/TaxCloud.asmx
6
+ body:
7
+ encoding: UTF-8
8
+ string: <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
9
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://taxcloud.net"
10
+ xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://taxcloud.net"><env:Body><ins0:Lookup><ins0:customerID>42</ins0:customerID><ins0:cartID>708</ins0:cartID><ins0:cartItems><ins0:CartItem><wsdl:Index>0</wsdl:Index><wsdl:ItemID>SKU-TEST</wsdl:ItemID><wsdl:TIC>00000</wsdl:TIC><wsdl:Price>50.0</wsdl:Price><wsdl:Qty>1</wsdl:Qty></ins0:CartItem><ins0:CartItem><wsdl:Index>1</wsdl:Index><wsdl:ItemID>SKU-TEST1</wsdl:ItemID><wsdl:TIC>00000</wsdl:TIC><wsdl:Price>50.0</wsdl:Price><wsdl:Qty>1</wsdl:Qty></ins0:CartItem></ins0:cartItems><ins0:origin><ins0:Address1>888
11
+ 6th Ave</ins0:Address1><ins0:Address2 xsi:nil="true"/><ins0:City>New York</ins0:City><ins0:State>NY</ins0:State><ins0:Zip5>10001</ins0:Zip5><ins0:Zip4
12
+ xsi:nil="true"/></ins0:origin><ins0:destination><ins0:Address1>888 6th Ave</ins0:Address1><ins0:Address2
13
+ xsi:nil="true"/><ins0:City>New York</ins0:City><ins0:State>NY</ins0:State><ins0:Zip5>10001</ins0:Zip5><ins0:Zip4
14
+ xsi:nil="true"/></ins0:destination><ins0:apiLoginID>api-login-id</ins0:apiLoginID><ins0:apiKey>api-key</ins0:apiKey></ins0:Lookup></env:Body></env:Envelope>
15
+ headers:
16
+ Soapaction:
17
+ - ! '"http://taxcloud.net/Lookup"'
18
+ Content-Type:
11
19
  - text/xml;charset=UTF-8
12
- response: !ruby/struct:VCR::Response
13
- status: !ruby/struct:VCR::ResponseStatus
20
+ response:
21
+ status:
14
22
  code: 200
15
23
  message: OK
16
- headers:
17
- cache-control:
24
+ headers:
25
+ Cache-Control:
18
26
  - private, max-age=0
19
- content-type:
27
+ Content-Type:
20
28
  - text/xml; charset=utf-8
21
- server:
29
+ Server:
22
30
  - Microsoft-IIS/7.0
23
- x-aspnet-version:
31
+ X-Aspnet-Version:
24
32
  - 2.0.50727
25
- x-powered-by:
33
+ X-Powered-By:
26
34
  - TaxCloud
27
- date:
35
+ Date:
28
36
  - Sat, 17 Sep 2011 19:21:55 GMT
29
- content-length:
30
- - "869"
31
- body: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><LookupResponse xmlns="http://taxcloud.net"><LookupResult><ResponseType>Informational</ResponseType><Messages><ResponseMessage><ResponseType>Informational</ResponseType><Message>The transaction occurred in a non-SSUTA State. TaxCloud will not collect or remit the tax amount for this transaction.</Message></ResponseMessage></Messages><CartID>708</CartID><CartItemsResponse><CartItemResponse><CartItemIndex>0</CartItemIndex><TaxAmount>4.4375</TaxAmount></CartItemResponse><CartItemResponse><CartItemIndex>1</CartItemIndex><TaxAmount>4.4375</TaxAmount></CartItemResponse></CartItemsResponse></LookupResult></LookupResponse></soap:Body></soap:Envelope>
32
- http_version: "1.1"
33
- - !ruby/struct:VCR::HTTPInteraction
34
- request: !ruby/struct:VCR::Request
35
- method: :post
36
- uri: https://api.taxcloud.net:443/1.0/TaxCloud.asmx
37
- body: <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://taxcloud.net" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://taxcloud.net"><env:Body><ins0:Authorized><ins0:customerID>2583</ins0:customerID><ins0:cartID>708</ins0:cartID><ins0:orderID>2361</ins0:orderID><ins0:dateAuthorized>2011-09-17</ins0:dateAuthorized><ins0:apiLoginID>api-login-id</ins0:apiLoginID><ins0:apiKey>api-key</ins0:apiKey></ins0:Authorized></env:Body></env:Envelope>
38
- headers:
39
- soapaction:
40
- - "\"http://taxcloud.net/Authorized\""
41
- content-type:
37
+ Content-Length:
38
+ - '869'
39
+ body:
40
+ encoding: UTF-8
41
+ string: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
42
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><LookupResponse
43
+ xmlns="http://taxcloud.net"><LookupResult><ResponseType>Informational</ResponseType><Messages><ResponseMessage><ResponseType>Informational</ResponseType><Message>The
44
+ transaction occurred in a non-SSUTA State. TaxCloud will not collect or remit
45
+ the tax amount for this transaction.</Message></ResponseMessage></Messages><CartID>708</CartID><CartItemsResponse><CartItemResponse><CartItemIndex>0</CartItemIndex><TaxAmount>4.4375</TaxAmount></CartItemResponse><CartItemResponse><CartItemIndex>1</CartItemIndex><TaxAmount>4.4375</TaxAmount></CartItemResponse></CartItemsResponse></LookupResult></LookupResponse></soap:Body></soap:Envelope>
46
+ http_version: '1.1'
47
+ recorded_at: Fri, 23 Nov 2012 15:41:40 GMT
48
+ - request:
49
+ method: post
50
+ uri: https://api.taxcloud.net/1.0/TaxCloud.asmx
51
+ body:
52
+ encoding: UTF-8
53
+ string: <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
54
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://taxcloud.net"
55
+ xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://taxcloud.net"><env:Body><ins0:Authorized><ins0:customerID>42</ins0:customerID><ins0:cartID>708</ins0:cartID><ins0:orderID>2361</ins0:orderID><ins0:dateAuthorized>2011-09-17</ins0:dateAuthorized><ins0:apiLoginID>api-login-id</ins0:apiLoginID><ins0:apiKey>api-key</ins0:apiKey></ins0:Authorized></env:Body></env:Envelope>
56
+ headers:
57
+ Soapaction:
58
+ - ! '"http://taxcloud.net/Authorized"'
59
+ Content-Type:
42
60
  - text/xml;charset=UTF-8
43
- response: !ruby/struct:VCR::Response
44
- status: !ruby/struct:VCR::ResponseStatus
61
+ response:
62
+ status:
45
63
  code: 200
46
64
  message: OK
47
- headers:
48
- cache-control:
65
+ headers:
66
+ Cache-Control:
49
67
  - private, max-age=0
50
- content-type:
68
+ Content-Type:
51
69
  - text/xml; charset=utf-8
52
- server:
70
+ Server:
53
71
  - Microsoft-IIS/7.0
54
- x-aspnet-version:
72
+ X-Aspnet-Version:
55
73
  - 2.0.50727
56
- x-powered-by:
74
+ X-Powered-By:
57
75
  - TaxCloud
58
- date:
76
+ Date:
59
77
  - Sat, 17 Sep 2011 19:21:56 GMT
60
- content-length:
61
- - "395"
62
- body: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><AuthorizedResponse xmlns="http://taxcloud.net"><AuthorizedResult><ResponseType>OK</ResponseType><Messages /></AuthorizedResult></AuthorizedResponse></soap:Body></soap:Envelope>
63
- http_version: "1.1"
78
+ Content-Length:
79
+ - '395'
80
+ body:
81
+ encoding: UTF-8
82
+ string: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
83
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><AuthorizedResponse
84
+ xmlns="http://taxcloud.net"><AuthorizedResult><ResponseType>OK</ResponseType><Messages
85
+ /></AuthorizedResult></AuthorizedResponse></soap:Body></soap:Envelope>
86
+ http_version: '1.1'
87
+ recorded_at: Fri, 23 Nov 2012 15:41:40 GMT
88
+ recorded_with: VCR 2.3.0