veryfi 0.0.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/veryfi/client.rb CHANGED
@@ -2,24 +2,6 @@
2
2
 
3
3
  module Veryfi
4
4
  class Client
5
- CATEGORIES = [
6
- "Advertising & Marketing",
7
- "Automotive",
8
- "Bank Charges & Fees",
9
- "Legal & Professional Services",
10
- "Insurance",
11
- "Meals & Entertainment",
12
- "Office Supplies & Software",
13
- "Taxes & Licenses",
14
- "Travel",
15
- "Rent & Lease",
16
- "Repairs & Maintenance",
17
- "Payroll",
18
- "Utilities",
19
- "Job Supplies",
20
- "Grocery"
21
- ].freeze
22
-
23
5
  attr_reader :request
24
6
 
25
7
  def initialize(
@@ -29,7 +11,7 @@ module Veryfi
29
11
  api_key:,
30
12
  base_url: "https://api.veryfi.com/api/",
31
13
  api_version: "v7",
32
- timeout: 120
14
+ timeout: 20
33
15
  )
34
16
  @request = Veryfi::Request.new(client_id, client_secret, username, api_key, base_url, api_version, timeout)
35
17
  end
@@ -38,6 +20,18 @@ module Veryfi
38
20
  @_document ||= Veryfi::Api::Document.new(request)
39
21
  end
40
22
 
23
+ def line_item
24
+ @_line_item ||= Veryfi::Api::LineItem.new(request)
25
+ end
26
+
27
+ def tag
28
+ @_tag ||= Veryfi::Api::Tag.new(request)
29
+ end
30
+
31
+ def document_tag
32
+ @_document_tag ||= Veryfi::Api::DocumentTag.new(request)
33
+ end
34
+
41
35
  def api_url
42
36
  request.api_url
43
37
  end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Veryfi
4
+ class Error
5
+ def self.from_response(response)
6
+ case response.status
7
+ when 400 then BadRequest
8
+ when 401 then UnauthorizedAccessToken
9
+ when 405 then UnexpectedHTTPMethod
10
+ when 409 then AccessLimitReached
11
+ else InternalError
12
+ end
13
+ end
14
+
15
+ class BadRequest < StandardError
16
+ def to_s
17
+ "Bad Request"
18
+ end
19
+ end
20
+
21
+ class UnauthorizedAccessToken < StandardError
22
+ def to_s
23
+ "Unauthorized Access Token"
24
+ end
25
+ end
26
+
27
+ class UnexpectedHTTPMethod < StandardError
28
+ def to_s
29
+ "Unexpected HTTP Method"
30
+ end
31
+ end
32
+
33
+ class AccessLimitReached < StandardError
34
+ def to_s
35
+ "Access Limit Reached"
36
+ end
37
+ end
38
+
39
+ class InternalError < StandardError
40
+ def to_s
41
+ "Internal Server Error"
42
+ end
43
+ end
44
+ end
45
+ end
@@ -8,6 +8,8 @@ module Veryfi
8
8
  class Request
9
9
  attr_reader :client_id, :client_secret, :username, :api_key, :base_url, :api_version, :timeout
10
10
 
