taxjar-ruby 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd133d25374b0e81e58a96fdb951329848e577a5
4
- data.tar.gz: da271f53ff9fdd4eef5123da7fcf320ae78b99fd
3
+ metadata.gz: 638c573bdfd19c15d48c1cc87d79fb2292a8f031
4
+ data.tar.gz: b3382222c75bc4b8299d8d8aee75ae3ba919b40b
5
5
  SHA512:
6
- metadata.gz: e996b3715a70f75c10b8a7048c1049c949c55fe8e4d1f9e06c0d81b1b8d5765692bc0778ff7bdae1822b18f0ae7c501f1cb00024a44cab23d1951a6e3f9ea867
7
- data.tar.gz: f1ce3c2e1a23462cd7a9f6f44c08b45a3b827a364ca2a4c24066513843a644a77ceeea306959232ec6f69c9463cc1183bf778f49b7540ce842f90b36109f642a
6
+ metadata.gz: 0bdbf7a23361f1caa03825f8561e95dd88495bd29d4627a21e6049b4fcdf436430bb3578db00a88a6c05caa5a89a91ac4bfbc7bef24697546448d1df37e35127
7
+ data.tar.gz: 2271da6641e398fbb4f7e16b87cd563503f07e4be5f9d347d1ec6e3760bd3bd0da121300732938f416e5eccc5fba9a9eaf08e46174a20538c0e591998677ba75
data/Gemfile CHANGED
@@ -5,7 +5,7 @@ gem 'yard'
5
5
  group :test do
6
6
  gem 'rspec', '~>3'
7
7
  gem 'webmock', '~>1'
8
-
9
8
  end
9
+
10
10
  # Specify your gem's dependencies in taxjar-ruby.gemspec
11
11
  gemspec
data/README.md CHANGED
@@ -103,14 +103,32 @@ client.rates_for_location
103
103
  require 'taxjar'
104
104
  client = Taxjar::Client.new(api_key: '48ceecccc8af930bd02597aec0f84a78')
105
105
 
106
- client.rates_for_location('10001')
106
+ # United States (ZIP+4)
107
+ rates = client.rates_for_location('90404-3370')
108
+
109
+ # United States (ZIP w/ Optional Params)
110
+ rates = client.rates_for_location('90404', {
111
+ :city => 'SANTA MONICA',
112
+ :country => 'US'
113
+ })
114
+
115
+ # International Examples (Requires City and Country)
116
+ rates = client.rates_for_location('V5K0A1', {
117
+ :city => 'VANCOUVER',
118
+ :country => 'CA'
119
+ })
120
+
121
+ rates = client.rates_for_location('00150', {
122
+ :city => 'HELSINKI',
123
+ :country => 'FI'
124
+ })
107
125
  ```
108
126
 
109
127
  #### Example Response
110
128
 
111
129
  ```ruby
112
130
  #<Taxjar::Rate:0x007fc47056a928 @attrs={
113
- :zip => 90002,
131
+ :zip => "90002",
114
132
  :state => "CA",
115
133
  :state_rate => 0.065,
116
134
  :county => "LOS ANGELES",
