Ruby gem to calculate sales tax using
Switch branches/tags
Nothing to show
Pull request Compare This branch is 80 commits behind drewtempelmeyer:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



TaxCloud is a service to calculate sales tax and generate tax reports. tax_cloud allows you to easily integrate with TaxCloud's API.


Add the gem to your Gemfile

gem 'tax_cloud', '~> 0.1.0'

Configure your environment. For example, create an initializer in Rails in config/initializers/tax_cloud.rb

TaxCloud.configure do |config|
  config.api_login_id = 'your_tax_cloud_api_login_id'
  config.api_key = 'your_tax_cloud_api_key'
  config.usps_username = 'your_usps_username'

Using TaxCloud

Define the destination and origin addresses using TaxCloud::Address.

origin = => '123 Fake Street', :city => 'New York', :state => 'NY', :zip5 => '10001')
destination = => '239 Hollywood Drive', :city => 'Beverly Hills', :state => 'CA', :zip5 => '90210')

Create your Transaction and set up your cart items

transaction = => '1', :cart_id => '1', :origin => origin, :destination => destination)
transaction.cart_items << => 0, :item_id => 'SKU-100', :tic => TaxCloud::TaxCodes::GENERAL, :price => 10.00, :quantity => 1)
lookup = transaction.lookup # this will return a Savon response object

After you've authorized and captured the transaction via your merchant account, you should do the same with TaxCloud for maintaining accurate tax information.

transaction.order_id = 100
transaction.authorized_with_capture # return Savon response object

Later, you may need to mark some cart items as returned. TaxCloud will ignore any cart items that you don't include

transaction.order_id = 100
transaction.cart_items << => 0, :item_id => 'SKU-100', :tic => TaxCloud::TaxCodes::GENERAL, :price => 10.00, :quantity => 1)
transaction.returned # return Savon response object

Running Tests

  • Add your config details to test/helper

  • VCR and WebMock are used to replay requests and avoid hitting the API each time. To refresh the mocks, simply delete the test/cassettes directory.

  • The mocks will filter out your config details, but remember not to commit them!

  • run rake test


  • Instead of returning Savon response objects, it should return TransactionLookupResponse, TransactionAuthorizedResponse, TransactionCapturedResponse, etc.

  • Add all tax codes to TaxCloud::TaxCodes

Bugs, fixes, etc

  • Fork.

  • Write test(s).

  • Fix.

  • Commit.

  • Submit pull request.