solidus_tax_cloud 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +35 -0
  3. data/.gem_release.yml +5 -0
  4. data/.gitignore +20 -0
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +7 -0
  7. data/.rubocop_todo.yml +132 -0
  8. data/CHANGELOG.md +52 -0
  9. data/Gemfile +33 -0
  10. data/LICENSE +26 -0
  11. data/README.md +130 -0
  12. data/Rakefile +6 -0
  13. data/TaxCloudImplementationVerificationGuide.pdf +0 -0
  14. data/app/assets/javascripts/spree/backend/solidus_tax_cloud.js +2 -0
  15. data/app/assets/javascripts/spree/frontend/solidus_tax_cloud.js +2 -0
  16. data/app/assets/stylesheets/spree/backend/solidus_tax_cloud.css +4 -0
  17. data/app/assets/stylesheets/spree/backend/solidus_tax_cloud.scss +0 -0
  18. data/app/assets/stylesheets/spree/frontend/solidus_tax_cloud.css +4 -0
  19. data/app/decorators/models/solidus_tax_cloud/spree/app_configuration_decorator.rb +18 -0
  20. data/app/decorators/models/solidus_tax_cloud/spree/line_item_decorator.rb +47 -0
  21. data/app/decorators/models/solidus_tax_cloud/spree/order_decorator.rb +42 -0
  22. data/app/decorators/models/solidus_tax_cloud/spree/product_decorator.rb +25 -0
  23. data/app/decorators/models/solidus_tax_cloud/spree/shipment_decorator.rb +27 -0
  24. data/app/models/spree/calculator/tax_cloud_calculator.rb +111 -0
  25. data/app/models/spree/tax_cloud.rb +66 -0
  26. data/app/overrides/spree/admin/products/_form.rb +9 -0
  27. data/app/overrides/spree/admin/shared/_configuration_menu.rb +9 -0
  28. data/bin/console +17 -0
  29. data/bin/r +15 -0
  30. data/bin/rails +15 -0
  31. data/bin/rake +7 -0
  32. data/bin/sandbox +84 -0
  33. data/bin/sandbox_rails +18 -0
  34. data/bin/setup +8 -0
  35. data/config/initializers/tax_cloud_usps_username.rb +5 -0
  36. data/config/locales/en.yml +13 -0
  37. data/config/routes.rb +7 -0
  38. data/db/migrate/20121220192438_create_spree_tax_cloud_transactions.rb +13 -0
  39. data/db/migrate/20121220193944_create_spree_tax_cloud_cart_items.rb +22 -0
  40. data/db/migrate/20130829215819_fix_scale_of_cart_item_prices.rb +15 -0
  41. data/db/migrate/20140623225628_add_tic_to_products.rb +11 -0
  42. data/lib/assets/javascripts/spree/frontend/solidus_tax_cloud.js.erb +1 -0
  43. data/lib/assets/stylesheets/spree/frontend/solidus_tax_cloud.css.erb +5 -0
  44. data/lib/controllers/backend/spree/admin/tax_cloud_settings_controller.rb +29 -0
  45. data/lib/decorators/backend/controllers/solidus_tax_cloud/spree/admin/orders_controller_decorator.rb +21 -0
  46. data/lib/decorators/frontend/controllers/solidus_tax_cloud/spree/checkout_controller_decorator.rb +24 -0
  47. data/lib/generators/solidus_tax_cloud/install/install_generator.rb +29 -0
  48. data/lib/generators/solidus_tax_cloud/templates/ca-bundle.crt +3895 -0
  49. data/lib/solidus_tax_cloud.rb +10 -0
  50. data/lib/solidus_tax_cloud/engine.rb +23 -0
  51. data/lib/solidus_tax_cloud/error.rb +6 -0
  52. data/lib/solidus_tax_cloud/factories.rb +4 -0
  53. data/lib/solidus_tax_cloud/version.rb +5 -0
  54. data/lib/tasks/.gitkeep +0 -0
  55. data/lib/tasks/tax_cloud.rake +74 -0
  56. data/lib/views/backend/spree/admin/products/_edit_tax_cloud_tic.html.erb +6 -0
  57. data/lib/views/backend/spree/admin/tax_cloud_settings/edit.html.erb +32 -0
  58. data/solidus_tax_cloud.gemspec +39 -0
  59. data/spec/features/checkout_spec.rb +511 -0
  60. data/spec/models/tax_cloud_api_spec.rb +192 -0
  61. data/spec/spec_helper.rb +27 -0
  62. data/spec/support/capybara.rb +20 -0
  63. data/spec/support/tax_cloud.rb +20 -0
  64. data/spec/support/transactions.rb +5 -0
  65. metadata +204 -0
