taxjar 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9a7f32540b7e3ebf9ea9395b6f8c1222cb41560c
4
+ data.tar.gz: 0f628c4661506f255eee7ad29be2087e9962b6d6
5
+ SHA512:
6
+ metadata.gz: 64b6ad3c367c71885a720656877d4483e9018cc02221253435cf2d710a55f885c3237bcf0072af36ac5e5929d96da0d9975a99a9e0d58aef046ae1c2662ef756
7
+ data.tar.gz: 2bf57480e160a4bc1378e9a0c8dab12915fa9c3ae50320b93a76359f8e807f79bd812d4c17513a254777772ab68bc945681cc0d1b6555aa23b2b396eeddc4c81
@@ -0,0 +1,27 @@
1
+ *.gem
2
+ *.rbc
3
+ .DS_Store
4
+ .rvmrc
5
+ .ruby-version
6
+ .yardoc
7
+ .rake_tasks~
8
+ Gemfile.lock
9
+ coverage/*
10
+ doc/*
11
+ log/*
12
+ pkg/*
13
+ .idea/*
14
+ /.bundle/
15
+ /.yardoc
16
+ /Gemfile.lock
17
+ /_yardoc/
18
+ /coverage/
19
+ /doc/
20
+ /pkg/
21
+ /spec/reports/
22
+ /tmp/
23
+ *.bundle
24
+ *.so
25
+ *.o
26
+ *.a
27
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in taxjar.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Darren Johnson
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,70 @@
1
+ # Taxjar
2
+
3
+ Taxjar is a Ruby API wrapper for Taxjar's sales tax and tax rate API.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'taxjar'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install taxjar
20
+
21
+ ## Usage
22
+
23
+ Please reference the Taxjar [API Documentation](http://www.taxjar.com/api/docs/)
24
+
25
+ Configuration:
26
+ ```ruby
27
+ Taxjar.configure do |config|
28
+ config.auth_token = "authtokenstring"
29
+ end
30
+ ```
31
+
32
+
33
+ Sales tax:
34
+
35
+ ```ruby
36
+ options = {
37
+ amount: 10,
38
+ shipping: 2,
39
+ to_country: "US",
40
+ to_state: "NJ",
41
+ to_city: "Freehold",
42
+ to_zip: "07728",
43
+ from_country: "US",
44
+ from_state: "NJ",
45
+ from_city: "Ramsey",
46
+ from_zip: "07446"
47
+ }
48
+ response = Taxjar.client.sales_tax(options)
49
+ # => {"amount_to_collect"=>0.84, "rate"=>0.07, "has_nexus"=>true, "freight_taxable"=>true, "tax_source"=>"destination"}
50
+ ```
51
+
52
+ Tax rate lookup:
53
+
54
+ ```ruby
55
+ options = {
56
+ zip: "07446",
57
+ city: "Ramsey",
58
+ country: "US"
59
+ }
60
+ response = Taxjar.client.tax_rate(options)
61
+ # {"location"=>{"state"=>"NJ", "zip"=>"07446", "state_rate"=>"0.07", "city"=>"RAMSEY", "city_rate"=>"0.0", "county"=>"BERGEN", "county_rate"=>"0.0", "combined_district_rate"=>"0.0", "combined_rate"=>"0.07"}}
62
+ ```
63
+
64
+ ## Contributing
65
+
66
+ 1. Fork it ( https://github.com/djohnson/taxjar/fork )
67
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
68
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
69
+ 4. Push to the branch (`git push origin my-new-feature`)
70
+ 5. Create a new Pull Request
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require "rake/testtask"
4
+ Rake::TestTask.new do |test|
5
+ test.libs << "lib" << "test"
6
+ test.ruby_opts << "-rubygems"
7
+ test.pattern = 'test/**/*_test.rb'
8
+ test.verbose = true
9
+ end
10
+
@@ -0,0 +1,51 @@
1
+ require 'faraday'
2
+
3
+ module FaradayMiddleware
4
+
5
+ class RaiseHttpException < Faraday::Middleware
6
+ def call(env)
7
+ @app.call(env).on_complete do |response|
8
+ case response[:status].to_i
9
+ when 400
10
+ raise Taxjar::BadRequest, error_message_400(response)
11
+ when 401
12
+ raise Taxjar::NotAuthorized, error_message_400(response)
13
+ when 404
14
+ raise Taxjar::NotFound, error_message_400(response)
15
+ when 500
16
+ raise Taxjar::InternalServerError, error_message_500(response, "Something is technically wrong.")
17
+ when 504
18
+ raise Taxjar::GatewayTimeout, error_message_500(response, "504 Gateway Time-out")
19
+ end
20
+ end
21
+ end
22
+
23
+ def initialize(app)
24
+ super app
25
+ @parser = nil
26
+ end
27
+
28
+ private
29
+
30
+ def error_message_400(response)
31
+ "#{response[:method].to_s.upcase} #{response[:url].to_s}: #{response[:status]}#{error_body(response[:body])}"
32
+ end
33
+
34
+ def error_body(body)
35
+
36
+ body = ::JSON.parse(body) if not body.nil? and not body.empty? and body.kind_of?(String)
37
+
38
+ if body.nil?
39
+ nil
40
+ elsif body['meta'] and body['meta']['error_message'] and not body['meta']['error_message'].empty?
41
+ ": #{body['meta']['error_message']}"
42
+ elsif body['error_message'] and not body['error_message'].empty?
43
+ ": #{body['error_type']}: #{body['error_message']}"
44
+ end
45
+ end
46
+
47
+ def error_message_500(response, body=nil)
48
+ "#{response[:method].to_s.upcase} #{response[:url].to_s}: #{[response[:status].to_s + ':', body].compact.join(' ')}"
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,23 @@
1
+ require_relative "taxjar/version"
2
+ require_relative "taxjar/error"
3
+ require_relative "taxjar/configuration"
4
+ require_relative "taxjar/client"
5
+
6
+ module Taxjar
7
+ extend Configuration
8
+
9
+ def self.client(options={})
10
+ Taxjar::Client.new(options)
11
+ end
12
+
13
+ # Delegate to Taxjar::Client
14
+ def self.method_missing(method, *args, &block)
15
+ return super unless client.respond_to?(method)
16
+ client.send(method, *args, &block)
17
+ end
18
+
19
+ # Delegate to Taxjar::Client
20
+ def self.respond_to?(method, include_all=false)
21
+ return client.respond_to?(method, include_all) || super
22
+ end
23
+ end
@@ -0,0 +1,49 @@
1
+ require "faraday"
2
+ require 'faraday_middleware'
3
+ Dir[File.expand_path('../../faraday/*.rb', __FILE__)].each{|f| require f}
4
+
5
+ module Taxjar
6
+ class Client
7
+
8
+ attr_accessor *Configuration::VALID_CONFIG_KEYS
9
+ attr_reader :conn
10
+
11
+ def initialize(options={})
12
+ options = Taxjar.options.merge(options)
13
+
14
+ Configuration::VALID_CONFIG_KEYS.each do |key|
15
+ send("#{key}=", options[key])
16
+ end
17
+
18
+ setup_conn
19
+ end
20
+
21
+ def sales_tax(options={})
22
+ response = @conn.get "/sales_tax", options
23
+ response.body
24
+ end
25
+
26
+ def tax_rate(options={})
27
+ response = @conn.get "/locations/#{options.delete(:zip)}", options
28
+ response.body
29
+ end
30
+
31
+ private
32
+
33
+ def setup_conn
34
+ options = {
35
+ :headers => {'Accept' => "application/#{format}; charset=utf-8", 'User-Agent' => user_agent},
36
+ :proxy => proxy,
37
+ :url => endpoint,
38
+ }.merge(connection_options)
39
+
40
+ @conn = Faraday::Connection.new(options) do |c|
41
+ c.token_auth self.auth_token
42
+ c.use FaradayMiddleware::ParseJson
43
+ c.use FaradayMiddleware::RaiseHttpException
44
+ c.adapter(adapter)
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,50 @@
1
+ require "faraday"
2
+
3
+ module Taxjar
4
+ module Configuration
5
+ VALID_CONFIG_KEYS = [
6
+ :adapter,
7
+ :auth_token,
8
+ :endpoint,
9
+ :format,
10
+ :proxy,
11
+ :user_agent,
12
+ :connection_options ]
13
+
14
+ DEFAULT_ADAPTER = Faraday.default_adapter
15
+ DEFAULT_AUTH_TOKEN = "dae79dc5154ccabd7cb169f616d605e7"
16
+ DEFAULT_ENDPOINT = "https://api.taxjar.com".freeze
17
+ DEFAULT_FORMAT = :json
18
+ DEFAULT_PROXY = nil
19
+ DEFAULT_USER_AGENT = "Taxjar ruby Gem #{Taxjar::VERSION}".freeze
20
+
21
+ DEFAULT_CONNECTION_OPTIONS = {}
22
+
23
+ attr_accessor *VALID_CONFIG_KEYS
24
+
25
+ def self.extended(base)
26
+ base.reset
27
+ end
28
+
29
+ def configure
30
+ yield self
31
+ end
32
+
33
+ def options
34
+ VALID_CONFIG_KEYS.inject({}) do |option, key|
35
+ option.merge!(key => send(key))
36
+ end
37
+ end
38
+
39
+ def reset
40
+ self.adapter = DEFAULT_ADAPTER
41
+ self.endpoint = DEFAULT_ENDPOINT
42
+ self.auth_token = DEFAULT_AUTH_TOKEN
43
+ self.format = DEFAULT_FORMAT
44
+ self.proxy = DEFAULT_PROXY
45
+ self.user_agent = DEFAULT_USER_AGENT
46
+ self.connection_options = DEFAULT_CONNECTION_OPTIONS
47
+ end
48
+
49
+ end # Configuration
50
+ end
@@ -0,0 +1,17 @@
1
+ module Taxjar
2
+ # Custom error class for rescuing from all Taxjar errors
3
+ class Error < StandardError; end
4
+
5
+ # Raised when Taxjar returns the HTTP status code 400
6
+ class BadRequest < Error; end
7
+
8
+ # Raised when Taxjar returns the HTTP status code 401
9
+ class NotAuthorized < Error; end
10
+
11
+ # Raised when Taxjar returns the HTTP status code 404
12
+ class NotFound < Error; end
13
+
14
+ # Raised when Taxjar returns the HTTP status code 500
15
+ class InternalServerError < Error; end
16
+
17
+ end
@@ -0,0 +1,3 @@
1
+ module Taxjar
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'taxjar/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "taxjar"
8
+ spec.version = Taxjar::VERSION
9
+ spec.authors = ["Darren Johnson"]
10
+ spec.email = ["darrenbjohnson@gmail.com"]
11
+ spec.summary = %q{A Ruby wrapper for the Taxjar API}
12
+ spec.description = %q{A Ruby wrapper for the Taxjar API's sales tax and tax rate endpoints}
13
+ spec.homepage = "http://github.com/djohnson/taxjar"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "minitest", "~> 5.0"
24
+ spec.add_development_dependency 'vcr', '~> 2.9', '>= 2.9.0'
25
+ spec.add_development_dependency 'webmock', '~> 1.20', '>= 1.20.0'
26
+
27
+ spec.add_runtime_dependency "faraday", ['>= 0.7', '< 0.10']
28
+ spec.add_runtime_dependency "faraday_middleware", ['>= 0.8', '< 0.10']
29
+ spec.add_runtime_dependency "multi_json", ">= 1.0.3", "~> 1.0"
30
+
31
+ end
@@ -0,0 +1,56 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.taxjar.com/sales_tax?amount=10&from_city=Ramsey&from_country=US&from_state=NJ&from_zip=07446&shipping=2&to_city=Freehold&to_country=US&to_state=NJ&to_zip=07728
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.0
12
+ Authorization:
13
+ - Token token="dae79dc5154ccabd7cb169f616d605e7"
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - Cowboy
25
+ Connection:
26
+ - close
27
+ Date:
28
+ - Tue, 30 Dec 2014 19:59:20 GMT
29
+ Status:
30
+ - 200 OK
31
+ X-Frame-Options:
32
+ - SAMEORIGIN
33
+ X-Xss-Protection:
34
+ - 1; mode=block
35
+ X-Content-Type-Options:
36
+ - nosniff
37
+ X-Ua-Compatible:
38
+ - chrome=1
39
+ Content-Type:
40
+ - application/json; charset=utf-8
41
+ Etag:
42
+ - '"a9ea7272ca4facfde21f8e196a21790a"'
43
+ Cache-Control:
44
+ - max-age=0, private, must-revalidate
45
+ X-Request-Id:
46
+ - 49407c82-e7a6-4c7e-a1fa-3c0761c4ce42
47
+ X-Runtime:
48
+ - '0.023674'
49
+ Via:
50
+ - 1.1 vegur
51
+ body:
52
+ encoding: UTF-8
53
+ string: '{"amount_to_collect":0.84,"rate":0.07,"has_nexus":true,"freight_taxable":true,"tax_source":"destination"}'
54
+ http_version:
55
+ recorded_at: Tue, 30 Dec 2014 19:59:20 GMT
56
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,56 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.taxjar.com/locations/07446?city=Ramsey&country=US
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.0
12
+ Authorization:
13
+ - Token token="dae79dc5154ccabd7cb169f616d605e7"
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - Cowboy
25
+ Connection:
26
+ - close
27
+ Date:
28
+ - Tue, 30 Dec 2014 20:42:38 GMT
29
+ Status:
30
+ - 200 OK
31
+ X-Frame-Options:
32
+ - SAMEORIGIN
33
+ X-Xss-Protection:
34
+ - 1; mode=block
35
+ X-Content-Type-Options:
36
+ - nosniff
37
+ X-Ua-Compatible:
38
+ - chrome=1
39
+ Content-Type:
40
+ - application/json; charset=utf-8
41
+ Etag:
42
+ - '"4c698edaabe3530060a6a8280016359a"'
43
+ Cache-Control:
44
+ - max-age=0, private, must-revalidate
45
+ X-Request-Id:
46
+ - de103f0f-274a-4d4a-b064-6c58faa5adc5
47
+ X-Runtime:
48
+ - '0.012139'
49
+ Via:
50
+ - 1.1 vegur
51
+ body:
52
+ encoding: UTF-8
53
+ string: '{"location":{"state":"NJ","zip":"07446","state_rate":"0.07","city":"RAMSEY","city_rate":"0.0","county":"BERGEN","county_rate":"0.0","combined_district_rate":"0.0","combined_rate":"0.07"}}'
54
+ http_version:
55
+ recorded_at: Tue, 30 Dec 2014 20:42:38 GMT
56
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,47 @@
1
+ require "test_helper"
2
+
3
+ describe Taxjar::Client do
4
+
5
+ describe ".sales_tax" do
6
+ before do
7
+ @options = {
8
+ amount: 10,
9
+ shipping: 2,
10
+ to_country: "US",
11
+ to_state: "NJ",
12
+ to_city: "Freehold",
13
+ to_zip: "07728",
14
+ from_country: "US",
15
+ from_state: "NJ",
16
+ from_city: "Ramsey",
17
+ from_zip: "07446"
18
+ }
19
+ end
20
+
21
+ it "should return a SalesTax" do
22
+ VCR.use_cassette("sales_tax") do
23
+ response = Taxjar::Client.new.sales_tax(@options)
24
+ response.must_be :hash
25
+ end
26
+ end
27
+ end
28
+
29
+ describe ".tax_rate" do
30
+ before do
31
+ @options = {
32
+ zip: "07446",
33
+ city: "Ramsey",
34
+ country: "US"
35
+ }
36
+ end
37
+
38
+ it "should return a TaxRate" do
39
+ VCR.use_cassette("tax_rate") do
40
+ response = Taxjar::Client.new.tax_rate(@options)
41
+ response.must_be :hash
42
+ end
43
+ end
44
+ end
45
+
46
+
47
+ end
@@ -0,0 +1,27 @@
1
+ require "./test/test_helper"
2
+
3
+ describe "configuration" do
4
+
5
+ after do
6
+ Taxjar.reset
7
+ end
8
+
9
+ Taxjar::Configuration::VALID_CONFIG_KEYS.each do |key|
10
+ describe ".#{key}" do
11
+ it "should return the default value" do
12
+ Taxjar.send(key).must_equal Taxjar::Configuration.const_get("DEFAULT_#{key.upcase}")
13
+ end
14
+ end
15
+ end
16
+
17
+ describe ".configure" do
18
+ Taxjar::Configuration::VALID_CONFIG_KEYS.each do |key|
19
+ it "should set the #{key}" do
20
+ Taxjar.configure do |config|
21
+ config.send("#{key}=", key)
22
+ Taxjar.send(key).must_equal key
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,7 @@
1
+ require "test_helper"
2
+
3
+ describe Taxjar do
4
+ it "should have a version" do
5
+ Taxjar::VERSION.wont_be_nil
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require "taxjar"
2
+ require "minitest/spec"
3
+ require "minitest/autorun"
4
+ require "webmock/minitest"
5
+ require "vcr"
6
+
7
+ VCR.configure do |c|
8
+ c.cassette_library_dir = "test/fixtures"
9
+ c.hook_into :webmock
10
+ end
metadata ADDED
@@ -0,0 +1,210 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: taxjar
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Darren Johnson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: vcr
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.9'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 2.9.0
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '2.9'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 2.9.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: webmock
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.20'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 1.20.0
85
+ type: :development
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '1.20'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 1.20.0
95
+ - !ruby/object:Gem::Dependency
96
+ name: faraday
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0.7'
102
+ - - "<"
103
+ - !ruby/object:Gem::Version
104
+ version: '0.10'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0.7'
112
+ - - "<"
113
+ - !ruby/object:Gem::Version
114
+ version: '0.10'
115
+ - !ruby/object:Gem::Dependency
116
+ name: faraday_middleware
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0.8'
122
+ - - "<"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.10'
125
+ type: :runtime
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0.8'
132
+ - - "<"
133
+ - !ruby/object:Gem::Version
134
+ version: '0.10'
135
+ - !ruby/object:Gem::Dependency
136
+ name: multi_json
137
+ requirement: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: 1.0.3
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '1.0'
145
+ type: :runtime
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: 1.0.3
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '1.0'
155
+ description: A Ruby wrapper for the Taxjar API's sales tax and tax rate endpoints
156
+ email:
157
+ - darrenbjohnson@gmail.com
158
+ executables: []
159
+ extensions: []
160
+ extra_rdoc_files: []
161
+ files:
162
+ - ".gitignore"
163
+ - Gemfile
164
+ - LICENSE.txt
165
+ - README.md
166
+ - Rakefile
167
+ - lib/faraday/raise_http_exception.rb
168
+ - lib/taxjar.rb
169
+ - lib/taxjar/client.rb
170
+ - lib/taxjar/configuration.rb
171
+ - lib/taxjar/error.rb
172
+ - lib/taxjar/version.rb
173
+ - taxjar.gemspec
174
+ - test/fixtures/sales_tax.yml
175
+ - test/fixtures/tax_rate.yml
176
+ - test/taxjar/client_test.rb
177
+ - test/taxjar/configuration_test.rb
178
+ - test/taxjar/taxjar_test.rb
179
+ - test/test_helper.rb
180
+ homepage: http://github.com/djohnson/taxjar
181
+ licenses:
182
+ - MIT
183
+ metadata: {}
184
+ post_install_message:
185
+ rdoc_options: []
186
+ require_paths:
187
+ - lib
188
+ required_ruby_version: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ requirements: []
199
+ rubyforge_project:
200
+ rubygems_version: 2.4.3
201
+ signing_key:
202
+ specification_version: 4
203
+ summary: A Ruby wrapper for the Taxjar API
204
+ test_files:
205
+ - test/fixtures/sales_tax.yml
206
+ - test/fixtures/tax_rate.yml
207
+ - test/taxjar/client_test.rb
208
+ - test/taxjar/configuration_test.rb
209
+ - test/taxjar/taxjar_test.rb
210
+ - test/test_helper.rb