vertex_client 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.env +2 -0
  3. data/.gitignore +12 -0
  4. data/.travis.yml +24 -0
  5. data/Brewfile +2 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +6 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +195 -0
  10. data/Rakefile +11 -0
  11. data/bin/bootstrap +23 -0
  12. data/bin/console +15 -0
  13. data/bin/setup +11 -0
  14. data/bin/test +12 -0
  15. data/bin/update +4 -0
  16. data/lib/generators/install/install_generator.rb +12 -0
  17. data/lib/generators/install/templates/initializer.rb.erb +27 -0
  18. data/lib/vertex_client.rb +89 -0
  19. data/lib/vertex_client/configuration.rb +35 -0
  20. data/lib/vertex_client/connection.rb +58 -0
  21. data/lib/vertex_client/payloads/base.rb +44 -0
  22. data/lib/vertex_client/payloads/distribute_tax.rb +20 -0
  23. data/lib/vertex_client/payloads/invoice.rb +29 -0
  24. data/lib/vertex_client/payloads/quotation.rb +69 -0
  25. data/lib/vertex_client/payloads/quotation_fallback.rb +14 -0
  26. data/lib/vertex_client/payloads/tax_area.rb +22 -0
  27. data/lib/vertex_client/railtie.rb +7 -0
  28. data/lib/vertex_client/rates.rb +55 -0
  29. data/lib/vertex_client/resources/base.rb +41 -0
  30. data/lib/vertex_client/resources/distribute_tax.rb +6 -0
  31. data/lib/vertex_client/resources/invoice.rb +12 -0
  32. data/lib/vertex_client/resources/quotation.rb +12 -0
  33. data/lib/vertex_client/resources/tax_area.rb +10 -0
  34. data/lib/vertex_client/responses/base.rb +17 -0
  35. data/lib/vertex_client/responses/distribute_tax.rb +17 -0
  36. data/lib/vertex_client/responses/invoice.rb +6 -0
  37. data/lib/vertex_client/responses/line_item.rb +15 -0
  38. data/lib/vertex_client/responses/quotation.rb +39 -0
  39. data/lib/vertex_client/responses/quotation_fallback.rb +42 -0
  40. data/lib/vertex_client/responses/tax_area.rb +9 -0
  41. data/lib/vertex_client/responses/tax_area_fallback.rb +9 -0
  42. data/lib/vertex_client/utils/adjustment_allocator.rb +61 -0
  43. data/lib/vertex_client/version.rb +3 -0
  44. data/vertex_client.gemspec +54 -0
  45. metadata +288 -0
