taxjar-ruby 2.0.0 → 2.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.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +42 -0
- data/lib/taxjar/api/request.rb +7 -4
- data/lib/taxjar/client.rb +10 -0
- data/lib/taxjar/version.rb +1 -1
- data/spec/helper.rb +8 -8
- data/spec/taxjar/api/request_spec.rb +29 -3
- data/spec/taxjar/client_spec.rb +28 -0
- data/taxjar-ruby.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf9845756bfeec2ace638f0e6414d73e2aeba0b9
|
4
|
+
data.tar.gz: f1852b4526f2fe8fac2530324acee0ca41146a78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7dfb2ad328bc585763ca567f521a705fd799582ae32076051af68278dc618eae7593392a8b2c2af3c416685aa3c44878bb1660e55eb5b638b0152e908337df6
|
7
|
+
data.tar.gz: 073e8445230a589b9d67721df6e6fad3a14e92aba7c5bfe4e440de7fc7ec6c925044877a72aac0c0524e643262d2b5125f90e8207b33032f2d88bd5ec2f57201
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -938,6 +938,48 @@ Set request timeout in seconds:
|
|
938
938
|
client.tax_for_order({ timeout: 30 })
|
939
939
|
```
|
940
940
|
|
941
|
+
## Sandbox Environment
|
942
|
+
|
943
|
+
You can easily configure the client to use the [TaxJar Sandbox](https://developers.taxjar.com/api/reference/#sandbox-environment):
|
944
|
+
|
945
|
+
```ruby
|
946
|
+
require 'taxjar'
|
947
|
+
client = Taxjar::Client.new(api_key: 'YOUR_SANDBOX_API_TOKEN', api_url: 'https://api.sandbox.taxjar.com')
|
948
|
+
```
|
949
|
+
|
950
|
+
For testing specific [error response codes](https://developers.taxjar.com/api/reference/#errors), pass the custom `X-TJ-Expected-Response` header:
|
951
|
+
|
952
|
+
```ruby
|
953
|
+
client.set_api_config('headers', {
|
954
|
+
'X-TJ-Expected-Response' => 422
|
955
|
+
})
|
956
|
+
```
|
957
|
+
|
958
|
+
## Error Handling
|
959
|
+
|
960
|
+
When invalid data is sent to TaxJar or we encounter an error, we’ll throw a `Taxjar::Error` with the HTTP status code and error message. To catch these exceptions, refer to the example below. [Click here](https://developers.taxjar.com/api/guides/ruby/#error-handling) for a list of common error response classes.
|
961
|
+
|
962
|
+
```ruby
|
963
|
+
require 'taxjar'
|
964
|
+
client = Taxjar::Client.new(api_key: '9e0cd62a22f451701f29c3bde214')
|
965
|
+
|
966
|
+
begin
|
967
|
+
order = client.create_order({
|
968
|
+
:transaction_date => '2015/05/14',
|
969
|
+
:to_country => 'US',
|
970
|
+
:to_state => 'CA',
|
971
|
+
:to_zip => '90002',
|
972
|
+
:amount => 17.45,
|
973
|
+
:shipping => 1.5,
|
974
|
+
:sales_tax => 0.95
|
975
|
+
})
|
976
|
+
rescue Taxjar::Error => e
|
977
|
+
# <Taxjar::Error::NotAcceptable: transaction_id is missing>
|
978
|
+
puts e.class.name
|
979
|
+
puts e.message
|
980
|
+
end
|
981
|
+
```
|
982
|
+
|
941
983
|
## Tests
|
942
984
|
|
943
985
|
An RSpec test suite is available to ensure API functionality:
|
data/lib/taxjar/api/request.rb
CHANGED
@@ -4,7 +4,8 @@ require 'http'
|
|
4
4
|
module Taxjar
|
5
5
|
module API
|
6
6
|
class Request
|
7
|
-
|
7
|
+
DEFAULT_API_URL = 'https://api.taxjar.com'
|
8
|
+
SANDBOX_API_URL = 'https://api.sandbox.taxjar.com'
|
8
9
|
|
9
10
|
attr_reader :client, :uri, :headers, :request_method, :path, :object_key, :options
|
10
11
|
|
@@ -16,8 +17,9 @@ module Taxjar
|
|
16
17
|
@client = client
|
17
18
|
@request_method = request_method
|
18
19
|
@path = path
|
19
|
-
@
|
20
|
-
|
20
|
+
@base_url = client.api_url ? client.api_url : DEFAULT_API_URL
|
21
|
+
@uri = Addressable::URI.parse(@base_url + path)
|
22
|
+
set_request_headers(client.headers || {})
|
21
23
|
@object_key = object_key
|
22
24
|
@options = options
|
23
25
|
set_http_timeout
|
@@ -33,10 +35,11 @@ module Taxjar
|
|
33
35
|
|
34
36
|
private
|
35
37
|
|
36
|
-
def set_request_headers
|
38
|
+
def set_request_headers(custom_headers = {})
|
37
39
|
@headers = {}
|
38
40
|
@headers[:user_agent] = client.user_agent
|
39
41
|
@headers[:authorization] = "Bearer #{client.api_key}"
|
42
|
+
@headers.merge!(custom_headers)
|
40
43
|
end
|
41
44
|
|
42
45
|
def set_http_timeout
|
data/lib/taxjar/client.rb
CHANGED
@@ -12,6 +12,8 @@ module Taxjar
|
|
12
12
|
include Taxjar::API::Refund
|
13
13
|
|
14
14
|
attr_accessor :api_key
|
15
|
+
attr_accessor :api_url
|
16
|
+
attr_accessor :headers
|
15
17
|
|
16
18
|
def initialize(options = {})
|
17
19
|
options.each do |key, value|
|
@@ -24,6 +26,14 @@ module Taxjar
|
|
24
26
|
!!@api_key
|
25
27
|
end
|
26
28
|
|
29
|
+
def set_api_config(key, value)
|
30
|
+
instance_variable_set("@#{key}", value)
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_api_config(key)
|
34
|
+
instance_variable_get("@#{key}")
|
35
|
+
end
|
36
|
+
|
27
37
|
def user_agent
|
28
38
|
"TaxjarRubyGem/#{Taxjar::Version}"
|
29
39
|
end
|
data/lib/taxjar/version.rb
CHANGED
data/spec/helper.rb
CHANGED
@@ -11,35 +11,35 @@ RSpec.configure do |config|
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def a_get(path)
|
14
|
-
a_request(:get, Taxjar::API::Request::
|
14
|
+
a_request(:get, Taxjar::API::Request::DEFAULT_API_URL + path)
|
15
15
|
end
|
16
16
|
|
17
17
|
def a_post(path)
|
18
|
-
a_request(:post, Taxjar::API::Request::
|
18
|
+
a_request(:post, Taxjar::API::Request::DEFAULT_API_URL + path)
|
19
19
|
end
|
20
20
|
|
21
21
|
def a_delete(path)
|
22
|
-
a_request(:delete, Taxjar::API::Request::
|
22
|
+
a_request(:delete, Taxjar::API::Request::DEFAULT_API_URL + path)
|
23
23
|
end
|
24
24
|
|
25
25
|
def a_put(path)
|
26
|
-
a_request(:put, Taxjar::API::Request::
|
26
|
+
a_request(:put, Taxjar::API::Request::DEFAULT_API_URL + path)
|
27
27
|
end
|
28
28
|
|
29
29
|
def stub_get(path)
|
30
|
-
stub_request(:get, Taxjar::API::Request::
|
30
|
+
stub_request(:get, Taxjar::API::Request::DEFAULT_API_URL + path)
|
31
31
|
end
|
32
32
|
|
33
33
|
def stub_post(path)
|
34
|
-
stub_request(:post, Taxjar::API::Request::
|
34
|
+
stub_request(:post, Taxjar::API::Request::DEFAULT_API_URL + path)
|
35
35
|
end
|
36
36
|
|
37
37
|
def stub_put(path)
|
38
|
-
stub_request(:put, Taxjar::API::Request::
|
38
|
+
stub_request(:put, Taxjar::API::Request::DEFAULT_API_URL + path)
|
39
39
|
end
|
40
40
|
|
41
41
|
def stub_delete(path)
|
42
|
-
stub_request(:delete, Taxjar::API::Request::
|
42
|
+
stub_request(:delete, Taxjar::API::Request::DEFAULT_API_URL + path)
|
43
43
|
end
|
44
44
|
|
45
45
|
def fixture_path
|
@@ -1,9 +1,15 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
describe Taxjar::API::Request do
|
4
|
-
describe "#
|
4
|
+
describe "#DEFAULT_API_URL" do
|
5
5
|
it 'should have taxjar api url' do
|
6
|
-
expect(Taxjar::API::Request::
|
6
|
+
expect(Taxjar::API::Request::DEFAULT_API_URL).to eq('https://api.taxjar.com')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#SANDBOX_API_URL" do
|
11
|
+
it 'should have sandbox taxjar api url' do
|
12
|
+
expect(Taxjar::API::Request::SANDBOX_API_URL).to eq('https://api.sandbox.taxjar.com')
|
7
13
|
end
|
8
14
|
end
|
9
15
|
|
@@ -24,6 +30,14 @@ describe Taxjar::API::Request do
|
|
24
30
|
expect(subject.uri.to_s).to eq('https://api.taxjar.com/api_path')
|
25
31
|
end
|
26
32
|
|
33
|
+
it 'should return a sandbox uri' do
|
34
|
+
client = Taxjar::Client.new(api_key: 'AK', api_url: Taxjar::API::Request::SANDBOX_API_URL)
|
35
|
+
subject = Taxjar::API::Request.new(client, :get, '/api_path', 'object')
|
36
|
+
expect(subject).to respond_to(:uri)
|
37
|
+
expect(subject.uri).to be_instance_of(Addressable::URI)
|
38
|
+
expect(subject.uri.to_s).to eq('https://api.sandbox.taxjar.com/api_path')
|
39
|
+
end
|
40
|
+
|
27
41
|
it 'should return headers' do
|
28
42
|
expect(subject).to respond_to(:headers)
|
29
43
|
expect(subject.headers).to be_instance_of(Hash)
|
@@ -31,6 +45,18 @@ describe Taxjar::API::Request do
|
|
31
45
|
expect(subject.headers[:authorization]).to eq('Bearer AK')
|
32
46
|
end
|
33
47
|
|
48
|
+
it 'should return custom headers' do
|
49
|
+
client = Taxjar::Client.new(api_key: 'AK', api_url: Taxjar::API::Request::SANDBOX_API_URL, headers: {
|
50
|
+
'X-TJ-Expected-Response' => 422
|
51
|
+
})
|
52
|
+
subject = Taxjar::API::Request.new(client, :get, '/api_path', 'object')
|
53
|
+
expect(subject).to respond_to(:headers)
|
54
|
+
expect(subject.headers).to be_instance_of(Hash)
|
55
|
+
expect(subject.headers[:user_agent]).to match('TaxjarRubyGem')
|
56
|
+
expect(subject.headers[:authorization]).to eq('Bearer AK')
|
57
|
+
expect(subject.headers['X-TJ-Expected-Response']).to eq(422)
|
58
|
+
end
|
59
|
+
|
34
60
|
it 'should return request method' do
|
35
61
|
expect(subject).to respond_to(:request_method)
|
36
62
|
expect(subject.request_method).to be_instance_of(Symbol)
|
@@ -102,7 +128,6 @@ describe Taxjar::API::Request do
|
|
102
128
|
to_return(:status => 200, :body => '{"object": {"id": "3"}}',
|
103
129
|
:headers => {content_type: 'application/json; charset=UTF-8'})
|
104
130
|
|
105
|
-
|
106
131
|
expect(subject.perform).to eq({id: '3'})
|
107
132
|
end
|
108
133
|
end
|
@@ -140,6 +165,7 @@ describe Taxjar::API::Request do
|
|
140
165
|
"detail": "error explanation",
|
141
166
|
"status": "'+ status.to_s + '"}',
|
142
167
|
:headers => {content_type: 'application/json; charset=UTF-8'})
|
168
|
+
|
143
169
|
expect{subject.perform}.to raise_error(exception, 'error explanation')
|
144
170
|
end
|
145
171
|
end
|
data/spec/taxjar/client_spec.rb
CHANGED
@@ -13,6 +13,34 @@ describe Taxjar::Client do
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
+
describe "#set_api_config" do
|
17
|
+
it 'sets new api key' do
|
18
|
+
client = Taxjar::Client.new(api_key: 'AK')
|
19
|
+
client.set_api_config('api_key', 'ZZ')
|
20
|
+
expect(client.api_key).to eq('ZZ')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'sets new api url' do
|
24
|
+
client = Taxjar::Client.new(api_key: 'AK')
|
25
|
+
client.set_api_config('api_url', 'https://api.sandbox.taxjar.com')
|
26
|
+
expect(client.api_url).to eq('https://api.sandbox.taxjar.com')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'sets new custom headers' do
|
30
|
+
client = Taxjar::Client.new(api_key: 'AK')
|
31
|
+
client.set_api_config('headers', { 'X-TJ-Expected-Response' => 422 })
|
32
|
+
expect(client.headers).to eq({ 'X-TJ-Expected-Response' => 422 })
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#get_api_config" do
|
37
|
+
it 'gets a config value' do
|
38
|
+
client = Taxjar::Client.new(api_key: 'AK')
|
39
|
+
client.set_api_config('api_key', 'ZZ')
|
40
|
+
expect(client.get_api_config('api_key')).to eq('ZZ')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
16
44
|
describe '#user_agent' do
|
17
45
|
it 'returns string with version' do
|
18
46
|
client = Taxjar::Client.new(api_key: 'AK')
|
data/taxjar-ruby.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.required_ruby_version = '>= 2.0'
|
22
22
|
|
23
23
|
spec.add_dependency 'addressable', '~> 2.3'
|
24
|
-
spec.add_dependency 'http', '~> 2.2
|
24
|
+
spec.add_dependency 'http', '~> 2.2'
|
25
25
|
spec.add_dependency 'memoizable', '~> 0.4.0'
|
26
26
|
spec.add_dependency 'model_attribute', '~> 3.2'
|
27
27
|
spec.add_development_dependency "bundler", "~> 1.7"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taxjar-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TaxJar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.2
|
33
|
+
version: '2.2'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.2
|
40
|
+
version: '2.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: memoizable
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
176
|
version: '0'
|
177
177
|
requirements: []
|
178
178
|
rubyforge_project:
|
179
|
-
rubygems_version: 2.6.
|
179
|
+
rubygems_version: 2.6.13
|
180
180
|
signing_key:
|
181
181
|
specification_version: 4
|
182
182
|
summary: Ruby wrapper for Taxjar API
|