corgibytes-tax_cloud 0.9.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.
Files changed (90) hide show
  1. checksums.yaml +17 -0
  2. data/.circleci/config.yml +81 -0
  3. data/.circleci/setup-rubygems.sh +9 -0
  4. data/.gitignore +67 -0
  5. data/.rubocop.yml +6 -0
  6. data/.rubocop_todo.yml +66 -0
  7. data/.travis.yml +7 -0
  8. data/CHANGELOG.rdoc +48 -0
  9. data/CONTRIBUTORS.txt +23 -0
  10. data/Dockerfile +9 -0
  11. data/Gemfile +22 -0
  12. data/LICENSE +23 -0
  13. data/README.md +190 -0
  14. data/Rakefile +29 -0
  15. data/docker-compose.yml +10 -0
  16. data/examples/.env.example +2 -0
  17. data/examples/lookup_example.rb +139 -0
  18. data/lib/config/locales/en.yml +34 -0
  19. data/lib/hash.rb +8 -0
  20. data/lib/savon_soap_xml.rb +32 -0
  21. data/lib/tasks/tax_cloud.rake +18 -0
  22. data/lib/tasks/tax_code_groups.rake +37 -0
  23. data/lib/tasks/tax_codes.rake +43 -0
  24. data/lib/tax_cloud.rb +70 -0
  25. data/lib/tax_cloud/address.rb +50 -0
  26. data/lib/tax_cloud/cart_item.rb +26 -0
  27. data/lib/tax_cloud/client.rb +60 -0
  28. data/lib/tax_cloud/configuration.rb +28 -0
  29. data/lib/tax_cloud/errors.rb +6 -0
  30. data/lib/tax_cloud/errors/api_error.rb +17 -0
  31. data/lib/tax_cloud/errors/missing_config_error.rb +13 -0
  32. data/lib/tax_cloud/errors/missing_config_option_error.rb +19 -0
  33. data/lib/tax_cloud/errors/soap_error.rb +30 -0
  34. data/lib/tax_cloud/errors/tax_cloud_error.rb +83 -0
  35. data/lib/tax_cloud/errors/unexpected_soap_response_error.rb +19 -0
  36. data/lib/tax_cloud/record.rb +14 -0
  37. data/lib/tax_cloud/responses.rb +13 -0
  38. data/lib/tax_cloud/responses/authorized.rb +10 -0
  39. data/lib/tax_cloud/responses/authorized_with_capture.rb +10 -0
  40. data/lib/tax_cloud/responses/base.rb +82 -0
  41. data/lib/tax_cloud/responses/captured.rb +10 -0
  42. data/lib/tax_cloud/responses/cart_item.rb +23 -0
  43. data/lib/tax_cloud/responses/generic.rb +31 -0
  44. data/lib/tax_cloud/responses/lookup.rb +38 -0
  45. data/lib/tax_cloud/responses/ping.rb +10 -0
  46. data/lib/tax_cloud/responses/returned.rb +10 -0
  47. data/lib/tax_cloud/responses/tax_code_groups.rb +30 -0
  48. data/lib/tax_cloud/responses/tax_codes.rb +30 -0
  49. data/lib/tax_cloud/responses/tax_codes_by_group.rb +30 -0
  50. data/lib/tax_cloud/responses/verify_address.rb +26 -0
  51. data/lib/tax_cloud/tax_code.rb +11 -0
  52. data/lib/tax_cloud/tax_code_constants.rb +560 -0
  53. data/lib/tax_cloud/tax_code_group.rb +28 -0
  54. data/lib/tax_cloud/tax_code_group_constants.rb +31 -0
  55. data/lib/tax_cloud/tax_code_groups.rb +25 -0
  56. data/lib/tax_cloud/tax_codes.rb +25 -0
  57. data/lib/tax_cloud/transaction.rb +118 -0
  58. data/lib/tax_cloud/version.rb +4 -0
  59. data/tax_cloud.gemspec +23 -0
  60. data/test/cassettes/authorized.yml +826 -0
  61. data/test/cassettes/authorized_with_capture.yml +826 -0
  62. data/test/cassettes/authorized_with_localized_time.yml +826 -0
  63. data/test/cassettes/captured.yml +872 -0
  64. data/test/cassettes/get_tic_groups.yml +783 -0
  65. data/test/cassettes/get_tics.yml +1079 -0
  66. data/test/cassettes/get_tics_by_group.yml +776 -0
  67. data/test/cassettes/invalid_soap_call.yml +778 -0
  68. data/test/cassettes/lookup.yml +780 -0
  69. data/test/cassettes/lookup_ny.yml +780 -0
  70. data/test/cassettes/ping.yml +776 -0
  71. data/test/cassettes/ping_with_invalid_credentials.yml +774 -0
  72. data/test/cassettes/ping_with_invalid_response.yml +774 -0
  73. data/test/cassettes/returned.yml +872 -0
  74. data/test/cassettes/verify_bad_address.yml +772 -0
  75. data/test/cassettes/verify_good_address.yml +772 -0
  76. data/test/helper.rb +17 -0
  77. data/test/test_address.rb +54 -0
  78. data/test/test_cart_item.rb +15 -0
  79. data/test/test_client.rb +27 -0
  80. data/test/test_configuration_optional_keys.rb +42 -0
  81. data/test/test_configuration_required_keys.rb +31 -0
  82. data/test/test_lookup_response.rb +20 -0
  83. data/test/test_setup.rb +17 -0
  84. data/test/test_soap.rb +11 -0
  85. data/test/test_tax_code_groups.rb +29 -0
  86. data/test/test_tax_codes.rb +17 -0
  87. data/test/test_transaction.rb +78 -0
  88. data/test/test_transaction_ny.rb +25 -0
  89. data/test/vcr_setup.rb +9 -0
  90. metadata +174 -0
