solidus_tax_cloud 1.0.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 (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,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 20b4d66520389e051076fdd58aa7de4080eeeffee2babf41452b45b8689a63f8
4
+ data.tar.gz: 001a5eef20c3bff00fc4f13a187e48e5c4f5c359cc67e1fd306b8f5d824982f8
5
+ SHA512:
6
+ metadata.gz: eb8ad3bafea4e12d9a02d5662cce6b6d1bb5bf1023de66823d4a564d16e4d50ba28df5333208bced389c6fd47216154d5f1633f4f3232080ea0942fd061ec412
7
+ data.tar.gz: c5d9c12d8dc9e6c84815fac5aa6bcb9fa56d011099ffd4deb50c03c311b866ef61eba86a6655f46759e0b0fe41e74df01ec5c232918c804f3c6ae8f57db15f7a
@@ -0,0 +1,35 @@
1
+ version: 2.1
2
+
3
+ orbs:
4
+ # Always take the latest version of the orb, this allows us to
5
+ # run specs against Solidus supported versions only without the need
6
+ # to change this configuration every time a Solidus version is released
7
+ # or goes EOL.
8
+ solidusio_extensions: solidusio/extensions@volatile
9
+
10
+ jobs:
11
+ run-specs-with-postgres:
12
+ executor: solidusio_extensions/postgres
13
+ steps:
14
+ - solidusio_extensions/run-tests
15
+ run-specs-with-mysql:
16
+ executor: solidusio_extensions/mysql
17
+ steps:
18
+ - solidusio_extensions/run-tests
19
+
20
+ workflows:
21
+ "Run specs on supported Solidus versions":
22
+ jobs:
23
+ - run-specs-with-postgres
24
+ - run-specs-with-mysql
25
+ "Weekly run specs against master":
26
+ triggers:
27
+ - schedule:
28
+ cron: "0 0 * * 4" # every Thursday
29
+ filters:
30
+ branches:
31
+ only:
32
+ - master
33
+ jobs:
34
+ - run-specs-with-postgres
35
+ - run-specs-with-mysql
@@ -0,0 +1,5 @@
1
+ bump:
2
+ recurse: false
3
+ file: 'lib/solidus_tax_cloud/version.rb'
4
+ message: Bump SolidusTaxCloud to %{version}
5
+ tag: true
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ \#*
3
+ *~
4
+ .#*
5
+ .DS_Store
6
+ .idea
7
+ .project
8
+ .sass-cache
9
+ coverage
10
+ Gemfile.lock
11
+ tmp
12
+ nbproject
13
+ pkg
14
+ *.swp
15
+ spec/dummy
16
+ spec/examples.txt
17
+ /sandbox
18
+ .rvmrc
19
+ .ruby-version
20
+ .ruby-gemset
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -0,0 +1,7 @@
1
+ require:
2
+ - solidus_dev_support/rubocop
3
+
4
+ AllCops:
5
+ Exclude:
6
+ - sandbox/**/*
7
+ - spec/dummy/**/*
@@ -0,0 +1,132 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2020-01-21 15:17:04 +0100 using RuboCop version 0.76.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 7
10
+ # Cop supports --auto-correct.
11
+ Capybara/CurrentPathExpectation:
12
+ Exclude:
13
+ - 'spec/features/checkout_spec.rb'
14
+
15
+ # Offense count: 1
16
+ Lint/AmbiguousOperator:
17
+ Exclude:
18
+ - 'lib/solidus_tax_cloud/engine.rb'
19
+
20
+ # Offense count: 1
21
+ # Configuration parameters: AllowComments.
22
+ Lint/HandleExceptions:
23
+ Exclude:
24
+ - 'app/models/spree/tax_cloud.rb'
25
+
26
+ # Offense count: 1
27
+ Lint/ShadowingOuterLocalVariable:
28
+ Exclude:
29
+ - 'spec/support/tax_cloud.rb'
30
+
31
+ # Offense count: 1
32
+ Lint/UselessAssignment:
33
+ Exclude:
34
+ - 'spec/features/checkout_spec.rb'
35
+
36
+ # Offense count: 1
37
+ # Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist, MethodDefinitionMacros.
38
+ # NamePrefix: is_, has_, have_
39
+ # NamePrefixBlacklist: is_, has_, have_
40
+ # NameWhitelist: is_a?
41
+ # MethodDefinitionMacros: define_method, define_singleton_method
42
+ Naming/PredicateName:
43
+ Exclude:
44
+ - 'spec/**/*'
45
+ - 'app/decorators/models/solidus_tax_cloud/spree/order_decorator.rb'
46
+
47
+ # Offense count: 2
48
+ RSpec/DescribeClass:
49
+ Exclude:
50
+ - 'spec/features/checkout_spec.rb'
51
+ - 'spec/models/tax_cloud_api_spec.rb'
52
+
53
+ # Offense count: 14
54
+ RSpec/LetSetup:
55
+ Exclude:
56
+ - 'spec/features/checkout_spec.rb'
57
+
58
+ # Offense count: 21
59
+ # Configuration parameters: AggregateFailuresByDefault.
60
+ RSpec/MultipleExpectations:
61
+ Max: 11
62
+
63
+ # Offense count: 4
64
+ RSpec/RepeatedExample:
65
+ Exclude:
66
+ - 'spec/features/checkout_spec.rb'
67
+ - 'spec/models/tax_cloud_api_spec.rb'
68
+
69
+ # Offense count: 1
70
+ # Configuration parameters: EnforcedStyle.
71
+ # SupportedStyles: slashes, arguments
72
+ Rails/FilePath:
73
+ Exclude:
74
+ - 'lib/tasks/tax_cloud.rake'
75
+
76
+ # Offense count: 1
77
+ # Cop supports --auto-correct.
78
+ # Configuration parameters: Include.
79
+ # Include: app/models/**/*.rb
80
+ Rails/FindBy:
81
+ Exclude:
82
+ - 'app/models/spree/tax_cloud.rb'
83
+
84
+ # Offense count: 2
85
+ # Configuration parameters: Include.
86
+ # Include: **/Rakefile, **/*.rake
87
+ Rails/RakeEnvironment:
88
+ Exclude:
89
+ - 'lib/tasks/tax_cloud.rake'
90
+
91
+ # Offense count: 1
92
+ # Configuration parameters: Blacklist, Whitelist.
93
+ # Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters
94
+ Rails/SkipsModelValidations:
95
+ Exclude:
96
+ - 'spec/features/checkout_spec.rb'
97
+
98
+ # Offense count: 1
99
+ # Cop supports --auto-correct.
100
+ # Configuration parameters: AutoCorrect, EnforcedStyle.
101
+ # SupportedStyles: nested, compact
102
+ Style/ClassAndModuleChildren:
103
+ Exclude:
104
+ - 'app/models/spree/calculator/tax_cloud_calculator.rb'
105
+
106
+ # Offense count: 6
107
+ # Configuration parameters: MinBodyLength.
108
+ Style/GuardClause:
109
+ Exclude:
110
+ - 'app/controllers/spree/admin/tax_cloud_settings_controller.rb'
111
+ - 'app/decorators/models/solidus_tax_cloud/spree/line_item_decorator.rb'
112
+ - 'app/decorators/models/solidus_tax_cloud/spree/shipment_decorator.rb'
113
+ - 'app/models/spree/calculator/tax_cloud_calculator.rb'
114
+ - 'lib/solidus_tax_cloud/engine.rb'
115
+
116
+ # Offense count: 1
117
+ # Configuration parameters: AllowIfModifier.
118
+ Style/IfInsideElse:
119
+ Exclude:
120
+ - 'lib/tasks/tax_cloud.rake'
121
+
122
+ # Offense count: 1
123
+ Style/MixinUsage:
124
+ Exclude:
125
+ - 'lib/tasks/tax_cloud.rake'
126
+
127
+ # Offense count: 62
128
+ # Cop supports --auto-correct.
129
+ # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
130
+ # URISchemes: http, https
131
+ Metrics/LineLength:
132
+ Max: 260
@@ -0,0 +1,52 @@
1
+ # Changelog
2
+
3
+ ## [v1.0.0](https://github.com/solidusio-contrib/solidus_tax_cloud/tree/v1.0.0) (2020-06-05)
4
+
5
+ [Full Changelog](https://github.com/solidusio-contrib/solidus_tax_cloud/compare/aaf557d4c0635f5e7d4211fff6c519f95d6e882c...v1.0.0)
6
+
7
+ **Fixed bugs:**
8
+
9
+ - Revert removal of `require 'tax\_cloud'` in \#34 [\#37](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/37) ([brchristian](https://github.com/brchristian))
10
+
11
+ **Closed issues:**
12
+
13
+ - DEPRECATION WARNING: SolidusSupport::EngineExtensions::Decorators is deprecated! [\#42](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/42)
14
+ - PR \#34 Broke Extension [\#36](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/36)
15
+ - Dependabot couldn't find a Gemfile-local for this project [\#35](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/35)
16
+ - Dependabot can't resolve your Ruby dependency files [\#33](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/33)
17
+ - Dependabot can't resolve your Ruby dependency files [\#32](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/32)
18
+ - Dependabot can't resolve your Ruby dependency files [\#31](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/31)
19
+ - Dependabot can't resolve your Ruby dependency files [\#29](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/29)
20
+ - Dependabot can't resolve your Ruby dependency files [\#28](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/28)
21
+ - Dependabot can't resolve your Ruby dependency files [\#27](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/27)
22
+ - solids\_tax\_cloud does not work for Rails version 5.2.0 and above [\#18](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/18)
23
+ - Tests don't pass on Solidus 2.6 [\#14](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/14)
24
+ - Configuration is wiped every time I restart server [\#4](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/4)
25
+ - USPS ID is no longer required by TaxCloud API [\#3](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/3)
26
+ - Translations missing for form labels [\#2](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/2)
27
+ - Compatibility with Solidus 2.1.0? [\#1](https://github.com/solidusio-contrib/solidus_tax_cloud/issues/1)
28
+
29
+ **Merged pull requests:**
30
+
31
+ - Update extension template with solidus\_dev\_support [\#43](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/43) ([aldesantis](https://github.com/aldesantis))
32
+ - Handle combined Address first name and last name [\#41](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/41) ([filippoliverani](https://github.com/filippoliverani))
33
+ - Relax Solidus Support dependency [\#40](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/40) ([kennyadsl](https://github.com/kennyadsl))
34
+ - Fix Dependabot looking for Gemfile-local [\#38](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/38) ([aldesantis](https://github.com/aldesantis))
35
+ - Upgrade the extension using solidus\_dev\_support [\#34](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/34) ([blocknotes](https://github.com/blocknotes))
36
+ - rename solidus\_extension\_dev\_tools -\> solidus\_dev\_support [\#30](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/30) ([brchristian](https://github.com/brchristian))
37
+ - Fix grammar/syntax in checkout\_spec [\#26](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/26) ([brchristian](https://github.com/brchristian))
38
+ - Adopt solidus\_extension\_dev\_tools [\#25](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/25) ([aldesantis](https://github.com/aldesantis))
39
+ - Fix CircleCI build [\#22](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/22) ([aldesantis](https://github.com/aldesantis))
40
+ - Adopt CircleCI instead of Travis [\#21](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/21) ([aldesantis](https://github.com/aldesantis))
41
+ - Fix Travis build [\#20](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/20) ([aitbw](https://github.com/aitbw))
42
+ - Fix race conditions with asynchronous cache stores [\#19](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/19) ([aldesantis](https://github.com/aldesantis))
43
+ - Add deface dependency [\#17](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/17) ([alepore](https://github.com/alepore))
44
+ - Adds Travis test matrix for versions supported by master [\#15](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/15) ([jeffreyguenther](https://github.com/jeffreyguenther))
45
+ - Revises tax calculations to account for discounts [\#13](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/13) ([jeffreyguenther](https://github.com/jeffreyguenther))
46
+ - Fixes whitespace matches [\#12](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/12) ([jeffreyguenther](https://github.com/jeffreyguenther))
47
+ - Adds puma to Gemfile [\#11](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/11) ([jeffreyguenther](https://github.com/jeffreyguenther))
48
+ - Adding missing translations for the form labels [\#5](https://github.com/solidusio-contrib/solidus_tax_cloud/pull/5) ([funwhilelost](https://github.com/funwhilelost))
49
+
50
+
51
+
52
+ \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
data/Gemfile ADDED
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
5
+
6
+ branch = ENV.fetch('SOLIDUS_BRANCH', 'master')
7
+ gem 'solidus', github: 'solidusio/solidus', branch: branch
8
+
9
+ # Needed to help Bundler figure out how to resolve dependencies,
10
+ # otherwise it takes forever to resolve them.
11
+ # See https://github.com/bundler/bundler/issues/6677
12
+ gem 'rails', '>0.a'
13
+
14
+ # Provides basic authentication functionality for testing parts of your engine
15
+ gem 'solidus_auth_devise'
16
+
17
+ case ENV['DB']
18
+ when 'mysql'
19
+ gem 'mysql2'
20
+ when 'postgresql'
21
+ gem 'pg'
22
+ else
23
+ gem 'sqlite3'
24
+ end
25
+
26
+ gemspec
27
+
28
+ # Use a local Gemfile to include development dependencies that might not be
29
+ # relevant for the project or for other contributors, e.g. pry-byebug.
30
+ #
31
+ # We use `send` instead of calling `eval_gemfile` to work around an issue with
32
+ # how Dependabot parses projects: https://github.com/dependabot/dependabot-core/issues/1658.
33
+ send(:eval_gemfile, 'Gemfile-local') if File.exist? 'Gemfile-local'
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2012 Jerrold Thompson
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Solidus nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,130 @@
1
+ # Solidus::TaxCloud
2
+
3
+ [![CircleCI](https://circleci.com/gh/solidusio-contrib/solidus_tax_cloud.svg?style=svg)](https://circleci.com/gh/solidusio-contrib/solidus_tax_cloud)
4
+
5
+ Solidus::TaxCloud is a US sales tax extension for Solidus using the Tax Cloud service.
6
+
7
+ ## Installation
8
+
9
+ ### Set up your TaxCloud account
10
+
11
+ If you don't have TaxCloud credentials, now is the time to create them. Sign up for a
12
+ [TaxCloud](https://taxcloud.com) account and note your API ID and API key.
13
+
14
+ Once you have the credentials, go to Your Account -> Tax States in the TaxCloud dashboard and turn
15
+ on sales tax collection for the states where you wish to collect sales tax.
16
+
17
+ ### Set up Solidus::TaxCloud
18
+
19
+ Once you have an account, add this extension to your Gemfile:
20
+
21
+ ```ruby
22
+ gem 'solidus_tax_cloud', github: 'solidusio-contrib/solidus_tax_cloud'
23
+ ```
24
+
25
+ Install the gem:
26
+
27
+ ```console
28
+ $ bundle install
29
+ ```
30
+
31
+ Run the installer:
32
+
33
+ ```console
34
+ $ bundle exec rails g solidus_tax_cloud:install
35
+ ```
36
+
37
+ Configure the extension with your TaxCloud credentials:
38
+
39
+ ```ruby
40
+ TaxCloud.configure do |config|
41
+ config.api_login_id = 'YOUR_TAX_CLOUD_API_ID'
42
+ config.api_key = 'YOUR_TAX_CLOUD_API_KEY'
43
+ end
44
+ ```
45
+
46
+ Finally, go to the Solidus backend and create a tax rate in order to apply rates obtained from
47
+ TaxCloud to your line items and shipments. You can use the following configuration:
48
+
49
+ - Name: Sales Tax
50
+ - Zone: USA
51
+ - Rate: 0.0 (because the actual rates will be applied by the calculator)
52
+ - Tax Category: Taxable
53
+ - Included in Price: no
54
+ - Show Rate in Label: no
55
+ - Calculator: Tax Cloud
56
+
57
+ If you wish, you may also configure the default Product TIC and Shipping TIC for TaxCloud to use in
58
+ Settings -> Store -> TaxCloud Settings. It is recommended to leave the defaults (`00000` for
59
+ products and `11010` for shipping) unless you know what you're doing.
60
+
61
+ ## Usage
62
+
63
+ Product-level TICs may be specified in the Products section of the Solidus backend. If you are
64
+ uncertain about the correct TIC for a product, you can get the TIC from
65
+ [TaxCloud](https://taxcloud.com/tic).
66
+
67
+ Other than that, everything should work automatically! Sales tax rates will be retrieved from
68
+ TaxCloud and applied to your orders.
69
+
70
+ ### Gotchas
71
+
72
+ Here are a few things to keep in mind:
73
+
74
+ - Solidus::TaxCloud is designed to function in a single TaxCategory. It is expected that all
75
+ products and shipping methods are in the same tax category as the one configured for the TaxCloud
76
+ tax rate.
77
+ - Solidus::TaxCloud is designed to perform all US-related tax calculation itself, and does not use
78
+ Solidus configurations like tax categories to determine whether goods are taxable, tax-exempt etc.
79
+ - Solidus::TaxCloud does not use the Solidus configuration `tax_address` (which specifies whether
80
+ the shipping or billing address should be used to compute tax). Instead, it _always_ uses the
81
+ shipping address if possible, only falling back to the billing address if the shipping address is
82
+ `nil`.
83
+
84
+ ## Testing
85
+
86
+ First bundle your dependencies, then run `bin/rake`. `bin/rake` will default to building the dummy
87
+ app if it does not exist, then it will run specs. The dummy app can be regenerated by using
88
+ `bin/rake extension:test_app`.
89
+
90
+ ```shell
91
+ bundle
92
+ bin/rake
93
+ ```
94
+
95
+ To run [Rubocop](https://github.com/bbatsov/rubocop) static code analysis run
96
+
97
+ ```shell
98
+ bundle exec rubocop
99
+ ```
100
+
101
+ When testing your application's integration with this extension you may use its factories.
102
+ Simply add this require statement to your spec_helper:
103
+
104
+ ```ruby
105
+ require '<%= file_name %>/factories'
106
+ ```
107
+
108
+ ## Sandbox app
109
+
110
+ To run this extension in a sandboxed Solidus application, you can run `bin/sandbox`. The path for
111
+ the sandbox app is `./sandbox` and `bin/rails` will forward any Rails command to
112
+ `sandbox/bin/rails`. Here's an example:
113
+
114
+ ```shell
115
+ $ bin/rails server
116
+ => Booting Puma
117
+ => Rails 6.0.2.1 application starting in development
118
+ * Listening on tcp://127.0.0.1:3000
119
+ Use Ctrl-C to stop
120
+ ```
121
+
122
+ ## Releasing
123
+
124
+ New extension versions can be released using `gem-release` like this:
125
+
126
+ ```shell
127
+ bundle exec gem bump -v VERSION --tag --push --remote upstream && gem release
128
+ ```
129
+
130
+ Copyright (c) 2012 Jerrold Thompson, released under the New BSD License.