@@ -0,0 +1,192 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ # This spec ensures that the low-level TaxCloud API returns the values specified by the TaxCloud Implementation Guide.
6
+ # If any errors are found in the Solidus-related feature specs, this will serve as a means for verifying whether the errors
7
+ # are coming from the TaxCloud gem or API, or whether they are related to the Solidus integration specifically.
8
+
9
+ describe 'Models' do
10
+ origin = TaxCloud::Address.new(address1: '3121 West Government Way', city: 'Seattle', state: 'WA', zip5: '98199', zip4: '1402')
11
+
12
+ it 'TaxCloud Test Case 1a: Verify Address with error' do
13
+ destination = TaxCloud::Address.new(address1: '1 3rd Street', city: 'Seattle', state: 'WA', zip5: '98001')
14
+ cart_items = []
15
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'TestItem1', tic: '00000', quantity: 1, price: 10.00)
16
+ transaction = test_transaction(cart_items, origin, destination)
17
+
18
+ result = transaction.lookup
19
+
20
+ # From TaxCloud:
21
+ # This address will not verify correctly (the VerifyAddress API call will return an error).
22
+ # That is okay. Occasionally an address cannot be verified. When that happens, pass the
23
+ # destination address as originally entered to Lookup. The address can still be passed to
24
+ # Lookup. The only error that should prevent an order from proceeding is when a customer
25
+ # provided zip code does not exist within the customer provided state (discussed later in Test
26
+ # Case 7, Handling Errors).
27
+
28
+ expect { destination.verify }.to raise_error(TaxCloud::Errors::ApiError)
29
+
30
+ expect(result.cart_items.size).to eq 1
31
+ expect(result.cart_items.first.cart_item_index).to eq 0
32
+ expect(result.cart_items.first.tax_amount).to eq 0.99
33
+ end
34
+
35
+ it 'TaxCloud Test Case 1b: Verify Address without error' do
36
+ destination = TaxCloud::Address.new(address1: '16422 SE 128th St', city: 'Renton', state: 'WA', zip5: '98059')
37
+ cart_items = []
38
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'TestItem2', tic: '00000', quantity: 1, price: 10.00)
39
+ transaction = test_transaction(cart_items, origin, destination)
40
+
41
+ result = transaction.lookup
42
+
43
+ # From TaxCloud:
44
+ # The destination address used as-is will not give the most accurate rate ($1.00 in tax).
45
+ # The verified address will have a Plus4 Zip Code of 98059-8625 give a correct result
46
+ # ($0.86 in tax).
47
+
48
+ expect(result.cart_items.size).to eq 1
49
+ expect(result.cart_items.first.cart_item_index).to eq 0
50
+ expect(result.cart_items.first.tax_amount).to eq 0.86
51
+ end
52
+
53
+ it 'TaxCloud Test Case 2a: If all items in cart are tax exempt, shipping is not taxed (in some states)' do
54
+ destination = TaxCloud::Address.new(address1: '75 Rev Martin Luther King Jr Drive', city: 'St. Paul', state: 'MN', zip5: '55155')
55
+ cart_items = []
56
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'Shirt001', tic: '20010', quantity: 1, price: 10.00)
57
+ cart_items << TaxCloud::CartItem.new(index: 1, item_id: 'Shipping', tic: '11010', quantity: 1, price: 10.00)
58
+ transaction = test_transaction(cart_items, origin, destination)
59
+
60
+ result = transaction.lookup
61
+
62
+ expect(result.cart_items.size).to eq 2
63
+ expect(result.cart_items.detect { |i| i.cart_item_index == 0 }.tax_amount).to eq 0
64
+ expect(result.cart_items.detect { |i| i.cart_item_index == 1 }.tax_amount).to eq 0
65
+
66
+ # capture = transaction.authorized_with_capture
67
+ # expect(capture).to eq('OK')
68
+ end
69
+
70
+ it 'TaxCloud Test Case 2b: With both taxable and tax exempt items, shipping is taxable' do
71
+ destination = TaxCloud::Address.new(address1: '75 Rev Martin Luther King Jr Drive', city: 'St. Paul', state: 'MN', zip5: '55155')
72
+ cart_items = []
73
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'Shirt001', tic: '20010', quantity: 1, price: 10.00)
74
+ cart_items << TaxCloud::CartItem.new(index: 1, item_id: 'Gadget001', tic: '00000', quantity: 1, price: 10.00)
75
+ cart_items << TaxCloud::CartItem.new(index: 2, item_id: 'Shipping', tic: '11010', quantity: 1, price: 10.00)
76
+ transaction = test_transaction(cart_items, origin, destination)
77
+
78
+ result = transaction.lookup
79
+
80
+ expect(result.cart_items.size).to eq 3
81
+ expect(result.cart_items.detect { |i| i.cart_item_index == 0 }.tax_amount).to eq 0
82
+ expect(result.cart_items.detect { |i| i.cart_item_index == 1 }.tax_amount).to eq 0.79
83
+ expect(result.cart_items.detect { |i| i.cart_item_index == 2 }.tax_amount).to eq 0.79
84
+
85
+ # capture = transaction.authorized_with_capture
86
+ # expect(capture).to eq('OK')
87
+ end
88
+
89
+ it 'TaxCloud Test Case 3: Item taxable, shipping not taxable' do
90
+ destination = TaxCloud::Address.new(address1: '2300 N Lincoln Blvd', city: 'Oklahoma City', state: 'OK', zip5: '73105')
91
+ cart_items = []
92
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'Shirt002', tic: '20010', quantity: 1, price: 10.00)
93
+ cart_items << TaxCloud::CartItem.new(index: 1, item_id: 'Shipping', tic: '11010', quantity: 1, price: 10.00)
94
+ transaction = test_transaction(cart_items, origin, destination)
95
+
96
+ result = transaction.lookup
97
+
98
+ expect(result.cart_items.size).to eq 2
99
+ expect(result.cart_items.detect { |i| i.cart_item_index == 0 }.tax_amount).to eq 0.86
100
+ expect(result.cart_items.detect { |i| i.cart_item_index == 1 }.tax_amount).to eq 0
101
+
102
+ # capture = transaction.authorized_with_capture
103
+ # expect(capture).to eq('OK')
104
+ end
105
+
106
+ skip 'TaxCloud Test Case 4: Return all items in previous order' do
107
+ # TODO
108
+ end
109
+
110
+ skip 'TaxCloud Test Case 5: Return single item in previous order' do
111
+ # TODO
112
+ end
113
+
114
+ it 'TaxCloud Test Case 6: Item and shipping taxable' do
115
+ destination = TaxCloud::Address.new(address1: '384 Northyards Blvd NW', city: 'Atlanta', state: 'GA', zip5: '30313')
116
+ cart_items = []
117
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'Shirt003', tic: '20010', quantity: 1, price: 10.00)
118
+ cart_items << TaxCloud::CartItem.new(index: 1, item_id: 'Shipping', tic: '11010', quantity: 1, price: 10.00)
119
+ transaction = test_transaction(cart_items, origin, destination)
120
+
121
+ result = transaction.lookup
122
+
123
+ expect(result.cart_items.size).to eq 2
124
+ expect(result.cart_items.detect { |i| i.cart_item_index == 0 }.tax_amount).to eq 0.89
125
+ expect(result.cart_items.detect { |i| i.cart_item_index == 1 }.tax_amount).to eq 0.89
126
+ end
127
+
128
+ it 'TaxCloud Test Case 7: Handling errors' do
129
+ destination = TaxCloud::Address.new(address1: '384 Northyards Blvd NW', city: 'Atlanta', state: 'GA', zip5: '30313', zip4: '2440')
130
+ cart_items = []
131
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'Gadget002', tic: '00000', quantity: 1, price: -5.00)
132
+ transaction = test_transaction(cart_items, origin, destination)
133
+
134
+ expect { transaction.lookup }.to raise_error(TaxCloud::Errors::ApiError)
135
+
136
+ begin
137
+ transaction.lookup
138
+ rescue StandardError => e
139
+ expect(e.problem).to eq('Cart Item 0 has a negative Price (-5). Only positive values can be used')
140
+ end
141
+ end
142
+
143
+ context 'with discounts' do
144
+ it 'TaxCloud Test Case 3, with item discount' do
145
+ destination = TaxCloud::Address.new(address1: '2300 N Lincoln Blvd', city: 'Oklahoma City', state: 'OK', zip5: '73105')
146
+ cart_items = []
147
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'Shirt002', tic: '20010', quantity: 1, price: 5.00)
148
+ cart_items << TaxCloud::CartItem.new(index: 1, item_id: 'Shipping', tic: '11010', quantity: 1, price: 10.00)
149
+ transaction = test_transaction(cart_items, origin, destination)
150
+
151
+ result = transaction.lookup
152
+
153
+ expect(result.cart_items.size).to eq 2
154
+ expect(result.cart_items.detect { |i| i.cart_item_index == 0 }.tax_amount).to eq 0.43
155
+ expect(result.cart_items.detect { |i| i.cart_item_index == 1 }.tax_amount).to eq 0
156
+
157
+ # capture = transaction.authorized_with_capture
158
+ # expect(capture).to eq('OK')
159
+ end
160
+
161
+ it 'TaxCloud Test Case 3, with item discount, multiple items' do
162
+ destination = TaxCloud::Address.new(address1: '2300 N Lincoln Blvd', city: 'Oklahoma City', state: 'OK', zip5: '73105')
163
+ cart_items = []
164
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'Shirt002', tic: '20010', quantity: 2, price: 7.50)
165
+ cart_items << TaxCloud::CartItem.new(index: 1, item_id: 'Shipping', tic: '11010', quantity: 2, price: 20.00)
166
+ transaction = test_transaction(cart_items, origin, destination)
167
+
168
+ result = transaction.lookup
169
+
170
+ expect(result.cart_items.size).to eq 2
171
+ expect(result.cart_items.detect { |i| i.cart_item_index == 0 }.tax_amount).to eq 1.29
172
+ expect(result.cart_items.detect { |i| i.cart_item_index == 1 }.tax_amount).to eq 0
173
+
174
+ # capture = transaction.authorized_with_capture
175
+ # expect(capture).to eq('OK')
176
+ end
177
+
178
+ it 'TaxCloud Test Case 6, with shipping promotion' do
179
+ destination = TaxCloud::Address.new(address1: '384 Northyards Blvd NW', city: 'Atlanta', state: 'GA', zip5: '30313')
180
+ cart_items = []
181
+ cart_items << TaxCloud::CartItem.new(index: 0, item_id: 'Shirt003', tic: '20010', quantity: 1, price: 10.00)
182
+ cart_items << TaxCloud::CartItem.new(index: 1, item_id: 'Shipping', tic: '11010', quantity: 1, price: 0.00)
183
+ transaction = test_transaction(cart_items, origin, destination)
184
+
185
+ result = transaction.lookup
186
+
187
+ expect(result.cart_items.size).to eq 2
188
+ expect(result.cart_items.detect { |i| i.cart_item_index == 0 }.tax_amount).to eq 0.89
189
+ expect(result.cart_items.detect { |i| i.cart_item_index == 1 }.tax_amount).to eq 0.00
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Configure Rails Environment
4
+ ENV['RAILS_ENV'] = 'test'
5
+
6
+ # Run Coverage report
7
+ require 'solidus_dev_support/rspec/coverage'
8
+
9
+ require File.expand_path('dummy/config/environment.rb', __dir__).tap { |file|
10
+ # Create the dummy app if it's still missing.
11
+ system 'bin/rake extension:test_app' unless File.exist? file
12
+ }
13
+
14
+ # Requires factories and other useful helpers defined in spree_core.
15
+ require 'solidus_dev_support/rspec/feature_helper'
16
+
17
+ # Requires supporting ruby files with custom matchers and macros, etc,
18
+ # in spec/support/ and its subdirectories.
19
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
20
+
21
+ # Requires factories defined in lib/solidus_tax_cloud/factories.rb
22
+ require 'solidus_tax_cloud/factories'
23
+
24
+ RSpec.configure do |config|
25
+ config.infer_spec_type_from_file_location!
26
+ config.use_transactional_fixtures = false
27
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module TestingSupport
5
+ module CapybaraHelpers
6
+ def sign_in_as!(user)
7
+ visit spree.login_path
8
+ within '#new_spree_user' do
9
+ fill_in 'Email', with: user.email
10
+ fill_in 'Password', with: user.password
11
+ end
12
+ click_button 'Login'
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ RSpec.configure do |config|
19
+ config.include Spree::TestingSupport::CapybaraHelpers, type: :feature
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.configure do |config|
4
+ # Official verification and test harness login credentials provided 7/8/14
5
+ # by David Campbell of The Federal Tax Authority.
6
+ # This account is configured to collect sales tax in the 24 SSUTA states:
7
+ # AR, GA, IN, IA, KS, KY, MI, MN, NE, NV, NJ, NC, ND, OH, OK, RI, SD, TN, UT, VT, WA, WV, WI, and WY
8
+ # The account does not collect sales tax in the remaining sales tax states:
9
+ # AL, AK, AZ, CA, CO, CT, DC, FL, HI, ID, IL, LA, ME, MD, MA, MS, MO, NM, NY, PA, SC, TX, and VA
10
+ config.before :suite do
11
+ TaxCloud.configure do |config|
12
+ config.api_login_id = '2D7D820'
13
+ config.api_key = '0946110C-2AA9-4387-AD5C-4E1C551B8D0C'
14
+ end
15
+ end
16
+
17
+ config.before do
18
+ stub_spree_preferences(taxcloud_default_product_tic: '00000', taxcloud_shipping_tic: '11010')
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ def test_transaction(cart_items, origin, destination)
4
+ TaxCloud::Transaction.new(customer_id: SecureRandom.hex(8), cart_id: SecureRandom.hex(8), order_id: SecureRandom.hex(8), cart_items: cart_items, origin: origin, destination: destination)
5
+ end
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_tax_cloud
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jerrold Thompson
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-06-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: deface
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: savon
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.12.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.12.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: solidus_core
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 2.0.0
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '3'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 2.0.0
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '3'
61
+ - !ruby/object:Gem::Dependency
62
+ name: solidus_support
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.5'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0.5'
75
+ - !ruby/object:Gem::Dependency
76
+ name: tax_cloud
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 0.3.0
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 0.3.0
89
+ - !ruby/object:Gem::Dependency
90
+ name: solidus_dev_support
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ description: Solidus extension providing Tax Cloud services
104
+ email: jet@whidbey.com
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - ".circleci/config.yml"
110
+ - ".gem_release.yml"
111
+ - ".gitignore"
112
+ - ".rspec"
113
+ - ".rubocop.yml"
114
+ - ".rubocop_todo.yml"
115
+ - CHANGELOG.md
116
+ - Gemfile
117
+ - LICENSE
118
+ - README.md
119
+ - Rakefile
120
+ - TaxCloudImplementationVerificationGuide.pdf
121
+ - app/assets/javascripts/spree/backend/solidus_tax_cloud.js
122
+ - app/assets/javascripts/spree/frontend/solidus_tax_cloud.js
123
+ - app/assets/stylesheets/spree/backend/solidus_tax_cloud.css
124
+ - app/assets/stylesheets/spree/backend/solidus_tax_cloud.scss
125
+ - app/assets/stylesheets/spree/frontend/solidus_tax_cloud.css
126
+ - app/decorators/models/solidus_tax_cloud/spree/app_configuration_decorator.rb
127
+ - app/decorators/models/solidus_tax_cloud/spree/line_item_decorator.rb
128
+ - app/decorators/models/solidus_tax_cloud/spree/order_decorator.rb
129
+ - app/decorators/models/solidus_tax_cloud/spree/product_decorator.rb
130
+ - app/decorators/models/solidus_tax_cloud/spree/shipment_decorator.rb
131
+ - app/models/spree/calculator/tax_cloud_calculator.rb
132
+ - app/models/spree/tax_cloud.rb
133
+ - app/overrides/spree/admin/products/_form.rb
134
+ - app/overrides/spree/admin/shared/_configuration_menu.rb
135
+ - bin/console
136
+ - bin/r
137
+ - bin/rails
138
+ - bin/rake
139
+ - bin/sandbox
140
+ - bin/sandbox_rails
141
+ - bin/setup
142
+ - config/initializers/tax_cloud_usps_username.rb
143
+ - config/locales/en.yml
144
+ - config/routes.rb
145
+ - db/migrate/20121220192438_create_spree_tax_cloud_transactions.rb
146
+ - db/migrate/20121220193944_create_spree_tax_cloud_cart_items.rb
147
+ - db/migrate/20130829215819_fix_scale_of_cart_item_prices.rb
148
+ - db/migrate/20140623225628_add_tic_to_products.rb
149
+ - lib/assets/javascripts/spree/frontend/solidus_tax_cloud.js.erb
150
+ - lib/assets/stylesheets/spree/frontend/solidus_tax_cloud.css.erb
151
+ - lib/controllers/backend/spree/admin/tax_cloud_settings_controller.rb
152
+ - lib/decorators/backend/controllers/solidus_tax_cloud/spree/admin/orders_controller_decorator.rb
153
+ - lib/decorators/frontend/controllers/solidus_tax_cloud/spree/checkout_controller_decorator.rb
154
+ - lib/generators/solidus_tax_cloud/install/install_generator.rb
155
+ - lib/generators/solidus_tax_cloud/templates/ca-bundle.crt
156
+ - lib/solidus_tax_cloud.rb
157
+ - lib/solidus_tax_cloud/engine.rb
158
+ - lib/solidus_tax_cloud/error.rb
159
+ - lib/solidus_tax_cloud/factories.rb
160
+ - lib/solidus_tax_cloud/version.rb
161
+ - lib/tasks/.gitkeep
162
+ - lib/tasks/tax_cloud.rake
163
+ - lib/views/backend/spree/admin/products/_edit_tax_cloud_tic.html.erb
164
+ - lib/views/backend/spree/admin/tax_cloud_settings/edit.html.erb
165
+ - solidus_tax_cloud.gemspec
166
+ - spec/features/checkout_spec.rb
167
+ - spec/models/tax_cloud_api_spec.rb
168
+ - spec/spec_helper.rb
169
+ - spec/support/capybara.rb
170
+ - spec/support/tax_cloud.rb
171
+ - spec/support/transactions.rb
172
+ homepage: https://github.com/solidusio-contrib/solidus_tax_cloud
173
+ licenses:
174
+ - BSD-3-Clause
175
+ metadata:
176
+ homepage_uri: https://github.com/solidusio-contrib/solidus_tax_cloud
177
+ source_code_uri: https://github.com/solidusio-contrib/solidus_tax_cloud
178
+ changelog_uri: https://github.com/solidusio-contrib/solidus_tax_cloud/blob/master/CHANGELOG.md
179
+ post_install_message:
180
+ rdoc_options: []
181
+ require_paths:
182
+ - lib
183
+ required_ruby_version: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '2.5'
188
+ required_rubygems_version: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ requirements: []
194
+ rubygems_version: 3.0.8
195
+ signing_key:
196
+ specification_version: 4
197
+ summary: Solidus extension providing Tax Cloud services
198
+ test_files:
199
+ - spec/features/checkout_spec.rb
200
+ - spec/models/tax_cloud_api_spec.rb
201
+ - spec/spec_helper.rb
202
+ - spec/support/capybara.rb
203
+ - spec/support/tax_cloud.rb
204
+ - spec/support/transactions.rb