@@ -178,7 +196,7 @@ client.tax_for_order({
178
196
  :special_district_tax_collectable => 0.22,
179
197
  :line_items => [
180
198
  {
181
- :id => "1",
199
+ :id => 1,
182
200
  :state_taxable_amount => 15.0,
183
201
  :state_sales_tax_rate => 0.065,
184
202
  :county_taxable_amount => 15.0,
@@ -238,7 +256,7 @@ client.show_order('123')
238
256
 
239
257
  ```ruby
240
258
  #<Taxjar::Order:0x007fd3e514a940 @attrs={
241
- :transaction_id => 123,
259
+ :transaction_id => "123",
242
260
  :user_id => 11836,
243
261
  :transaction_date => "2015-05-14T00:00:00Z",
244
262
  :transaction_reference_id => nil,
@@ -312,7 +330,7 @@ client.create_order({
312
330
 
313
331
  ```ruby
314
332
  #<Taxjar::Order:0x007f6d65b252d0 @attrs={
315
- :transaction_id => 20,
333
+ :transaction_id => "20",
316
334
  :user_id => 11836,
317
335
  :transaction_date => "2015-05-14T00:00:00Z",
318
336
  :transaction_reference_id => nil,
@@ -372,7 +390,7 @@ client.update_order({
372
390
 
373
391
  ```ruby
374
392
  #<Taxjar::Order:0x007f6d65b252d0 @attrs={
375
- :transaction_id => 123,
393
+ :transaction_id => "123",
376
394
  :user_id => 11836,
377
395
  :transaction_date => "2015-05-14T00:00:00Z",
378
396
  :transaction_reference_id => nil,
@@ -425,7 +443,7 @@ client.delete_order(123)
425
443
 
426
444
  ```ruby
427
445
  #<Taxjar::Order:0x007f6d65b252d0 @attrs={
428
- :transaction_id => 123,
446
+ :transaction_id => "123",
429
447
  :user_id => 11836,
430
448
  :transaction_date => "2015-05-14T00:00:00Z",
431
449
  :transaction_reference_id => nil,
@@ -502,7 +520,7 @@ client.show_refund('321')
502
520
 
503
521
  ```ruby
504
522
  #<Taxjar::Refund:0x007f6da40e33a0 @attrs={
505
- :transaction_id => 321,
523
+ :transaction_id => "321",
506
524
  :user_id => 11836,
507
525
  :transaction_date => "2015-06-14T00:00:00Z",
508
526
  :transaction_reference_id => 123,
@@ -577,10 +595,10 @@ refund = client.create_refund({
577
595
 
578
596
  ```ruby
579
597
  #<Taxjar::Refund:0x007f6da40e33a0 @attrs={
580
- :transaction_id => 321,
598
+ :transaction_id => "321",
581
599
  :user_id => 11836,
582
600
  :transaction_date => "2015-06-14T00:00:00Z",
583
- :transaction_reference_id => 123,
601
+ :transaction_reference_id => "123",
584
602
  :from_country => "US",
585
603
  :from_zip => 93107,
586
604
  :from_state => "CA",
@@ -637,10 +655,10 @@ refund = client.update_refund{
637
655
 
638
656
  ```ruby
639
657
  #<Taxjar::Refund:0x007f6da40e33a0 @attrs={
640
- :transaction_id => 321,
658
+ :transaction_id => "321",
641
659
  :user_id => 11836,
642
660
  :transaction_date => "2015-06-14T00:00:00Z",
643
- :transaction_reference_id => 123,
661
+ :transaction_reference_id => "123",
644
662
  :from_country => "US",
645
663
  :from_zip => 93107,
646
664
  :from_state => "CA",
@@ -687,10 +705,10 @@ client.delete_refund(321)
687
705
 
688
706
  ```ruby
689
707
  #<Taxjar::Refund:0x007f6da40e33a0 @attrs={
690
- :transaction_id => 321,
708
+ :transaction_id => "321",
691
709
  :user_id => 11836,
692
710
  :transaction_date => "2015-06-14T00:00:00Z",
693
- :transaction_reference_id => 123,
711
+ :transaction_reference_id => "123",
694
712
  :from_country => "US",
695
713
  :from_zip => 93107,
696
714
  :from_state => "CA",
@@ -1,4 +1,5 @@
1
1
  require 'taxjar/api/utils'
2
+
2
3
  module Taxjar
3
4
  module API
4
5
  include Taxjar::API::Utils
@@ -14,6 +15,5 @@ module Taxjar
14
15
  def tax_for_order(options = {})
15
16
  perform_post_with_object("/v2/taxes", 'tax', options, Taxjar::Tax)
16
17
  end
17
-
18
18
  end
19
19
  end
@@ -1,4 +1,5 @@
1
1
  require 'taxjar/api/utils'
2
+
2
3
  module Taxjar
3
4
  module API
4
5
  module Order
@@ -1,4 +1,5 @@
1
1
  require 'taxjar/api/utils'
2
+
2
3
  module Taxjar
3
4
  module API
4
5
  module Refund
@@ -31,40 +31,37 @@ module Taxjar
31
31
 
32
32
  private
33
33
 
34
+ def set_request_headers
35
+ @headers = {}
36
+ @headers[:user_agent] = client.user_agent
37
+ @headers[:authorization] = "Bearer #{client.api_key}"
38
+ end
34
39
 
35
- def set_request_headers
36
- @headers = {}
37
- @headers[:user_agent] = client.user_agent
38
- @headers[:authorization] = "Bearer #{client.api_key}"
39
- end
40
-
41
- def symbolize_keys!(object)
42
- if object.is_a?(Array)
43
- object.each_with_index do |val, index|
44
- object[index] = symbolize_keys!(val)
45
- end
46
- elsif object.is_a?(Hash)
47
- object.keys.each do |key|
48
- object[key.to_sym] = symbolize_keys!(object.delete(key))
40
+ def symbolize_keys!(object)
41
+ if object.is_a?(Array)
42
+ object.each_with_index do |val, index|
43
+ object[index] = symbolize_keys!(val)
44
+ end
45
+ elsif object.is_a?(Hash)
46
+ object.keys.each do |key|
47
+ object[key.to_sym] = symbolize_keys!(object.delete(key))
48
+ end
49
49
  end
50
+ object
50
51
  end
51
- object
52
- end
53
52
 
54
- def fail_or_return_response_body(code, body)
55
- e = extract_error(code, body)
56
- fail(e) if e
57
- body[object_key.to_sym]
58
- end
59
-
60
- def extract_error(code, body)
61
- klass = Taxjar::Error::ERRORS[code]
62
- if !klass.nil?
63
- klass.from_response(body)
53
+ def fail_or_return_response_body(code, body)
54
+ e = extract_error(code, body)
55
+ fail(e) if e
56
+ body[object_key.to_sym]
64
57
  end
65
- end
66
-
67
58
 
59
+ def extract_error(code, body)
60
+ klass = Taxjar::Error::ERRORS[code]
61
+ if !klass.nil?
62
+ klass.from_response(body)
63
+ end
64
+ end
68
65
  end
69
66
  end
70
67
  end
@@ -3,7 +3,6 @@ require 'taxjar/api/request'
3
3
  module Taxjar
4
4
  module API
5
5
  module Utils
6
-
7
6
  def perform_request(request_method, path, object_key, options = {})
8
7
  Taxjar::API::Request.new(self, request_method, path, object_key, options).perform
9
8
  end
@@ -1,6 +1,7 @@
1
1
  require 'addressable/uri'
2
2
  require 'forwardable'
3
3
  require 'memoizable'
4
+ require 'model_attribute'
4
5
 
5
6
  if !Array.new.respond_to?(:to_h)
6
7
  module Enumerable
@@ -70,9 +71,8 @@ module Taxjar
70
71
  end
71
72
  end
72
73
 
73
- def initialize(attrs = {})
74
- attrs = values_as_floats_where_possible(attrs)
75
- @attrs = attrs || {}
74
+ def initialize(attributes = {})
75
+ @attrs = set_attributes(attributes)
76
76
  end
77
77
 
78
78
  def [](method)
@@ -96,14 +96,5 @@ module Taxjar
96
96
  attrs.delete(key1).merge(key2 => attrs)
97
97
  end
98
98
  end
99
-
100
- def values_as_floats_where_possible(attrs)
101
- attrs.map{|k, v| [k, to_f_or_i_or_s(v)]}.to_h
102
- end
103
-
104
- def to_f_or_i_or_s(v)
105
- ((float = Float(v)) && (float % 1.0 == 0) ? float.to_i : float) rescue v
106
- end
107
-
108
99
  end
109
100
  end
@@ -3,9 +3,16 @@ require 'taxjar/shipping'
3
3
 
4
4
  module Taxjar
5
5
  class Breakdown < Taxjar::Base
6
- attr_reader :state_taxable_amount, :state_tax_collectable, :county_taxable_amount,
7
- :county_tax_collectable, :city_taxable_amount, :city_tax_collectable,
8
- :special_district_taxable_amount, :special_district_tax_collectable
6
+ extend ModelAttribute
7
+
8
+ attribute :state_taxable_amount, :float
9
+ attribute :state_tax_collectable, :float
10
+ attribute :county_taxable_amount, :float
11
+ attribute :county_tax_collectable, :float
12
+ attribute :city_taxable_amount, :float
13
+ attribute :city_tax_collectable, :float
14
+ attribute :special_district_taxable_amount, :float
15
+ attribute :special_district_tax_collectable, :float
9
16
 
10
17
  object_attr_reader Taxjar::Shipping, :shipping
11
18
 
@@ -2,9 +2,21 @@ require 'taxjar/base'
2
2
 
3
3
  module Taxjar
4
4
  class BreakdownLineItem < Taxjar::Base
5
- attr_reader :id, :tax_collectable, :state_taxable_amount, :state_sales_tax_rate, :state_amount,
6
- :county_taxable_amount, :county_tax_rate, :county_amount, :city_taxable_amount, :city_tax_rate, :city_amount,
7
- :special_district_taxable_amount, :special_tax_rate, :special_district_amount
8
-
5
+ extend ModelAttribute
6
+
7
+ attribute :id, :integer
8
+ attribute :tax_collectable, :float
9
+ attribute :state_taxable_amount, :float
10
+ attribute :state_sales_tax_rate, :float
11
+ attribute :state_amount, :float
12
+ attribute :county_taxable_amount, :float
13
+ attribute :county_tax_rate, :float
14
+ attribute :county_amount, :float
15
+ attribute :city_taxable_amount, :float
16
+ attribute :city_tax_rate, :float
17
+ attribute :city_amount, :float
18
+ attribute :special_district_taxable_amount, :float
19
+ attribute :special_tax_rate, :float
20
+ attribute :special_district_amount, :float
9
21
  end
10
22
  end
@@ -2,6 +2,10 @@ require 'taxjar/base'
2
2
 
3
3
  module Taxjar
4
4
  class Category < Taxjar::Base
5
- attr_reader :name, :product_tax_code, :description
5
+ extend ModelAttribute
6
+
7
+ attribute :name, :string
8
+ attribute :product_tax_code, :string
9
+ attribute :description, :string
6
10
  end
7
11
  end
@@ -4,6 +4,7 @@ require 'taxjar/api/refund'
4
4
  require 'taxjar/error'
5
5
  require 'taxjar/api/request'
6
6
  require 'taxjar/api/utils'
7
+
7
8
  module Taxjar
8
9
  class Client
9
10
  include Taxjar::API
@@ -69,6 +69,5 @@ module Taxjar
69
69
  end
70
70
 
71
71
  ConfigurationError = Class.new(::ArgumentError)
72
-
73
72
  end
74
73
  end
@@ -2,8 +2,14 @@ require 'taxjar/base'
2
2
 
3
3
  module Taxjar
4
4
  class LineItem < Taxjar::Base
5
- attr_reader :quantity, :product_identifier, :description, :unit_price, :discount,
6
- :sales_tax
7
-
5
+ extend ModelAttribute
6
+
7
+ attribute :id, :integer
8
+ attribute :quantity, :integer
9
+ attribute :product_identifier, :string
10
+ attribute :description, :string
11
+ attribute :unit_price, :float
12
+ attribute :discount, :float
13
+ attribute :sales_tax, :float
8
14
  end
9
15
  end
@@ -2,12 +2,22 @@ require 'taxjar/base'
2
2
 
3
3
  module Taxjar
4
4
  class Order < Taxjar::Base
5
- attr_reader :transaction_id, :user_id, :transaction_date, :to_country, :to_zip,
6
- :to_state, :to_city, :to_street, :amount, :shipping, :sales_tax
5
+ extend ModelAttribute
6
+
7
+ attribute :transaction_id, :string
8
+ attribute :user_id, :integer
9
+ attribute :transaction_date, :string
10
+ attribute :to_country, :string
11
+ attribute :to_zip, :string
12
+ attribute :to_state, :string
13
+ attribute :to_city, :string
14
+ attribute :to_street, :string
15
+ attribute :amount, :float
16
+ attribute :shipping, :float
17
+ attribute :sales_tax, :float
7
18
 
8
19
  def line_items
9
20
  map_collection(Taxjar::LineItem, :line_items)
10
21
  end
11
-
12
22
  end
13
23
  end
@@ -2,8 +2,16 @@ require 'taxjar/base'
2
2
 
3
3
  module Taxjar
4
4
  class Rate < Taxjar::Base
5
- attr_reader :zip, :state, :state_rate, :county, :county_rate, :city, :city_rate,
6
- :combined_district_rate, :combined_rate
5
+ extend ModelAttribute
7
6
 
7
+ attribute :zip, :string
8
+ attribute :state, :string
9
+ attribute :state_rate, :float
10
+ attribute :county, :string
11
+ attribute :county_rate, :float
12
+ attribute :city, :string
13
+ attribute :city_rate, :float
14
+ attribute :combined_district_rate, :float
15
+ attribute :combined_rate, :float
8
16
  end
9
17
  end
@@ -2,9 +2,20 @@ require 'taxjar/base'
2
2
 
3
3
  module Taxjar
4
4
  class Refund < Taxjar::Base
5
-
6
- attr_reader :transaction_id, :user_id, :transaction_date, :transaction_reference_id, :to_country, :to_zip,
7
- :to_state, :to_city, :to_street, :amount, :shipping, :sales_tax
5
+ extend ModelAttribute
6
+
7
+ attribute :transaction_id, :string
8
+ attribute :user_id, :integer
9
+ attribute :transaction_date, :string
10
+ attribute :transaction_reference_id, :string
11
+ attribute :to_country, :string
12
+ attribute :to_zip, :string
13
+ attribute :to_state, :string
14
+ attribute :to_city, :string
15
+ attribute :to_street, :string
16
+ attribute :amount, :float
17
+ attribute :shipping, :float
18
+ attribute :sales_tax, :float
8
19
 
9
20
  def line_items
10
21
  map_collection(Taxjar::LineItem, :line_items)
@@ -2,9 +2,17 @@ require 'taxjar/base'
2
2
 
3
3
  module Taxjar
4
4
  class Shipping < Taxjar::Base
5
- attr_reader :taxable_amount, :tax_collectable, :state_amount, :state_sales_tax_rate,
6
- :county_amount, :county_tax_rate, :city_amount, :city_tax_rate, :special_district_amount,
7
- :special_tax_rate
8
-
5
+ extend ModelAttribute
6
+
7
+ attribute :taxable_amount, :float
8
+ attribute :tax_collectable, :float
9
+ attribute :state_amount, :float
10
+ attribute :state_sales_tax_rate, :float
11
+ attribute :county_amount, :float
12
+ attribute :county_tax_rate, :float
13
+ attribute :city_amount, :float
14
+ attribute :city_tax_rate, :float
15
+ attribute :special_district_amount, :float
16
+ attribute :special_tax_rate, :float
9
17
  end
10
18
  end
@@ -2,10 +2,17 @@ require 'taxjar/base'
2
2
 
3
3
  module Taxjar
4
4
  class Tax < Taxjar::Base
5
- attr_reader :order_total_amount, :shipping, :taxable_amount, :amount_to_collect, :rate,
6
- :has_nexus, :freight_taxable, :tax_source
5
+ extend ModelAttribute
6
+
7
+ attribute :order_total_amount, :float
8
+ attribute :shipping, :float
9
+ attribute :taxable_amount, :float
10
+ attribute :amount_to_collect, :float
11
+ attribute :rate, :float
12
+ attribute :has_nexus, :boolean
13
+ attribute :freight_taxable, :boolean
14
+ attribute :tax_source, :string
7
15
 
8
16
  object_attr_reader Taxjar::Breakdown, :breakdown
9
-
10
17
  end
11
18
  end
@@ -1,17 +1,16 @@
1
1
  module Taxjar
2
2
  module Version
3
3
  module_function
4
-
5
4
  def major
6
5
  1
7
6
  end
8
7
 
9
8
  def minor
10
- 1
9
+ 2
11
10
  end
12
11
 
13
12
  def patch
14
- 3
13
+ 0
15
14
  end
16
15
 
17
16
  def pre
@@ -10,7 +10,6 @@ RSpec.configure do |config|
10
10
  end
11
11
  end
12
12
 
13
-
14
13
  def a_get(path)
15
14
  a_request(:get, Taxjar::API::Request::BASE_URL + path)
16
15
  end
@@ -50,4 +49,3 @@ end
50
49
  def fixture(file)
51
50
  File.new(fixture_path + '/' + file)
52
51
  end
53
-
@@ -1,7 +1,6 @@
1
1
  require 'helper'
2
2
 
3
3
  describe Taxjar::API do
4
-
5
4
  before do
6
5
  @client = Taxjar::Client.new(api_key: 'AK')
7
6
  end
@@ -23,6 +22,8 @@ describe Taxjar::API do
23
22
  expect(categories).to be_an Array
24
23
  expect(categories.first).to be_a Taxjar::Category
25
24
  expect(categories.first.name).to eq('Digital Goods')
25
+ expect(categories.first.product_tax_code).to eq('31000')
26
+ expect(categories.first.description).to eq('Digital products transferred electronically, meaning obtained by the purchaser by means other than tangible storage media.')
26
27
  end
27
28
  end
28
29
 
@@ -42,7 +43,15 @@ describe Taxjar::API do
42
43
  it 'returns the requested rates' do
43
44
  rates = @client.rates_for_location(@postal_code)
44
45
  expect(rates).to be_a Taxjar::Rate
46
+ expect(rates.zip).to eq('90002')
47
+ expect(rates.state).to eq('CA')
48
+ expect(rates.state_rate).to eq(0.065)
45
49
  expect(rates.county).to eq('LOS ANGELES')
50
+ expect(rates.county_rate).to eq(0.01)
51
+ expect(rates.city).to eq('WATTS')
52
+ expect(rates.city_rate).to eq(0.0)
53
+ expect(rates.combined_district_rate).to eq(0.015)
54
+ expect(rates.combined_rate).to eq(0.09)
46
55
  end
47
56
  end
48
57
 
@@ -71,12 +80,48 @@ describe Taxjar::API do
71
80
  it 'returns the requested taxes' do
72
81
  tax = @client.tax_for_order(@order)
73
82
  expect(tax).to be_a Taxjar::Tax
83
+ expect(tax.order_total_amount).to eq(16.5)
84
+ expect(tax.amount_to_collect).to eq(1.16)
85
+ expect(tax.has_nexus).to eq(true)
86
+ expect(tax.freight_taxable).to eq(true)
74
87
  expect(tax.tax_source).to eq('destination')
75
88
  end
89
+
90
+ it 'allows access to breakdown' do
91
+ tax = @client.tax_for_order(@order)
92
+ expect(tax.breakdown.state_taxable_amount).to eq(16.5)
93
+ expect(tax.breakdown.state_tax_collectable).to eq(1.16)
94
+ expect(tax.breakdown.county_taxable_amount).to eq(0)
95
+ expect(tax.breakdown.county_tax_collectable).to eq(0)
96
+ expect(tax.breakdown.city_taxable_amount).to eq(0)
97
+ expect(tax.breakdown.city_tax_collectable).to eq(0)
98
+ expect(tax.breakdown.special_district_taxable_amount).to eq(0)
99
+ expect(tax.breakdown.special_district_tax_collectable).to eq(0)
100
+ end
101
+
102
+ it 'allows access to breakdown.shipping' do
103
+ tax = @client.tax_for_order(@order)
104
+ expect(tax.breakdown.shipping.state_amount).to eq(0.11)
105
+ expect(tax.breakdown.shipping.state_sales_tax_rate).to eq(0.07)
106
+ expect(tax.breakdown.shipping.county_amount).to eq(0)
107
+ expect(tax.breakdown.shipping.county_tax_rate).to eq(0)
108
+ expect(tax.breakdown.shipping.city_amount).to eq(0)
109
+ expect(tax.breakdown.shipping.city_tax_rate).to eq(0)
110
+ expect(tax.breakdown.shipping.special_district_amount).to eq(0)
111
+ expect(tax.breakdown.shipping.special_tax_rate).to eq(0)
112
+ end
76
113
 
77
114
  it 'allows access to breakdown.line_items' do
78
115
  tax = @client.tax_for_order(@order)
79
116
  expect(tax.breakdown.line_items[0].id).to eq(1)
117
+ expect(tax.breakdown.line_items[0].state_taxable_amount).to eq(15)
118
+ expect(tax.breakdown.line_items[0].state_sales_tax_rate).to eq(0.07)
119
+ expect(tax.breakdown.line_items[0].county_taxable_amount).to eq(0)
120
+ expect(tax.breakdown.line_items[0].county_tax_rate).to eq(0)
121
+ expect(tax.breakdown.line_items[0].city_taxable_amount).to eq(0)
122
+ expect(tax.breakdown.line_items[0].city_tax_rate).to eq(0)
123
+ expect(tax.breakdown.line_items[0].special_district_taxable_amount).to eq(0)
124
+ expect(tax.breakdown.line_items[0].special_tax_rate).to eq(0)
80
125
  end
81
126
  end
82
127
  end
@@ -1,7 +1,6 @@
1
1
  require 'helper'
2
2
 
3
3
  describe Taxjar::API::Order do
4
-
5
4
  before do
6
5
  @client = Taxjar::Client.new(api_key: 'AK')
7
6
  end
@@ -66,12 +65,27 @@ describe Taxjar::API::Order do
66
65
  it 'returns the requested order' do
67
66
  order = @client.show_order('123')
68
67
  expect(order).to be_an Taxjar::Order
69
- expect(order.transaction_id).to eq(123)
68
+ expect(order.transaction_id).to eq('123')
69
+ expect(order.user_id).to eq(10649)
70
+ expect(order.transaction_date).to eq('2015-05-14T00:00:00Z')
71
+ expect(order.to_country).to eq('US')
72
+ expect(order.to_zip).to eq('90002')
73
+ expect(order.to_state).to eq('CA')
74
+ expect(order.to_city).to eq('LOS ANGELES')
75
+ expect(order.to_street).to eq('123 Palm Grove Ln')
76
+ expect(order.amount).to eq(17.45)
77
+ expect(order.shipping).to eq(1.5)
78
+ expect(order.sales_tax).to eq(0.95)
70
79
  end
71
80
 
72
81
  it 'allows access to line_items' do
73
82
  order = @client.show_order('123')
83
+ expect(order.line_items[0].id).to eq(1)
74
84
  expect(order.line_items[0].quantity).to eq(1)
85
+ expect(order.line_items[0].product_identifier).to eq('12-34243-9')
86
+ expect(order.line_items[0].description).to eq('Fuzzy Widget')
87
+ expect(order.line_items[0].unit_price).to eq(15.0)
88
+ expect(order.line_items[0].sales_tax).to eq(0.95)
75
89
  end
76
90
  end
77
91
 
@@ -89,9 +103,10 @@ describe Taxjar::API::Order do
89
103
  :amount => 17.45,
90
104
  :shipping => 1.5,
91
105
  :sales_tax => 0.95,
92
- :line_items => [{:quantity => 1,
106
+ :line_items => [{:id => 1,
107
+ :quantity => 1,
93
108
  :product_identifier => '12-34243-9',
94
- :descriptiion => 'Fuzzy Widget',
109
+ :description => 'Fuzzy Widget',
95
110
  :unit_price => 15.0,
96
111
  :sales_tax => 0.95}]
97
112
  }
@@ -105,7 +120,27 @@ describe Taxjar::API::Order do
105
120
  it 'returns the created order' do
106
121
  order = @client.create_order(@order)
107
122
  expect(order).to be_a Taxjar::Order
108
- expect(order.transaction_id).to eq(123)
123
+ expect(order.transaction_id).to eq('123')
124
+ expect(order.user_id).to eq(10649)
125
+ expect(order.transaction_date).to eq("2015-05-14T00:00:00Z")
126
+ expect(order.to_country).to eq('US')
127
+ expect(order.to_zip).to eq('90002')
128
+ expect(order.to_state).to eq('CA')
129
+ expect(order.to_city).to eq('LOS ANGELES')
130
+ expect(order.to_street).to eq('123 Palm Grove Ln')
131
+ expect(order.amount).to eq(17.45)
132
+ expect(order.shipping).to eq(1.5)
133
+ expect(order.sales_tax).to eq(0.95)
134
+ end
135
+
136
+ it 'allows access to line_items' do
137
+ order = @client.create_order(@order)
138
+ expect(order.line_items[0].id).to eq(1)
139
+ expect(order.line_items[0].quantity).to eq(1)
140
+ expect(order.line_items[0].product_identifier).to eq('12-34243-9')
141
+ expect(order.line_items[0].description).to eq('Fuzzy Widget')
142
+ expect(order.line_items[0].unit_price).to eq(15.0)
143
+ expect(order.line_items[0].sales_tax).to eq(0.95)
109
144
  end
110
145
  end
111
146
 
@@ -118,9 +153,10 @@ describe Taxjar::API::Order do
118
153
  @order = {:transaction_id => '123',
119
154
  :amount => 17.95,
120
155
  :shipping => 2.0,
121
- :line_items => [{:quantity => 1,
156
+ :line_items => [{:id => 1,
157
+ :quantity => 1,
122
158
  :product_identifier => '12-34243-0',
123
- :descriptiion => 'Heavy Widget',
159
+ :description => 'Heavy Widget',
124
160
  :unit_price => 15.0,
125
161
  :discount => 0.0,
126
162
  :sales_tax => 0.95}]
@@ -135,7 +171,27 @@ describe Taxjar::API::Order do
135
171
  it 'returns the updated order' do
136
172
  order = @client.update_order(@order)
137
173
  expect(order).to be_a Taxjar::Order
138
- expect(order.transaction_id).to eq(123)
174
+ expect(order.transaction_id).to eq('123')
175
+ expect(order.user_id).to eq(10649)
176
+ expect(order.transaction_date).to eq("2015-05-14T00:00:00Z")
177
+ expect(order.to_country).to eq('US')
178
+ expect(order.to_zip).to eq('90002')
179
+ expect(order.to_state).to eq('CA')
180
+ expect(order.to_city).to eq('LOS ANGELES')
181
+ expect(order.to_street).to eq('123 Palm Grove Ln')
182
+ expect(order.amount).to eq(17.45)
183
+ expect(order.shipping).to eq(1.5)
184
+ expect(order.sales_tax).to eq(0.95)
185
+ end
186
+
187
+ it 'allows access to line_items' do
188
+ order = @client.update_order(@order)
189
+ expect(order.line_items[0].id).to eq(1)
190
+ expect(order.line_items[0].quantity).to eq(1)
191
+ expect(order.line_items[0].product_identifier).to eq('12-34243-9')
192
+ expect(order.line_items[0].description).to eq('Fuzzy Widget')
193
+ expect(order.line_items[0].unit_price).to eq(15.0)
194
+ expect(order.line_items[0].sales_tax).to eq(0.95)
139
195
  end
140
196
  end
141
197
 
@@ -154,7 +210,27 @@ describe Taxjar::API::Order do
154
210
  it 'returns the deleted order' do
155
211
  order = @client.delete_order('123')
156
212
  expect(order).to be_an Taxjar::Order
157
- expect(order.transaction_id).to eq(123)
213
+ expect(order.transaction_id).to eq('123')
214
+ expect(order.user_id).to eq(10649)
215
+ expect(order.transaction_date).to eq("2015-05-14T00:00:00Z")
216
+ expect(order.to_country).to eq('US')
217
+ expect(order.to_zip).to eq('90002')
218
+ expect(order.to_state).to eq('CA')
219
+ expect(order.to_city).to eq('LOS ANGELES')
220
+ expect(order.to_street).to eq('123 Palm Grove Ln')
221
+ expect(order.amount).to eq(17.45)
222
+ expect(order.shipping).to eq(1.5)
223
+ expect(order.sales_tax).to eq(0.95)
224
+ end
225
+
226
+ it 'allows access to line items' do
227
+ order = @client.delete_order('123')
228
+ expect(order.line_items[0].id).to eq(1)
229
+ expect(order.line_items[0].quantity).to eq(1)
230
+ expect(order.line_items[0].product_identifier).to eq('12-34243-9')
231
+ expect(order.line_items[0].description).to eq('Fuzzy Widget')
232
+ expect(order.line_items[0].unit_price).to eq(15.0)
233
+ expect(order.line_items[0].sales_tax).to eq(0.95)
158
234
  end
159
235
  end
160
236
 
@@ -1,7 +1,6 @@
1
1
  require 'helper'
2
2
 
3
3
  describe Taxjar::API::Refund do
4
-
5
4
  before do
6
5
  @client = Taxjar::Client.new(api_key: 'AK')
7
6
  end
@@ -66,12 +65,29 @@ describe Taxjar::API::Refund do
66
65
  it 'returns the requested refund' do
67
66
  refund = @client.show_refund('321')
68
67
  expect(refund).to be_an Taxjar::Refund
69
- expect(refund.transaction_id).to eq(321)
68
+ expect(refund.transaction_id).to eq('321')
69
+ expect(refund.user_id).to eq(10649)
70
+ expect(refund.transaction_date).to eq("2015-05-14T00:00:00Z")
71
+ expect(refund.transaction_reference_id).to eq("123")
72
+ expect(refund.to_country).to eq('US')
73
+ expect(refund.to_zip).to eq('90002')
74
+ expect(refund.to_state).to eq('CA')
75
+ expect(refund.to_city).to eq('LOS ANGELES')
76
+ expect(refund.to_street).to eq('123 Palm Grove Ln')
77
+ expect(refund.amount).to eq(17.45)
78
+ expect(refund.shipping).to eq(1.5)
79
+ expect(refund.sales_tax).to eq(0.95)
70
80
  end
71
81
 
72
82
  it 'allows access to line_items' do
73
83
  refund = @client.show_refund('321')
84
+ expect(refund.line_items[0].id).to eq(1)
74
85
  expect(refund.line_items[0].quantity).to eq(1)
86
+ expect(refund.line_items[0].product_identifier).to eq('12-34243-9')
87
+ expect(refund.line_items[0].description).to eq('Fuzzy Widget')
88
+ expect(refund.line_items[0].unit_price).to eq(15.0)
89
+ expect(refund.line_items[0].discount).to eq(0.0)
90
+ expect(refund.line_items[0].sales_tax).to eq(0.95)
75
91
  end
76
92
  end
77
93
 
@@ -93,7 +109,7 @@ describe Taxjar::API::Refund do
93
109
  :sales_tax => 0.95,
94
110
  :line_items => [{:quantity => 1,
95
111
  :product_identifier => '12-34243-9',
96
- :descriptiion => 'Fuzzy Widget',
112
+ :description => 'Fuzzy Widget',
97
113
  :unit_price => 15.0,
98
114
  :sales_tax => 0.95}]
99
115
  }
@@ -105,9 +121,31 @@ describe Taxjar::API::Refund do
105
121
  end
106
122
 
107
123
  it 'returns the created refund' do
108
- refund = @client.create_refund(@refund)
124
+ refund = @client.create_refund(@refund)
109
125
  expect(refund).to be_a Taxjar::Refund
110
- expect(refund.transaction_id).to eq(321)
126
+ expect(refund.transaction_id).to eq('321')
127
+ expect(refund.user_id).to eq(10649)
128
+ expect(refund.transaction_date).to eq("2015-05-14T00:00:00Z")
129
+ expect(refund.transaction_reference_id).to eq("123")
130
+ expect(refund.to_country).to eq('US')
131
+ expect(refund.to_zip).to eq('90002')
132
+ expect(refund.to_state).to eq('CA')
133
+ expect(refund.to_city).to eq('LOS ANGELES')
134
+ expect(refund.to_street).to eq('123 Palm Grove Ln')
135
+ expect(refund.amount).to eq(17.45)
136
+ expect(refund.shipping).to eq(1.5)
137
+ expect(refund.sales_tax).to eq(0.95)
138
+ end
139
+
140
+ it 'allows access to line_items' do
141
+ refund = @client.create_refund(@refund)
142
+ expect(refund.line_items[0].id).to eq(1)
143
+ expect(refund.line_items[0].quantity).to eq(1)
144
+ expect(refund.line_items[0].product_identifier).to eq('12-34243-9')
145
+ expect(refund.line_items[0].description).to eq('Fuzzy Widget')
146
+ expect(refund.line_items[0].unit_price).to eq(15.0)
147
+ expect(refund.line_items[0].discount).to eq(0.0)
148
+ expect(refund.line_items[0].sales_tax).to eq(0.95)
111
149
  end
112
150
  end
113
151
 
@@ -123,7 +161,7 @@ describe Taxjar::API::Refund do
123
161
  :sales_tax => 0.95,
124
162
  :line_items => [{:quantity => 1,
125
163
  :product_identifier => '12-34243-9',
126
- :descriptiion => 'Heavy Widget',
164
+ :description => 'Heavy Widget',
127
165
  :unit_price => 15.0,
128
166
  :sales_tax => 0.95}]
129
167
  }
@@ -137,7 +175,29 @@ describe Taxjar::API::Refund do
137
175
  it 'returns the updated refund' do
138
176
  refund = @client.update_refund(@refund)
139
177
  expect(refund).to be_a Taxjar::Refund
140
- expect(refund.transaction_id).to eq(321)
178
+ expect(refund.transaction_id).to eq('321')
179
+ expect(refund.user_id).to eq(10649)
180
+ expect(refund.transaction_date).to eq("2015-05-14T00:00:00Z")
181
+ expect(refund.transaction_reference_id).to eq("123")
182
+ expect(refund.to_country).to eq('US')
183
+ expect(refund.to_zip).to eq('90002')
184
+ expect(refund.to_state).to eq('CA')
185
+ expect(refund.to_city).to eq('LOS ANGELES')
186
+ expect(refund.to_street).to eq('123 Palm Grove Ln')
187
+ expect(refund.amount).to eq(17.45)
188
+ expect(refund.shipping).to eq(1.5)
189
+ expect(refund.sales_tax).to eq(0.95)
190
+ end
191
+
192
+ it 'allows access to line_items' do
193
+ refund = @client.update_refund(@refund)
194
+ expect(refund.line_items[0].id).to eq(1)
195
+ expect(refund.line_items[0].quantity).to eq(1)
196
+ expect(refund.line_items[0].product_identifier).to eq('12-34243-9')
197
+ expect(refund.line_items[0].description).to eq('Fuzzy Widget')
198
+ expect(refund.line_items[0].unit_price).to eq(15.0)
199
+ expect(refund.line_items[0].discount).to eq(0.0)
200
+ expect(refund.line_items[0].sales_tax).to eq(0.95)
141
201
  end
142
202
  end
143
203
 
@@ -156,7 +216,29 @@ describe Taxjar::API::Refund do
156
216
  it 'returns the delete refund' do
157
217
  refund = @client.delete_refund('321')
158
218
  expect(refund).to be_an Taxjar::Refund
159
- expect(refund.transaction_id).to eq(321)
219
+ expect(refund.transaction_id).to eq('321')
220
+ expect(refund.user_id).to eq(10649)
221
+ expect(refund.transaction_date).to eq("2015-05-14T00:00:00Z")
222
+ expect(refund.transaction_reference_id).to eq("123")
223
+ expect(refund.to_country).to eq('US')
224
+ expect(refund.to_zip).to eq('90002')
225
+ expect(refund.to_state).to eq('CA')
226
+ expect(refund.to_city).to eq('LOS ANGELES')
227
+ expect(refund.to_street).to eq('123 Palm Grove Ln')
228
+ expect(refund.amount).to eq(17.45)
229
+ expect(refund.shipping).to eq(1.5)
230
+ expect(refund.sales_tax).to eq(0.95)
231
+ end
232
+
233
+ it 'allows access to line_items' do
234
+ refund = @client.delete_refund('321')
235
+ expect(refund.line_items[0].id).to eq(1)
236
+ expect(refund.line_items[0].quantity).to eq(1)
237
+ expect(refund.line_items[0].product_identifier).to eq('12-34243-9')
238
+ expect(refund.line_items[0].description).to eq('Fuzzy Widget')
239
+ expect(refund.line_items[0].unit_price).to eq(15.0)
240
+ expect(refund.line_items[0].discount).to eq(0.0)
241
+ expect(refund.line_items[0].sales_tax).to eq(0.95)
160
242
  end
161
243
  end
162
244
  end
@@ -1,7 +1,6 @@
1
1
  require 'helper'
2
2
 
3
3
  describe Taxjar::API::Request do
4
-
5
4
  describe "#BASE_URL" do
6
5
  it 'should have taxjar api url' do
7
6
  expect(Taxjar::API::Request::BASE_URL).to eq('https://api.taxjar.com')
@@ -130,5 +129,4 @@ describe Taxjar::API::Request do
130
129
  end
131
130
  end
132
131
  end
133
-
134
132
  end
@@ -1,7 +1,6 @@
1
1
  require 'helper'
2
2
 
3
3
  describe Taxjar::Client do
4
-
5
4
  describe '#api_key?' do
6
5
  it 'returns true if api_key is present' do
7
6
  client = Taxjar::Client.new(api_key: 'AK')
@@ -1,7 +1,6 @@
1
1
  require 'helper'
2
2
 
3
3
  describe Taxjar::Error do
4
-
5
4
  describe 'attributes' do
6
5
  let(:error) { Taxjar::Error.new('unprocessable entity', 422)}
7
6
 
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency 'addressable', '~>2.3'
22
22
  spec.add_dependency 'http', '~>0.8.12'
23
23
  spec.add_dependency 'memoizable', '~>0.4.0'
24
+ spec.add_dependency 'taxjar-model_attribute', '~> 3.1'
24
25
  spec.add_development_dependency "bundler", "~> 1.7"
25
26
  spec.add_development_dependency "rake", "~> 10.0"
26
27
  end
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: 1.1.3
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TaxJar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-12 00:00:00.000000000 Z
11
+ date: 2015-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.4.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: taxjar-model_attribute
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.1'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -126,7 +140,6 @@ files:
126
140
  - spec/taxjar/api/order_spec.rb
127
141
  - spec/taxjar/api/refund_spec.rb
128
142
  - spec/taxjar/api/request_spec.rb
129
- - spec/taxjar/base_spec.rb
130
143
  - spec/taxjar/client_spec.rb
131
144
  - spec/taxjar/error_spec.rb
132
145
  - spec/taxjar/version_spec.rb
@@ -168,7 +181,6 @@ test_files:
168
181
  - spec/taxjar/api/order_spec.rb
169
182
  - spec/taxjar/api/refund_spec.rb
170
183
  - spec/taxjar/api/request_spec.rb
171
- - spec/taxjar/base_spec.rb
172
184
  - spec/taxjar/client_spec.rb
173
185
  - spec/taxjar/error_spec.rb
174
186
  - spec/taxjar/version_spec.rb
@@ -1,28 +0,0 @@
1
- require 'helper'
2
-
3
- require 'helper'
4
-
5
- describe Taxjar::Base do
6
-
7
- describe "#initialize" do
8
- before do
9
- @klass = Class.new(Taxjar::Base)
10
- @klass.attr_reader(:field)
11
- end
12
-
13
- it 'should convert string fields to floats if it can be done' do
14
- b = @klass.new(:field => '3.0')
15
- expect(b.field).to eq(3.0)
16
- end
17
-
18
- it 'should convert string fields to integers if it can be done' do
19
- b = @klass.new(:field => '3')
20
- expect(b.field).to eq(3)
21
- end
22
-
23
- it 'it should leave string as strings' do
24
- b = @klass.new(:field => 'a')
25
- expect(b.field).to eq('a')
26
- end
27
- end
28
- end