@@ -0,0 +1,55 @@
1
+ module VertexClient
2
+ RATES = {
3
+ 'AL' => '0.11',
4
+ 'AK' => '0.0',
5
+ 'AZ' => '0.0',
6
+ 'AR' => '0.0',
7
+ 'CA' => '0.0',
8
+ 'CO' => '0.112',
9
+ 'CT' => '0.0635',
10
+ 'DE' => '0.0',
11
+ 'FL' => '0.0',
12
+ 'GA' => '0.089',
13
+ 'HI' => '0.045',
14
+ 'ID' => '0.09',
15
+ 'IL' => '0.11',
16
+ 'IN' => '0.07',
17
+ 'IA' => '0.07',
18
+ 'KS' => '0.0',
19
+ 'KY' => '0.06',
20
+ 'LA' => '0.122',
21
+ 'ME' => '0.055',
22
+ 'MD' => '0.06',
23
+ 'MA' => '0.0625',
24
+ 'MI' => '0.06',
25
+ 'MN' => '0.0888',
26
+ 'MS' => '0.07',
27
+ 'MO' => '0.0',
28
+ 'MT' => '0.0',
29
+ 'NE' => '0.075',
30
+ 'NV' => '0.0827',
31
+ 'NH' => '0.0',
32
+ 'NJ' => '0.0863',
33
+ 'NM' => '0.0',
34
+ 'NY' => '0.0',
35
+ 'NC' => '0.075',
36
+ 'ND' => '0.085',
37
+ 'OH' => '0.08',
38
+ 'OK' => '0.115',
39
+ 'OR' => '0.0',
40
+ 'PA' => '0.08',
41
+ 'RI' => '0.7',
42
+ 'SC' => '0.09',
43
+ 'SD' => '0.075',
44
+ 'TN' => '0.0',
45
+ 'TX' => '0.0825',
46
+ 'UT' => '0.086',
47
+ 'VT' => '0.07',
48
+ 'VA' => '0.07',
49
+ 'WA' => '0.104',
50
+ 'WV' => '0.07',
51
+ 'WI' => '0.0675',
52
+ 'WY' => '0.08',
53
+ 'DC' => '0.0'
54
+ }.freeze
55
+ end
@@ -0,0 +1,41 @@
1
+ require 'active_support'
2
+ module VertexClient
3
+ module Resource
4
+ class Base
5
+
6
+ def initialize(params)
7
+ @payload = payload_type.new(params)
8
+ end
9
+
10
+ def result
11
+ @result ||= (response ? formatted_response : fallback_response)
12
+ end
13
+
14
+ private
15
+
16
+ def response
17
+ @response ||= connection.request(@payload.transform)
18
+ end
19
+
20
+ def connection
21
+ @connection ||= Connection.new(self.class::ENDPOINT)
22
+ end
23
+
24
+ def formatted_response
25
+ response_type.new(response)
26
+ end
27
+
28
+ def payload_type
29
+ Kernel.const_get("VertexClient::Payload::#{demodulized_class_name}")
30
+ end
31
+
32
+ def response_type
33
+ Kernel.const_get("VertexClient::Response::#{demodulized_class_name}")
34
+ end
35
+
36
+ def demodulized_class_name
37
+ self.class.name.demodulize
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,6 @@
1
+ module VertexClient
2
+ module Resource
3
+ class DistributeTax < Invoice
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ module VertexClient
2
+ module Resource
3
+ class Invoice < Base
4
+ ENDPOINT = 'CalculateTax70'.freeze
5
+ ERROR_MESSAGE = 'The Vertex API returned an error or is unavailable'.freeze
6
+
7
+ def fallback_response
8
+ raise ServerError, ERROR_MESSAGE
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module VertexClient
2
+ module Resource
3
+ class Quotation < Base
4
+ ENDPOINT = 'CalculateTax70'.freeze
5
+
6
+ def fallback_response
7
+ fallback_payload = Payload::QuotationFallback.new(@payload.params)
8
+ Response::QuotationFallback.new(fallback_payload)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module VertexClient
2
+ module Resource
3
+ class TaxArea < Base
4
+ ENDPOINT = 'LookupTaxAreas70'.freeze
5
+ def fallback_response
6
+ Response::TaxAreaFallback.new
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ require 'active_support'
2
+ module VertexClient
3
+ module Response
4
+ class Base
5
+
6
+ def initialize(vertex_response)
7
+ @body = vertex_response.body[:vertex_envelope][response_key].with_indifferent_access
8
+ end
9
+
10
+ private
11
+
12
+ def response_key
13
+ :"#{self.class.name.demodulize.underscore}_response"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module VertexClient
2
+ module Response
3
+ class DistributeTax < Base
4
+ def subtotal
5
+ @subtotal ||= BigDecimal.new(@body[:sub_total])
6
+ end
7
+
8
+ def total_tax
9
+ @total_tax ||= BigDecimal.new(@body[:total_tax])
10
+ end
11
+
12
+ def total
13
+ @total ||= BigDecimal.new(@body[:total])
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ module VertexClient
2
+ module Response
3
+ class Invoice < Quotation
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,15 @@
1
+ module VertexClient
2
+ module Response
3
+ class LineItem
4
+
5
+ attr_reader :total_tax, :product, :quantity, :price
6
+
7
+ def initialize(params={})
8
+ @product = params[:product]
9
+ @quantity = params[:quantity] ? params[:quantity].to_i : 0
10
+ @price = BigDecimal.new(params[:price] || 0)
11
+ @total_tax = BigDecimal.new(params[:total_tax] || 0)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,39 @@
1
+ module VertexClient
2
+ module Response
3
+ class Quotation < Base
4
+
5
+ def subtotal
6
+ @subtotal ||= BigDecimal.new(@body[:sub_total])
7
+ end
8
+
9
+ def total_tax
10
+ @total_tax ||= BigDecimal.new(@body[:total_tax])
11
+ end
12
+
13
+ def total
14
+ @total ||= BigDecimal.new(@body[:total])
15
+ end
16
+
17
+ def line_items
18
+ @line_items ||= @body[:line_item].flatten.map do |line_item|
19
+ LineItem.new(
20
+ product: product_for_line_item(line_item),
21
+ quantity: line_item[:quantity],
22
+ price: line_item[:extended_price],
23
+ total_tax: tax_for_line_item(line_item)
24
+ )
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def tax_for_line_item(line_item)
31
+ line_item[:total_tax]
32
+ end
33
+
34
+ def product_for_line_item(line_item)
35
+ line_item[:product]
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,42 @@
1
+ module VertexClient
2
+ module Response
3
+ class QuotationFallback < Quotation
4
+
5
+ def initialize(payload)
6
+ @body = payload.body
7
+ end
8
+
9
+ def subtotal
10
+ @subtotal || line_items.sum(&:price)
11
+ end
12
+
13
+ def total_tax
14
+ @total_tax ||= line_items.sum(&:total_tax).floor(2)
15
+ end
16
+
17
+ def total
18
+ @total ||= subtotal + total_tax
19
+ end
20
+
21
+ private
22
+
23
+ def tax_amount(price, state)
24
+ if RATES.has_key?(state)
25
+ price * BigDecimal.new(RATES[state])
26
+ else
27
+ BigDecimal.new("0.0")
28
+ end
29
+ end
30
+
31
+ def tax_for_line_item(line_item)
32
+ price = BigDecimal.new(line_item[:extended_price].to_s)
33
+ state = line_item[:customer][:destination][:main_division]
34
+ tax_amount(price, state)
35
+ end
36
+
37
+ def product_for_line_item(line_item)
38
+ line_item[:product][:content!]
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,9 @@
1
+ module VertexClient
2
+ module Response
3
+ class TaxArea < Base
4
+ def tax_area_id
5
+ @tax_area_id ||= @body[:tax_area_result][:@tax_area_id]
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module VertexClient
2
+ module Response
3
+ class TaxAreaFallback
4
+ def tax_area_id
5
+ nil
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,61 @@
1
+ module VertexClient
2
+ module Utils
3
+ class AdjustmentAllocator
4
+ def initialize(adjustment, weights)
5
+ @adjustment = adjustment
6
+ @weights = weights
7
+ end
8
+
9
+ def allocate
10
+ return [] if weights.empty? && @adjustment.zero?
11
+ validate!
12
+ allocations, remainders = allocations_with_remainders.transpose
13
+ remaining_adjustment = adjustment_in_cents - allocations.sum
14
+ deserving_indices = remainders.each_with_index.sort_by { |remainder, i| [remainder, i] }.map { |_r, i| i }.last(remaining_adjustment)
15
+ allocations.each_with_index.map { |allocation, i| deserving_indices.include?(i) ? cents_to_dollars(allocation + 1) : cents_to_dollars(allocation) }
16
+ end
17
+
18
+ private
19
+
20
+ ADJUSTMENT_ERROR = 'adjustment must not be more precise than two decimal places (eg: 2.14 or 0.05)'.freeze
21
+ WEIGHTS_ERROR = 'all weights must be a non-negative number, and must not total zero'.freeze
22
+
23
+ def adjustment_format_valid?
24
+ adjustment.is_a?(Numeric) && (dollars_to_cents(adjustment) == adjustment * 100)
25
+ end
26
+
27
+ def adjustment_in_cents
28
+ dollars_to_cents(adjustment)
29
+ end
30
+
31
+ def allocations_with_remainders
32
+ weights.map do |weight|
33
+ (adjustment_in_cents * weight).divmod(weights_total)
34
+ end
35
+ end
36
+
37
+ def cents_to_dollars(cents)
38
+ cents / 100.to_d
39
+ end
40
+
41
+ def dollars_to_cents(dollars)
42
+ (dollars * 100).to_i
43
+ end
44
+
45
+ def validate!
46
+ raise VertexClient::ValidationError.new(ADJUSTMENT_ERROR) unless adjustment_format_valid?
47
+ raise VertexClient::ValidationError.new(WEIGHTS_ERROR) unless weights_format_valid?
48
+ end
49
+
50
+ def weights_format_valid?
51
+ weights.all? { |weight| weight.is_a?(Numeric) && weight >= 0 } && !weights_total.zero?
52
+ end
53
+
54
+ def weights_total
55
+ weights.sum
56
+ end
57
+
58
+ attr_reader :adjustment, :weights
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,3 @@
1
+ module VertexClient
2
+ VERSION = "0.6.1"
3
+ end
@@ -0,0 +1,54 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "vertex_client/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "vertex_client"
8
+ spec.version = VertexClient::VERSION
9
+ spec.authors = ["Custom Ink"]
10
+ spec.email = ["technology@customink.com"]
11
+ spec.required_ruby_version = '>= 2.1'
12
+ spec.summary = %q{A Ruby Gem to integrate with the Vertex Cloud API}
13
+ spec.description = %q{The Vertex Client Ruby Gem provides an interface to integrate with Vertex Cloud's SOAP API.}
14
+ spec.homepage = "https://github.com/customink/vertex_client"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata["allowed_push_host"] = 'https://rubygems.org'
21
+
22
+ spec.metadata["homepage_uri"] = spec.homepage
23
+ spec.metadata["source_code_uri"] = "https://github.com/customink/vertex_client"
24
+ spec.metadata["changelog_uri"] = "https://github.com/customink/vertex_client/CHANGELOG.md"
25
+ else
26
+ raise "RubyGems 2.0 or newer is required to protect against " \
27
+ "public gem pushes."
28
+ end
29
+
30
+ # Specify which files should be added to the gem when it is released.
31
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
33
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
+ end
35
+ spec.bindir = "exe"
36
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
+ spec.require_paths = ["lib"]
38
+
39
+ spec.add_dependency "activesupport"
40
+ spec.add_dependency "savon", ">= 2.11"
41
+ spec.add_development_dependency "circuitbox"
42
+ spec.add_development_dependency "bundler"
43
+ spec.add_development_dependency "byebug"
44
+ spec.add_development_dependency "dotenv"
45
+ spec.add_development_dependency "minitest", "~> 5.0"
46
+ spec.add_development_dependency "mocha"
47
+ spec.add_development_dependency "rake", "~> 10.0"
48
+ spec.add_development_dependency "rails"
49
+ spec.add_development_dependency "simplecov"
50
+ spec.add_development_dependency "vcr", "~> 4.0"
51
+ spec.add_development_dependency "webmock"
52
+ spec.add_development_dependency "wwtd"
53
+
54
+ end
metadata ADDED
@@ -0,0 +1,288 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vertex_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.1
5
+ platform: ruby
6
+ authors:
7
+ - Custom Ink
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-01-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: savon
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '2.11'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '2.11'
41
+ - !ruby/object:Gem::Dependency
42
+ name: circuitbox
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dotenv
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '5.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '5.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: mocha
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '10.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '10.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rails
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: vcr
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '4.0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '4.0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: webmock
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: wwtd
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ description: The Vertex Client Ruby Gem provides an interface to integrate with Vertex
210
+ Cloud's SOAP API.
211
+ email:
212
+ - technology@customink.com
213
+ executables: []
214
+ extensions: []
215
+ extra_rdoc_files: []
216
+ files:
217
+ - ".env"
218
+ - ".gitignore"
219
+ - ".travis.yml"
220
+ - Brewfile
221
+ - CODE_OF_CONDUCT.md
222
+ - Gemfile
223
+ - LICENSE.txt
224
+ - README.md
225
+ - Rakefile
226
+ - bin/bootstrap
227
+ - bin/console
228
+ - bin/setup
229
+ - bin/test
230
+ - bin/update
231
+ - lib/generators/install/install_generator.rb
232
+ - lib/generators/install/templates/initializer.rb.erb
233
+ - lib/vertex_client.rb
234
+ - lib/vertex_client/configuration.rb
235
+ - lib/vertex_client/connection.rb
236
+ - lib/vertex_client/payloads/base.rb
237
+ - lib/vertex_client/payloads/distribute_tax.rb
238
+ - lib/vertex_client/payloads/invoice.rb
239
+ - lib/vertex_client/payloads/quotation.rb
240
+ - lib/vertex_client/payloads/quotation_fallback.rb
241
+ - lib/vertex_client/payloads/tax_area.rb
242
+ - lib/vertex_client/railtie.rb
243
+ - lib/vertex_client/rates.rb
244
+ - lib/vertex_client/resources/base.rb
245
+ - lib/vertex_client/resources/distribute_tax.rb
246
+ - lib/vertex_client/resources/invoice.rb
247
+ - lib/vertex_client/resources/quotation.rb
248
+ - lib/vertex_client/resources/tax_area.rb
249
+ - lib/vertex_client/responses/base.rb
250
+ - lib/vertex_client/responses/distribute_tax.rb
251
+ - lib/vertex_client/responses/invoice.rb
252
+ - lib/vertex_client/responses/line_item.rb
253
+ - lib/vertex_client/responses/quotation.rb
254
+ - lib/vertex_client/responses/quotation_fallback.rb
255
+ - lib/vertex_client/responses/tax_area.rb
256
+ - lib/vertex_client/responses/tax_area_fallback.rb
257
+ - lib/vertex_client/utils/adjustment_allocator.rb
258
+ - lib/vertex_client/version.rb
259
+ - vertex_client.gemspec
260
+ homepage: https://github.com/customink/vertex_client
261
+ licenses:
262
+ - MIT
263
+ metadata:
264
+ allowed_push_host: https://rubygems.org
265
+ homepage_uri: https://github.com/customink/vertex_client
266
+ source_code_uri: https://github.com/customink/vertex_client
267
+ changelog_uri: https://github.com/customink/vertex_client/CHANGELOG.md
268
+ post_install_message:
269
+ rdoc_options: []
270
+ require_paths:
271
+ - lib
272
+ required_ruby_version: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - ">="
275
+ - !ruby/object:Gem::Version
276
+ version: '2.1'
277
+ required_rubygems_version: !ruby/object:Gem::Requirement
278
+ requirements:
279
+ - - ">="
280
+ - !ruby/object:Gem::Version
281
+ version: '0'
282
+ requirements: []
283
+ rubyforge_project:
284
+ rubygems_version: 2.7.6
285
+ signing_key:
286
+ specification_version: 4
287
+ summary: A Ruby Gem to integrate with the Vertex Cloud API
288
+ test_files: []