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,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.