bigid_bgcheck 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|