11
+ VERBS_WITH_BODIES = %i[post put].freeze
12
+
11
13
  def initialize(
12
14
  client_id,
13
15
  client_secret,
@@ -26,11 +28,20 @@ module Veryfi
26
28
  @timeout = timeout
27
29
  end
28
30
 
29
- def get(path, params)
30
- url = [api_url, path].join
31
- headers = generate_headers(params)
32
- response = Faraday.get(url, params, headers)
33
- JSON.parse(response.body)
31
+ def get(path, params = {})
32
+ make_request(:get, path, params)
33
+ end
34
+
35
+ def put(path, params)
36
+ make_request(:put, path, params)
37
+ end
38
+
39
+ def post(path, params)
40
+ make_request(:post, path, params)
41
+ end
42
+
43
+ def delete(path)
44
+ make_request(:delete, path)
34
45
  end
35
46
 
36
47
  def api_url
@@ -39,6 +50,32 @@ module Veryfi
39
50
 
40
51
  private
41
52
 
53
+ def make_request(http_verb, path, params = {})
54
+ url = [api_url, path].join
55
+ body = generate_body(http_verb, params)
56
+ headers = generate_headers(params)
57
+
58
+ response = conn.public_send(http_verb, url, body, headers)
59
+
60
+ if response.success?
61
+ process_response(http_verb, response)
62
+ else
63
+ raise Veryfi::Error.from_response(response)
64
+ end
65
+ end
66
+
67
+ def conn
68
+ @_conn ||= Faraday.new do |conn|
69
+ conn.options.timeout = timeout
70
+ end
71
+ end
72
+
73
+ def generate_body(http_verb, params)
74
+ return params unless VERBS_WITH_BODIES.include?(http_verb)
75
+
76
+ params.to_json
77
+ end
78
+
42
79
  def generate_headers(params = {})
43
80
  return default_headers if client_secret.nil?
44
81
 
@@ -51,11 +88,11 @@ module Veryfi
51
88
  )
52
89
  end
53
90
 
54
- def default_headers(has_files: false)
91
+ def default_headers
55
92
  {
56
- "User-Agent": "Ruby Veryfi-Ruby/0.1.0",
93
+ "User-Agent": "Ruby Veryfi-Ruby/#{Veryfi::VERSION}",
57
94
  "Accept": "application/json",
58
- "Content-Type": has_files ? "application/x-www-form-urlencoded" : "application/json",
95
+ "Content-Type": "application/json",
59
96
  "Client-Id": client_id,
60
97
  "Authorization": "apikey #{username}:#{api_key}"
61
98
  }
@@ -64,5 +101,11 @@ module Veryfi
64
101
  def generate_signature(params, timestamp)
65
102
  Veryfi::Signature.new(client_secret, params, timestamp).to_base64
66
103
  end
104
+
105
+ def process_response(_http_verb, response)
106
+ # return response if http_verb == :delete
107
+
108
+ JSON.parse(response.body)
109
+ end
67
110
  end
68
111
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "openssl"
4
- require "Base64"
4
+ require "base64"
5
5
 
6
6
  module Veryfi
7
7
  class Signature
@@ -20,7 +20,7 @@ module Veryfi
20
20
  # private
21
21
 
22
22
  def digest
23
- OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new("sha256"), secret, payload)
23
+ OpenSSL::HMAC.digest(OpenSSL::Digest.new("sha256"), secret, payload)
24
24
  end
25
25
 
26
26
  def payload
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Veryfi
4
- VERSION = "0.0.0"
4
+ VERSION = "0.1.3"
5
5
  end
data/lib/veryfi.rb CHANGED
@@ -4,9 +4,13 @@ module Veryfi
4
4
  autoload :VERSION, "veryfi/version"
5
5
  autoload :Signature, "veryfi/signature"
6
6
  autoload :Request, "veryfi/request"
7
+ autoload :Error, "veryfi/error"
7
8
 
8
9
  module Api
9
10
  autoload :Document, "veryfi/api/document"
11
+ autoload :LineItem, "veryfi/api/line_item"
12
+ autoload :Tag, "veryfi/api/tag"
13
+ autoload :DocumentTag, "veryfi/api/document_tag"
10
14
  end
11
15
 
12
16
  autoload :Client, "veryfi/client"
data/veryfi.gemspec CHANGED
@@ -22,17 +22,21 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ["lib"]
23
23
  spec.license = "MIT"
24
24
 
25
- spec.add_dependency "faraday", "~> 1.7"
25
+ spec.add_dependency "base64", "~> 0.1"
26
26
  spec.add_dependency "openssl", "~> 2.2"
27
27
 