data/test/helper.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'minitest/autorun'
2
+ require 'tax_cloud'
3
+ require 'json'
4
+
5
+ # If not included then no test reports are generated
6
+ # for Circle CI builds.
7
+ require 'minitest/ci'
8
+
9
+
10
+ Savon.configure do |config|
11
+ config.log = false
12
+ end
13
+
14
+ HTTPI.log = false
15
+
16
+ require 'vcr_setup'
17
+ require 'test_setup'
@@ -0,0 +1,54 @@
1
+ require 'helper'
2
+
3
+ class TestAddress < TestSetup
4
+ def setup
5
+ super
6
+ @address = TaxCloud::Address.new address1: '888 6th Ave', city: 'New York', state: 'New York', zip5: '10001'
7
+ end
8
+
9
+ def test_initialize
10
+ assert_equal '888 6th Ave', @address.address1
11
+ assert_equal nil, @address.address2
12
+ assert_equal 'New York', @address.city
13
+ assert_equal 'New York', @address.state
14
+ assert_equal '10001', @address.zip5
15
+ assert_equal nil, @address.zip4
16
+ end
17
+
18
+ def test_zip
19
+ assert_equal '10001', @address.zip
20
+ # 9-digit zip
21
+ @address.zip4 = '1234'
22
+ assert_equal '10001-1234', @address.zip
23
+ # only 4-digit zip, which is invalid
24
+ @address.zip5 = nil
25
+ assert_equal nil, @address.zip
26
+ end
27
+
28
+ def test_address_respond_to_verify
29
+ assert_respond_to @address, :verify
30
+ end
31
+
32
+ def test_verify_good_address
33
+ VCR.use_cassette('verify good address') do
34
+ verified = @address.verify
35
+ assert_instance_of TaxCloud::Address, verified
36
+ assert_equal '888 6TH AVE', verified.address1
37
+ assert_equal nil, verified.address2
38
+ assert_equal 'NEW YORK', verified.city
39
+ assert_equal 'NY', verified.state
40
+ assert_equal '10001', verified.zip5
41
+ assert_equal '3502', verified.zip4
42
+ end
43
+ end
44
+
45
+ def test_verify_bad_address
46
+ e = assert_raises TaxCloud::Errors::ApiError do
47
+ VCR.use_cassette('verify bad address') do
48
+ bad_address = TaxCloud::Address.new address1: '10001 Test Street', city: 'New York', state: 'New York', zip5: '99999'
49
+ bad_address.verify
50
+ end
51
+ end
52
+ assert_equal e.problem, 'Invalid Zip Code.'
53
+ end
54
+ end
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+
3
+ class TestCartItem < Minitest::Test
4
+ def setup
5
+ @cart_item = TaxCloud::CartItem.new index: 0, item_id: 'SKU-100', tic: '0000', price: 50.00, quantity: 3
6
+ end
7
+
8
+ def test_variables
9
+ assert_equal 0, @cart_item.index
10
+ assert_equal 'SKU-100', @cart_item.item_id
11
+ assert_equal '0000', @cart_item.tic
12
+ assert_equal 50.00, @cart_item.price
13
+ assert_equal 3, @cart_item.quantity
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ require 'helper'
2
+
3
+ class TestClient < TestSetup
4
+ def test_ping_with_invalid_credentials
5
+ assert_raises TaxCloud::Errors::ApiError do
6
+ VCR.use_cassette('ping_with_invalid_credentials') do
7
+ TaxCloud.client.ping
8
+ end
9
+ end
10
+ end
11
+
12
+ def test_ping_with_invalid_response
13
+ e = assert_raises TaxCloud::Errors::UnexpectedSoapResponse do
14
+ VCR.use_cassette('ping_with_invalid_response') do
15
+ TaxCloud.client.ping
16
+ end
17
+ end
18
+ assert_equal 'Expected a value for `ping_result` in `ping_response/ping_result/response_type` in the TaxCloud response.', e.problem
19
+ end
20
+
21
+ def test_ping
22
+ VCR.use_cassette('ping') do
23
+ response = TaxCloud.client.ping
24
+ assert_equal 'OK', response
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,42 @@
1
+ require 'helper'
2
+
3
+ describe 'TaxCloud::Configuration' do
4
+ def request
5
+ TaxCloud.client.instance_variable_get('@wsdl').request
6
+ end
7
+
8
+ def reset_and_configure(options = {})
9
+ TaxCloud.reset!
10
+ TaxCloud.configure do |config|
11
+ config.api_key = 'stubbed_api_key'
12
+ config.api_login_id = 'stubbed_api_login_id'
13
+ options.each do |key, value|
14
+ config.public_send("#{key}=", value)
15
+ end
16
+ end
17
+ end
18
+
19
+ describe 'open_timeout option' do
20
+ it 'has set default to 2' do
21
+ reset_and_configure
22
+ assert_equal 2, request.open_timeout
23
+ end
24
+
25
+ it 'can be changed via configuration' do
26
+ reset_and_configure(open_timeout: 3)
27
+ assert_equal 3, request.open_timeout
28
+ end
29
+ end
30
+
31
+ describe 'read_timeout option' do
32
+ it 'has set default to 2' do
33
+ reset_and_configure
34
+ assert_equal 2, request.read_timeout
35
+ end
36
+
37
+ it 'can be changed via configuration' do
38
+ reset_and_configure(read_timeout: 3)
39
+ assert_equal 3, request.read_timeout
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,31 @@
1
+ require 'helper'
2
+
3
+ class TestConfigurationRequiredKeys < Minitest::Test
4
+ def setup
5
+ TaxCloud.reset!
6
+ end
7
+
8
+ def test_missing_configuration
9
+ assert_raises TaxCloud::Errors::MissingConfig do
10
+ TaxCloud.client.request :dummy, body: {}
11
+ end
12
+ end
13
+
14
+ def test_mising_api_login_id
15
+ TaxCloud.configure do |config|
16
+ config.api_key = 'taxcloud_api_key'
17
+ end
18
+ assert_raises TaxCloud::Errors::MissingConfigOption do
19
+ TaxCloud.client.request :dummy, body: {}
20
+ end
21
+ end
22
+
23
+ def test_mising_api_key
24
+ TaxCloud.configure do |config|
25
+ config.api_login_id = 'taxcloud_api_login_id'
26
+ end
27
+ assert_raises TaxCloud::Errors::MissingConfigOption do
28
+ TaxCloud.client.request :dummy, body: {}
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ require 'helper'
2
+
3
+ class TestLookupResponse < TestSetup
4
+ class MockLookup < TaxCloud::Responses::Lookup
5
+ def initialize; end
6
+ end
7
+
8
+ def test_tax_amount_handles_decimal_addition_properly
9
+ response = TestLookupResponse::MockLookup.new
10
+
11
+ # `tax_amount`s chosen to provoke floating point arithmetic error
12
+ mock_savon_cart_items = [
13
+ { cart_item_index: '0', tax_amount: '0.35' },
14
+ { cart_item_index: '1', tax_amount: '0.7' }
15
+ ]
16
+ response.cart_items = mock_savon_cart_items.map { |i| TaxCloud::Responses::CartItem.new(i) }
17
+
18
+ assert_equal 1.05, response.tax_amount
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ class TestSetup < Minitest::Test
2
+ def default_test
3
+ # placeholder to avoid error under Ruby 1.8.7
4
+ end
5
+
6
+ def setup
7
+ TaxCloud.configure do |config|
8
+ config.api_login_id = ENV['TAXCLOUD_API_LOGIN_ID'] || 'taxcloud_api_login_id'
9
+ config.api_key = ENV['TAXCLOUD_API_KEY'] || 'taxcloud_api_key'
10
+ config.usps_username = ENV['TAXCLOUD_USPS_USERNAME'] || 'usps_username'
11
+ end
12
+ end
13
+
14
+ def teardown
15
+ TaxCloud.reset!
16
+ end
17
+ end
data/test/test_soap.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'helper'
2
+
3
+ class TestSoap < TestSetup
4
+ def test_invalid_soap_call
5
+ assert_raises TaxCloud::Errors::SoapError do
6
+ VCR.use_cassette('invalid_soap_call') do
7
+ TaxCloud.client.request :invalid, body: {}
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,29 @@
1
+ require 'helper'
2
+
3
+ class TestTaxCodeGroups < TestSetup
4
+ def test_all
5
+ VCR.use_cassette('get_tic_groups') do
6
+ assert TaxCloud::TaxCode::Groups.all.count > 0
7
+ end
8
+ end
9
+
10
+ def test_lookup
11
+ VCR.use_cassette('get_tic_groups') do
12
+ tax_code_group = TaxCloud::TaxCode::Groups[TaxCloud::TaxCode::Groups::SCHOOL_RELATED_PRODUCTS]
13
+ assert_equal TaxCloud::TaxCode::Groups::SCHOOL_RELATED_PRODUCTS, tax_code_group.group_id
14
+ assert_equal 'School Related Products', tax_code_group.description
15
+ end
16
+ end
17
+
18
+ def test_lookup_tax_codes
19
+ tax_code_group = VCR.use_cassette('get_tic_groups') do
20
+ TaxCloud::TaxCode::Groups[TaxCloud::TaxCode::Groups::SCHOOL_RELATED_PRODUCTS]
21
+ end
22
+ VCR.use_cassette('get_tics_by_group') do
23
+ assert tax_code_group.tax_codes.count > 0
24
+ tax_code = tax_code_group[TaxCloud::TaxCodes::SCHOOL_INSTRUCTIONAL_MATERIAL]
25
+ assert_equal TaxCloud::TaxCodes::SCHOOL_INSTRUCTIONAL_MATERIAL, tax_code.ticid
26
+ assert_equal 'School instructional material', tax_code.description
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ require 'helper'
2
+
3
+ class TestTaxCode < TestSetup
4
+ def test_all
5
+ VCR.use_cassette('get_tics') do
6
+ assert TaxCloud::TaxCodes.all.count > 0
7
+ end
8
+ end
9
+
10
+ def test_lookup
11
+ VCR.use_cassette('get_tics') do
12
+ tax_code = TaxCloud::TaxCodes[TaxCloud::TaxCodes::DIRECT_MAIL_RELATED]
13
+ assert_equal TaxCloud::TaxCodes::DIRECT_MAIL_RELATED, tax_code.ticid
14
+ assert_equal 'Direct-mail related', tax_code.description
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,78 @@
1
+ require 'helper'
2
+
3
+ class TestTransaction < TestSetup
4
+ def setup
5
+ super
6
+ origin = TaxCloud::Address.new(address1: '162 East Avenue', address2: 'Third Floor', city: 'Norwalk', state: 'CT', zip5: '06851')
7
+ destination = TaxCloud::Address.new(address1: '3121 West Government Way', address2: 'Suite 2B', city: 'Seattle', state: 'WA', zip5: '98199')
8
+ cart_items = []
9
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'SKU-TEST', tic: TaxCloud::TaxCodes::GENERAL, quantity: 1, price: 50.00)
10
+ cart_items << TaxCloud::CartItem.new(index: 1, item_id: 'SKU-TEST1', tic: TaxCloud::TaxCodes::GENERAL, quantity: 1, price: 100.00)
11
+ @transaction = TaxCloud::Transaction.new(customer_id: 42, cart_id: rand(18_446_744_073_709_551_616), order_id: rand(18_446_744_073_709_551_616), cart_items: cart_items, origin: origin, destination: destination)
12
+ end
13
+
14
+ def test_lookup
15
+ VCR.use_cassette('lookup') do
16
+ result = @transaction.lookup
17
+ assert_instance_of TaxCloud::Responses::Lookup, result
18
+ assert_equal 2, result.cart_items.count
19
+ result.cart_items.first.tap do |item|
20
+ assert_equal 0, item.cart_item_index
21
+ assert_equal 4.75, item.tax_amount
22
+ end
23
+ result.cart_items.last.tap do |item|
24
+ assert_equal 1, item.cart_item_index
25
+ assert_equal 9.5, item.tax_amount
26
+ end
27
+ assert_equal 14.25, result.tax_amount
28
+ end
29
+ end
30
+
31
+ def test_authorized
32
+ VCR.use_cassette('authorized') do
33
+ @transaction.lookup
34
+ result = @transaction.authorized
35
+ assert_equal 'OK', result
36
+ end
37
+ end
38
+
39
+ class LocalizedDate < Date
40
+ def to_s
41
+ strftime '%d/%m/%Y'
42
+ end
43
+ end
44
+
45
+ def test_authorized_with_localized_date
46
+ VCR.use_cassette('authorized_with_localized_time') do
47
+ @transaction.lookup
48
+ result = @transaction.authorized(date_authorized: LocalizedDate.civil(2013, 2, 1))
49
+ assert_equal 'OK', result
50
+ end
51
+ end
52
+
53
+ def test_captured
54
+ VCR.use_cassette('captured') do
55
+ @transaction.lookup
56
+ @transaction.authorized
57
+ result = @transaction.captured
58
+ assert_equal 'OK', result
59
+ end
60
+ end
61
+
62
+ def test_authorized_with_capture
63
+ VCR.use_cassette('authorized_with_capture') do
64
+ @transaction.lookup
65
+ result = @transaction.authorized_with_capture
66
+ assert_equal 'OK', result
67
+ end
68
+ end
69
+
70
+ def test_returned
71
+ VCR.use_cassette('returned') do
72
+ @transaction.lookup
73
+ @transaction.authorized_with_capture
74
+ result = @transaction.returned
75
+ assert_equal 'OK', result
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,25 @@
1
+ require 'helper'
2
+
3
+ class TestTransactionNy < TestSetup
4
+ def setup
5
+ super
6
+ origin = TaxCloud::Address.new address1: '888 6th Ave', city: 'New York', state: 'NY', zip5: '10001'
7
+ destination = TaxCloud::Address.new address1: '888 6th Ave', city: 'New York', state: 'NY', zip5: '10001'
8
+ cart_items = [TaxCloud::CartItem.new(index: 0, item_id: 'SKU-TEST', tic: TaxCloud::TaxCodes::GENERAL, quantity: 1, price: 50.00)]
9
+ @transaction = TaxCloud::Transaction.new(customer_id: 42, cart_id: 708, order_id: rand(18_446_744_073_709_551_616), cart_items: cart_items, origin: origin, destination: destination)
10
+ end
11
+
12
+ def test_lookup_non_ssuta_state
13
+ VCR.use_cassette('lookup_ny') do
14
+ result = @transaction.lookup
15
+ assert_instance_of TaxCloud::Responses::Lookup, result
16
+ assert_equal '708', result.cart_id
17
+ assert_equal 1, result.cart_items.count
18
+ result.cart_items.first.tap do |item|
19
+ assert_equal 0, item.cart_item_index
20
+ assert_equal 0, item.tax_amount
21
+ end
22
+ assert_equal 0, result.tax_amount
23
+ end
24
+ end
25
+ end
data/test/vcr_setup.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'vcr'
2
+
3
+ VCR.configure do |c|
4
+ c.cassette_library_dir = 'test/cassettes'
5
+ c.hook_into :webmock
6
+ c.filter_sensitive_data('api-login-id') { TaxCloud.configuration.api_login_id }
7
+ c.filter_sensitive_data('api-key') { TaxCloud.configuration.api_key }
8
+ c.filter_sensitive_data('usps-username') { TaxCloud.configuration.usps_username }
9
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: corgibytes-tax_cloud
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Corgibytes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-03-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: i18n
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: savon
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.2'
55
+ description: Calculate sales tax using the TaxCloud.net API
56
+ email:
57
+ - info@corgibytes.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - .circleci/config.yml
63
+ - .circleci/setup-rubygems.sh
64
+ - .gitignore
65
+ - .rubocop.yml
66
+ - .rubocop_todo.yml
67
+ - .travis.yml
68
+ - CHANGELOG.rdoc
69
+ - CONTRIBUTORS.txt
70
+ - Dockerfile
71
+ - Gemfile
72
+ - LICENSE
73
+ - README.md
74
+ - Rakefile
75
+ - docker-compose.yml
76
+ - examples/.env.example
77
+ - examples/lookup_example.rb
78
+ - lib/config/locales/en.yml
79
+ - lib/hash.rb
80
+ - lib/savon_soap_xml.rb
81
+ - lib/tasks/tax_cloud.rake
82
+ - lib/tasks/tax_code_groups.rake
83
+ - lib/tasks/tax_codes.rake
84
+ - lib/tax_cloud.rb
85
+ - lib/tax_cloud/address.rb
86
+ - lib/tax_cloud/cart_item.rb
87
+ - lib/tax_cloud/client.rb
88
+ - lib/tax_cloud/configuration.rb
89
+ - lib/tax_cloud/errors.rb
90
+ - lib/tax_cloud/errors/api_error.rb
91
+ - lib/tax_cloud/errors/missing_config_error.rb
92
+ - lib/tax_cloud/errors/missing_config_option_error.rb
93
+ - lib/tax_cloud/errors/soap_error.rb
94
+ - lib/tax_cloud/errors/tax_cloud_error.rb
95
+ - lib/tax_cloud/errors/unexpected_soap_response_error.rb
96
+ - lib/tax_cloud/record.rb
97
+ - lib/tax_cloud/responses.rb
98
+ - lib/tax_cloud/responses/authorized.rb
99
+ - lib/tax_cloud/responses/authorized_with_capture.rb
100
+ - lib/tax_cloud/responses/base.rb
101
+ - lib/tax_cloud/responses/captured.rb
102
+ - lib/tax_cloud/responses/cart_item.rb
103
+ - lib/tax_cloud/responses/generic.rb
104
+ - lib/tax_cloud/responses/lookup.rb
105
+ - lib/tax_cloud/responses/ping.rb
106
+ - lib/tax_cloud/responses/returned.rb
107
+ - lib/tax_cloud/responses/tax_code_groups.rb
108
+ - lib/tax_cloud/responses/tax_codes.rb
109
+ - lib/tax_cloud/responses/tax_codes_by_group.rb
110
+ - lib/tax_cloud/responses/verify_address.rb
111
+ - lib/tax_cloud/tax_code.rb
112
+ - lib/tax_cloud/tax_code_constants.rb
113
+ - lib/tax_cloud/tax_code_group.rb
114
+ - lib/tax_cloud/tax_code_group_constants.rb
115
+ - lib/tax_cloud/tax_code_groups.rb
116
+ - lib/tax_cloud/tax_codes.rb
117
+ - lib/tax_cloud/transaction.rb
118
+ - lib/tax_cloud/version.rb
119
+ - tax_cloud.gemspec
120
+ - test/cassettes/authorized.yml
121
+ - test/cassettes/authorized_with_capture.yml
122
+ - test/cassettes/authorized_with_localized_time.yml
123
+ - test/cassettes/captured.yml
124
+ - test/cassettes/get_tic_groups.yml
125
+ - test/cassettes/get_tics.yml
126
+ - test/cassettes/get_tics_by_group.yml
127
+ - test/cassettes/invalid_soap_call.yml
128
+ - test/cassettes/lookup.yml
129
+ - test/cassettes/lookup_ny.yml
130
+ - test/cassettes/ping.yml
131
+ - test/cassettes/ping_with_invalid_credentials.yml
132
+ - test/cassettes/ping_with_invalid_response.yml
133
+ - test/cassettes/returned.yml
134
+ - test/cassettes/verify_bad_address.yml
135
+ - test/cassettes/verify_good_address.yml
136
+ - test/helper.rb
137
+ - test/test_address.rb
138
+ - test/test_cart_item.rb
139
+ - test/test_client.rb
140
+ - test/test_configuration_optional_keys.rb
141
+ - test/test_configuration_required_keys.rb
142
+ - test/test_lookup_response.rb
143
+ - test/test_setup.rb
144
+ - test/test_soap.rb
145
+ - test/test_tax_code_groups.rb
146
+ - test/test_tax_codes.rb
147
+ - test/test_transaction.rb
148
+ - test/test_transaction_ny.rb
149
+ - test/vcr_setup.rb
150
+ homepage: https://github.com/corgibytes/tax_cloud
151
+ licenses:
152
+ - MIT
153
+ metadata: {}
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ! '>='
161
+ - !ruby/object:Gem::Version
162
+ version: 1.9.3
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: 1.3.6
168
+ requirements: []
169
+ rubyforge_project:
170
+ rubygems_version: 2.7.8
171
+ signing_key:
172
+ specification_version: 4
173
+ summary: Calculate sales tax using TaxCloud
174
+ test_files: []