bigid_bgcheck 0.1.0 → 0.1.1
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/CHANGELOG.md +5 -0
- data/README.md +96 -0
- data/Rakefile +30 -20
- data/lib/bigid/bgcheck/auth/authenticated_connection.rb +20 -19
- data/lib/bigid/bgcheck/auth/authenticated_resource.rb +2 -0
- data/lib/bigid/bgcheck/auth/authentication.rb +15 -14
- data/lib/bigid/bgcheck/auth/connection.rb +4 -2
- data/lib/bigid/bgcheck/bad_request_error.rb +2 -0
- data/lib/bigid/bgcheck/base_error.rb +5 -5
- data/lib/bigid/bgcheck/doc_type.rb +17 -0
- data/lib/bigid/bgcheck/document_not_supported_error.rb +2 -0
- data/lib/bigid/bgcheck/integration/connection.rb +48 -47
- data/lib/bigid/bgcheck/integration/multipart_flat.rb +6 -4
- data/lib/bigid/bgcheck/integration/request.rb +2 -0
- data/lib/bigid/bgcheck/integration/response.rb +2 -0
- data/lib/bigid/bgcheck/internal_error.rb +4 -2
- data/lib/bigid/bgcheck/invalid_credentials_error.rb +2 -0
- data/lib/bigid/bgcheck/invalid_document_value_error.rb +2 -0
- data/lib/bigid/bgcheck/no_info_error.rb +4 -2
- data/lib/bigid/bgcheck/not_permission_error.rb +2 -0
- data/lib/bigid/bgcheck/request.rb +34 -43
- data/lib/bigid/bgcheck/result.rb +2 -0
- data/lib/bigid/bgcheck/result_code.rb +30 -0
- data/lib/bigid/bgcheck/server_error.rb +2 -0
- data/lib/bigid/bgcheck/version.rb +3 -1
- data/lib/bigid_bgcheck.rb +45 -37
- data/spec/bigid_bgcheck_spec.rb +96 -4
- data/spec/lib/bgcheck/doc_type_spec.rb +28 -0
- data/spec/lib/bgcheck/result_code_spec.rb +78 -0
- data/spec/spec_helper.rb +13 -12
- metadata +132 -18
- data/README.rdoc +0 -26
@@ -1,17 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bigid
|
2
4
|
module Bgcheck
|
3
5
|
module Integration
|
4
6
|
class MultipartFlat < Faraday::Request::Multipart
|
5
|
-
self.mime_type =
|
6
|
-
DEFAULT_BOUNDARY_PREFIX = "-----------RubyMultipartPost"
|
7
|
+
self.mime_type = "multipart/form-data"
|
8
|
+
DEFAULT_BOUNDARY_PREFIX = "-----------RubyMultipartPost" unless defined? DEFAULT_BOUNDARY_PREFIX
|
7
9
|
|
8
10
|
def process_params(params, prefix = nil, pieces = nil, &block)
|
9
11
|
params.inject(pieces || []) do |all, (key, value)|
|
10
|
-
key =
|
12
|
+
key = prefix.to_s if prefix
|
11
13
|
|
12
14
|
case value
|
13
15
|
when Array
|
14
|
-
values = value.inject([]) { |a,v| a << [nil, v] }
|
16
|
+
values = value.inject([]) { |a, v| a << [nil, v] }
|
15
17
|
process_params(values, key, all, &block)
|
16
18
|
when Hash
|
17
19
|
process_params(value, key, all, &block)
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bigid
|
2
4
|
module Bgcheck
|
3
5
|
class InternalError < BaseError
|
4
6
|
HTTP_STATUS = 400
|
5
|
-
STATUS =
|
6
|
-
STATUS_CODE =
|
7
|
+
STATUS = "internal_error"
|
8
|
+
STATUS_CODE = "-1101"
|
7
9
|
|
8
10
|
def http_status
|
9
11
|
HTTP_STATUS
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bigid
|
2
4
|
module Bgcheck
|
3
5
|
class NoInfoError < BaseError
|
4
6
|
HTTP_STATUS = 200
|
5
|
-
STATUS =
|
6
|
-
STATUS_CODE =
|
7
|
+
STATUS = "no_info_error"
|
8
|
+
STATUS_CODE = "-1102"
|
7
9
|
|
8
10
|
def http_status
|
9
11
|
HTTP_STATUS
|
@@ -1,19 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bigid
|
2
4
|
module Bgcheck
|
3
5
|
class Request < Bigid::Bgcheck::Auth::AuthenticatedResource
|
4
|
-
VALID_DOCUMENTS = %w[CPF CNPJ].freeze
|
5
|
-
|
6
|
-
APPROVED = 90.freeze
|
7
|
-
NOT_APPROVED = -1100.freeze
|
8
|
-
ERROR = -1101.freeze
|
9
|
-
NO_INFO = -1102.freeze
|
10
|
-
|
11
6
|
def call(document:, document_type:, group:)
|
12
|
-
res = @connection.post(url: Bigid::Bgcheck::SRV_ENDPOINT,
|
7
|
+
res = @connection.post(url: Bigid::Bgcheck::SRV_ENDPOINT,
|
8
|
+
body: payload(document, document_type, group).to_json)
|
13
9
|
|
14
10
|
check_status(res.status)
|
15
11
|
|
16
|
-
|
12
|
+
parse_response_body(res.body)
|
17
13
|
end
|
18
14
|
|
19
15
|
def self.call(document:, document_type:, group:)
|
@@ -21,48 +17,43 @@ module Bigid
|
|
21
17
|
end
|
22
18
|
|
23
19
|
private
|
20
|
+
def check_status(status)
|
21
|
+
raise Bigid::Bgcheck::InternalError unless status
|
22
|
+
raise Bigid::Bgcheck::ServerError if status == 500
|
23
|
+
raise Bigid::Bgcheck::InvalidCredentialsError if status == 401
|
24
|
+
raise Bigid::Bgcheck::BadRequestError if status == 400
|
25
|
+
end
|
24
26
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
raise Bigid::Bgcheck::InvalidCredentialsError if status == 401
|
29
|
-
raise Bigid::Bgcheck::BadRequestError if status == 400
|
30
|
-
end
|
31
|
-
|
32
|
-
def payload(document, document_type, group, parameters = {})
|
33
|
-
login = Bigid::Bgcheck.configuration&.username || ENV['BIGID_USERNAME']
|
34
|
-
document_type = document_type.upcase.strip
|
27
|
+
def payload(document, document_type, group, parameters = {})
|
28
|
+
login = Bigid::Bgcheck.configuration.username
|
29
|
+
document_type = document_type.upcase.strip
|
35
30
|
|
36
|
-
|
37
|
-
raise Bigid::Bgcheck::DocumentNotSupportedError
|
38
|
-
end
|
31
|
+
raise Bigid::Bgcheck::DocumentNotSupportedError unless DocType.valid?(document_type)
|
39
32
|
|
40
|
-
|
33
|
+
parameters[:"#{document_type}"] = document
|
41
34
|
|
42
|
-
|
43
|
-
|
35
|
+
{ Login: login, parameters: parameters, Group: group }
|
36
|
+
end
|
44
37
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
38
|
+
def check_result_code(code)
|
39
|
+
raise Bigid::Bgcheck::InvalidDocumentValueError unless code
|
40
|
+
raise Bigid::Bgcheck::NoInfoError if ResultCode.no_info?(code)
|
41
|
+
end
|
49
42
|
|
50
|
-
|
51
|
-
|
43
|
+
def parse_response_body(body)
|
44
|
+
body = JSON.parse(body)
|
52
45
|
|
53
|
-
|
46
|
+
check_result_code(body["ResultCode"])
|
54
47
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
raise Bigid::Bgcheck::InternalError
|
65
|
-
end
|
48
|
+
Bigid::Bgcheck::Result.new(
|
49
|
+
approved: ResultCode.approved?(body["ResultCode"]),
|
50
|
+
ticket_id: body["TicketId"],
|
51
|
+
code: body["ResultCode"],
|
52
|
+
message: body["ResultMessage"],
|
53
|
+
score: body["Score"],
|
54
|
+
limit_score: body["LimitScore"]
|
55
|
+
)
|
56
|
+
end
|
66
57
|
end
|
67
58
|
end
|
68
59
|
end
|
data/lib/bigid/bgcheck/result.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bigid
|
4
|
+
module Bgcheck
|
5
|
+
class ResultCode
|
6
|
+
APPROVED = 90
|
7
|
+
ERROR = -1101
|
8
|
+
NO_INFO = -1102
|
9
|
+
NOT_APPROVED = -1100
|
10
|
+
|
11
|
+
VALUES = [APPROVED, NOT_APPROVED, ERROR, NO_INFO].freeze
|
12
|
+
|
13
|
+
def self.valid?(code)
|
14
|
+
VALUES.include?(code.to_i)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.values
|
18
|
+
VALUES
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.approved?(code)
|
22
|
+
code.to_i == APPROVED
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.no_info?(code)
|
26
|
+
code.to_i == NO_INFO
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bigid
|
2
4
|
module Bgcheck
|
3
5
|
# When updating version, keep in mind Semantic Versioning http://semver.org/
|
@@ -7,6 +9,6 @@ module Bigid
|
|
7
9
|
# Major - Incremented for incompatible changes with previous release (or big enough new features)
|
8
10
|
# Minor - Incremented for new backwards-compatible features + deprecations
|
9
11
|
# Patch - Incremented for backwards-compatible bug fixes
|
10
|
-
VERSION = "0.1.
|
12
|
+
VERSION = "0.1.1"
|
11
13
|
end
|
12
14
|
end
|
data/lib/bigid_bgcheck.rb
CHANGED
@@ -1,43 +1,48 @@
|
|
1
|
-
|
2
|
-
require 'i18n'
|
3
|
-
require 'json'
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
|
-
require
|
3
|
+
require "faraday"
|
4
|
+
require "i18n"
|
5
|
+
require "json"
|
6
6
|
|
7
|
-
require
|
8
|
-
require 'bigid/bgcheck/integration/response'
|
9
|
-
require 'bigid/bgcheck/integration/request'
|
10
|
-
require 'bigid/bgcheck/integration/connection'
|
7
|
+
require "bigid/bgcheck/version"
|
11
8
|
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
9
|
+
require "bigid/bgcheck/integration/multipart_flat"
|
10
|
+
require "bigid/bgcheck/integration/response"
|
11
|
+
require "bigid/bgcheck/integration/request"
|
12
|
+
require "bigid/bgcheck/integration/connection"
|
16
13
|
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require 'bigid/bgcheck/invalid_credentials_error'
|
22
|
-
require 'bigid/bgcheck/no_info_error'
|
23
|
-
require 'bigid/bgcheck/result'
|
24
|
-
require 'bigid/bgcheck/server_error'
|
14
|
+
require "bigid/bgcheck/auth/connection"
|
15
|
+
require "bigid/bgcheck/auth/authentication"
|
16
|
+
require "bigid/bgcheck/auth/authenticated_resource"
|
17
|
+
require "bigid/bgcheck/auth/authenticated_connection"
|
25
18
|
|
26
|
-
require
|
19
|
+
require "bigid/bgcheck/base_error"
|
20
|
+
require "bigid/bgcheck/bad_request_error"
|
21
|
+
require "bigid/bgcheck/document_not_supported_error"
|
22
|
+
require "bigid/bgcheck/internal_error"
|
23
|
+
require "bigid/bgcheck/invalid_credentials_error"
|
24
|
+
require "bigid/bgcheck/no_info_error"
|
25
|
+
require "bigid/bgcheck/server_error"
|
26
|
+
|
27
|
+
require "bigid/bgcheck/doc_type"
|
28
|
+
require "bigid/bgcheck/result"
|
29
|
+
require "bigid/bgcheck/result_code"
|
30
|
+
|
31
|
+
require "bigid/bgcheck/request"
|
27
32
|
|
28
33
|
module Bigid
|
29
34
|
module Bgcheck
|
30
|
-
BASE_URL =
|
31
|
-
AUTH_ENDPOINT =
|
32
|
-
SRV_ENDPOINT =
|
33
|
-
TOKEN_EXPIRATION =
|
34
|
-
|
35
|
-
# This file is the entry point for your gem. Logic can go in this file, though most gems are big enough to warrant splitting
|
36
|
-
# functionality out into multiple files namespaced under a module named the same as a gem.
|
37
|
-
# Create those files as lib/bigid_bgcheck/foo as BigidBgcheck::Foo remembering to require each file at the top of this file,
|
38
|
-
# unless you want your users to manually require a specific file (for example opt-in feature in a distinct file)
|
35
|
+
BASE_URL = "https://bigid.bigdatacorp.com.br"
|
36
|
+
AUTH_ENDPOINT = "https://accesstoken.bigdatacorp.com.br"
|
37
|
+
SRV_ENDPOINT = "backgroundcheck"
|
38
|
+
TOKEN_EXPIRATION = 60_000
|
39
|
+
|
39
40
|
class << self
|
40
|
-
|
41
|
+
attr_writer :configuration
|
42
|
+
|
43
|
+
def configuration
|
44
|
+
@configuration ||= Configuration.new
|
45
|
+
end
|
41
46
|
end
|
42
47
|
|
43
48
|
def self.configure
|
@@ -47,16 +52,19 @@ module Bigid
|
|
47
52
|
end
|
48
53
|
|
49
54
|
class Configuration
|
50
|
-
|
55
|
+
attr_writer :username, :password
|
56
|
+
|
57
|
+
def username
|
58
|
+
@username ||= ENV["BIGID_USERNAME"]
|
59
|
+
end
|
51
60
|
|
52
|
-
def
|
53
|
-
@
|
54
|
-
@password = ''
|
61
|
+
def password
|
62
|
+
@password ||= ENV["BIGID_PASSWORD"]
|
55
63
|
end
|
56
64
|
end
|
57
65
|
|
58
|
-
I18n.load_path << Dir[File.expand_path(
|
59
|
-
I18n.config.available_locales = :en
|
66
|
+
I18n.load_path << Dir["#{File.expand_path('config/locales')}/*.yml"]
|
67
|
+
I18n.config.available_locales = :en, :'pt-BR'
|
60
68
|
I18n.default_locale = :en
|
61
69
|
end
|
62
70
|
end
|
data/spec/bigid_bgcheck_spec.rb
CHANGED
@@ -1,7 +1,99 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require "spec_helper"
|
4
|
+
require "bigid_bgcheck"
|
5
|
+
|
6
|
+
RSpec.describe Bigid::Bgcheck do
|
7
|
+
describe "BASE_URL" do
|
8
|
+
subject { defined? Bigid::Bgcheck::BASE_URL }
|
9
|
+
|
10
|
+
it { expect(subject).to be_truthy }
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "AUTH_ENDPOINT" do
|
14
|
+
subject { defined? Bigid::Bgcheck::AUTH_ENDPOINT }
|
15
|
+
|
16
|
+
it { expect(subject).to be_truthy }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "SRV_ENDPOINT" do
|
20
|
+
subject { defined? Bigid::Bgcheck::SRV_ENDPOINT }
|
21
|
+
|
22
|
+
it { expect(subject).to be_truthy }
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "TOKEN_EXPIRATION" do
|
26
|
+
subject { defined? Bigid::Bgcheck::TOKEN_EXPIRATION }
|
27
|
+
|
28
|
+
it { expect(subject).to be_truthy }
|
29
|
+
end
|
30
|
+
|
31
|
+
describe ".configure" do
|
32
|
+
before do
|
33
|
+
described_class.configuration = nil
|
34
|
+
ENV.clear
|
35
|
+
end
|
36
|
+
|
37
|
+
subject { described_class.configuration }
|
38
|
+
|
39
|
+
context "when configuration is defined" do
|
40
|
+
before do
|
41
|
+
described_class.configure do |config|
|
42
|
+
config.username = "username_value"
|
43
|
+
config.password = "password_value"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it { expect(subject).not_to be_nil }
|
48
|
+
|
49
|
+
it { expect(subject.username).to eq("username_value") }
|
50
|
+
|
51
|
+
it { expect(subject.password).to eq("password_value") }
|
52
|
+
end
|
53
|
+
|
54
|
+
context "when configuration is not defined" do
|
55
|
+
it { expect(subject).not_to be_nil }
|
56
|
+
|
57
|
+
it { expect(subject.username).to be_nil }
|
58
|
+
|
59
|
+
it { expect(subject.password).to be_nil }
|
60
|
+
end
|
61
|
+
|
62
|
+
context "when its configured by envs" do
|
63
|
+
before do
|
64
|
+
ENV["BIGID_USERNAME"] = "username_value"
|
65
|
+
ENV["BIGID_PASSWORD"] = "password_value"
|
66
|
+
end
|
67
|
+
|
68
|
+
it { expect(subject).not_to be_nil }
|
69
|
+
|
70
|
+
it { expect(subject.username).to eq("username_value") }
|
71
|
+
|
72
|
+
it { expect(subject.password).to eq("password_value") }
|
73
|
+
end
|
74
|
+
|
75
|
+
context "when its envs configured and configs setted" do
|
76
|
+
before do
|
77
|
+
ENV["BIGID_USERNAME"] = "username_value"
|
78
|
+
ENV["BIGID_PASSWORD"] = "password_value"
|
79
|
+
|
80
|
+
described_class.configure do |config|
|
81
|
+
config.username = "username_value2"
|
82
|
+
config.password = "password_value2"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
it { expect(subject).not_to be_nil }
|
87
|
+
|
88
|
+
it { expect(subject.username).to eq("username_value2") }
|
89
|
+
|
90
|
+
it { expect(subject.password).to eq("password_value2") }
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "I18n calls" do
|
94
|
+
it { expect(I18n.default_locale).to eq(:en) }
|
95
|
+
|
96
|
+
it { expect(I18n.config.available_locales).to contain_exactly(:en, :'pt-BR') }
|
97
|
+
end
|
6
98
|
end
|
7
99
|
end
|