28
- spec.add_development_dependency "bundler", "~> 1.17"
29
- spec.add_development_dependency "bundler-audit", "~> 0.6"
28
+ spec.add_dependency "faraday", "~> 1.7"
29
+
30
+ spec.add_development_dependency "bundler", "~> 2.2"
31
+ spec.add_development_dependency "bundler-audit", "~> 0.9"
30
32
  spec.add_development_dependency "pry", "~> 0.14"
31
33
  spec.add_development_dependency "rake", "~> 13.0"
32
34
  spec.add_development_dependency "rspec", "~> 3.9"
33
35
  spec.add_development_dependency "rspec-its", "~> 1.3"
34
36
  spec.add_development_dependency "rubocop", "~> 0.82"
35
37
  spec.add_development_dependency "rubocop-rspec", "~> 1.38"
38
+ spec.add_development_dependency "simplecov", "~> 0.21"
39
+ spec.add_development_dependency "simplecov-badge", "~> 2.0"
36
40
  spec.add_development_dependency "vcr", "~> 6.0"
37
41
  spec.add_development_dependency "webmock", "~> 3.14"
38
42
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: veryfi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Veryfi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-31 00:00:00.000000000 Z
11
+ date: 2021-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: faraday
14
+ name: base64
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '0.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: '0.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: openssl
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,34 +38,48 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.7'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '1.17'
61
+ version: '2.2'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '1.17'
68
+ version: '2.2'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler-audit
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '0.6'
75
+ version: '0.9'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '0.6'
82
+ version: '0.9'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: pry
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +164,34 @@ dependencies:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
166
  version: '1.38'
167
+ - !ruby/object:Gem::Dependency
168
+ name: simplecov
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.21'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.21'
181
+ - !ruby/object:Gem::Dependency
182
+ name: simplecov-badge
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '2.0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '2.0'
153
195
  - !ruby/object:Gem::Dependency
154
196
  name: vcr
155
197
  requirement: !ruby/object:Gem::Requirement
@@ -185,6 +227,8 @@ executables: []
185
227
  extensions: []
186
228
  extra_rdoc_files: []
187
229
  files:
230
+ - ".github/workflows/release.yml"
231
+ - ".github/workflows/test.yml"
188
232
  - ".gitignore"
189
233
  - ".rspec"
190
234
  - ".rubocop.yml"
@@ -194,18 +238,31 @@ files:
194
238
  - Gemfile.lock
195
239
  - README.md
196
240
  - bin/autospec
197
- - bin/build
198
241
  - bin/bundle-audit
199
242
  - bin/ci
200
243
  - bin/console
201
244
  - bin/quality
245
+ - bin/release
202
246
  - bin/rspec
203
247
  - bin/rubocop
204
248
  - bin/setup
249
+ - coverage/coverage-badge.png
250
+ - docs/.gitignore
251
+ - docs/404.html
252
+ - docs/Gemfile
253
+ - docs/Gemfile.lock
254
+ - docs/_config.yml
255
+ - docs/_includes/footer.html
256
+ - docs/_includes/header.html
257
+ - docs/index.markdown
205
258
  - lib/.keep
206
259
  - lib/veryfi.rb
207
260
  - lib/veryfi/api/document.rb
261
+ - lib/veryfi/api/document_tag.rb
262
+ - lib/veryfi/api/line_item.rb
263
+ - lib/veryfi/api/tag.rb
208
264
  - lib/veryfi/client.rb
265
+ - lib/veryfi/error.rb
209
266
  - lib/veryfi/request.rb
210
267
  - lib/veryfi/signature.rb
211
268
  - lib/veryfi/version.rb
@@ -229,7 +286,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
229
286
  - !ruby/object:Gem::Version
230
287
  version: '0'
231
288
  requirements: []
232
- rubygems_version: 3.1.4
289
+ rubygems_version: 3.1.6
233
290
  signing_key:
234
291
  specification_version: 4
235
292
  summary: Veryfi SDK for Ruby
data/bin/build DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env sh
2
-
3
- set -e
4
-
5
- bin/quality
6
- bin/rspec