zaig 1.0.1 → 1.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4babb0d0bda420a84f8f2d76fd18e071d0bed7850894b16a40893093a3342e52
4
- data.tar.gz: 3621eb17427b7c045ccb7a30a718e349f9480ed9b13a3639164c5d1dcead52ca
3
+ metadata.gz: 445f2312bf3306d59b548373e139522dbea660d2078c7c617837ffbff8429dc7
4
+ data.tar.gz: 2dfd8b0ac9f20729abf3df0447a5a3a3d349371bd3558d86e62ff84355f89f20
5
5
  SHA512:
6
- metadata.gz: c83914f1e233d92f84df4358203895fd12afa8fe6ccc5718a0d30b9749370f0ee0d9a6d7c09b6b25f341594226e718d2156f064482ff90f1608376f2daa434e8
7
- data.tar.gz: 8ee4b8a9afba32cfbf2484c3fa20ae66f60feea5eae5fac9a62881f22b299a378e4ec452f3370672def9eff4811e95c6388fc6cd8b9d18cc99c55fbf0c4cef48
6
+ metadata.gz: c055883e1eac329a7249f79542eb10186fd2a508575e90a1e4dfd10f68e95ab2819f05386213ee4a06e37158440245a588f1d3ee260f8790a5759abb856652c7
7
+ data.tar.gz: b0ea93f0f3a76a3e7b4a698096e284dc5734c4cfd915f28a2de38cc4882bab5309065854061f07d1004e311c4b20a52ec0d1c034828ff054c7979233ef16c51d
data/lib/locales/en.yml CHANGED
@@ -2,5 +2,6 @@ en:
2
2
  name: Zaig
3
3
  zaig:
4
4
  errors:
5
+ validation_error: An validation error was got
5
6
  field_not_found: Field not found in the server response '{field_name}'
6
7
  unexpected_error: Integration returned an unexpected status code
@@ -2,5 +2,6 @@
2
2
  name: Zaig
3
3
  zaig:
4
4
  errors:
5
+ validation_error: Houve um problema na validação dos campos
5
6
  field_not_found: Campo não encontrado na resposta do servidor '{field_name}'
6
7
  unexpected_error: Integração retornou um estado inesperado
@@ -2,5 +2,6 @@
2
2
 
3
3
  module Zaig
4
4
  class FieldValidationError < BaseError
5
+ attr_accessor :detail
5
6
  end
6
7
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "singleton"
4
-
5
3
  module Zaig
6
4
  # Class to request a registration to the remote server.
7
5
  class Registration
@@ -45,11 +43,18 @@ module Zaig
45
43
  def verify_response(res)
46
44
  return if res.status.between?(200, 299)
47
45
 
48
- raise ::Zaig::UnexpectedError, I18n.t("zaig.errors.unexpected_error") if res.status != 500
46
+ raise ::Zaig::ServerError, I18n.t("zaig.errors.unexpected_error") if res.status.between?(500, 599)
49
47
 
50
48
  parsed_res = JSON.parse(res.body, symbolize_names: true)
51
49
 
52
- raise ::Zaig::ServerError, I18n.t("zaig.errors.field_not_found", field_name: "resposta_zaig") unless parsed_res.key?(:resposta_zaig)
50
+ unless parsed_res.key?(:resposta_zaig)
51
+ detail = JSON.parse(res.body, symbolize_names: true)[:detail]
52
+
53
+ error = ::Zaig::FieldValidationError.new I18n.t("zaig.errors.validation_error", field_name: "resposta_zaig")
54
+ error.detail = JSON.parse(res.body, symbolize_names: true)[:detail]
55
+
56
+ raise error
57
+ end
53
58
 
54
59
  zaig_msg = parsed_res[:resposta_zaig][:msg]
55
60
  zaig_http_status = parsed_res[:resposta_zaig][:status]
@@ -59,12 +64,12 @@ module Zaig
59
64
 
60
65
  def raise_error_by_zaig_status(msg, status)
61
66
  case status
62
- when 209
63
- raise ::Zaig::AlreadyExistsError, msg
64
67
  when 400
65
68
  raise ::Zaig::FieldValidationError, msg
66
69
  when 408
67
70
  raise ::Zaig::ExternalTimeoutError, msg
71
+ when 409
72
+ raise ::Zaig::AlreadyExistsError, msg
68
73
  when 422
69
74
  raise ::Zaig::UnprocessableEntityError, msg
70
75
  else
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "singleton"
4
-
5
3
  module Zaig
6
4
  # Service class to build a registration payload request.
7
5
  class RegistrationPayload
@@ -9,48 +7,52 @@ module Zaig
9
7
 
10
8
  def call(obj)
11
9
  {
12
- address: build_address(obj["address"]),
13
- client_category: obj["client_category"],
14
- constitution_date: obj["constitution_date"],
15
- constitution_type: obj["constitution_type"],
16
- credit_request_date: obj["credit_request_date"],
17
- credit_type: obj["credit_type"] || "clean",
18
- document_number: CNPJ.new(obj["document_number"]).number,
19
- email: obj["email"],
20
- financial: obj.key?("financial") ? build_financial(obj["financial"]) : nil,
21
- guarantors: obj.key?("guarantors") ? build_shareholders(obj["guarantors"]) : nil,
22
- id: obj["id"],
23
- legal_name: obj["legal_name"],
24
- monthly_revenue: obj["monthly_revenue"].to_f,
25
- phones: build_phones(obj["phones"]),
26
- shareholders: build_shareholders(obj["shareholders"]),
27
- source: build_source(obj["source"]),
28
- scr_parameters: build_scr_parameters(obj["scr_parameters"]),
29
- trading_name: obj["trading_name"],
30
- warrants: build_warrants(obj["warrants"])
10
+ address: build_address(obj[:address]),
11
+ client_category: obj[:client_category],
12
+ constitution_date: obj[:constitution_date],
13
+ constitution_type: obj[:constitution_type],
14
+ credit_request_date: obj[:credit_request_date],
15
+ credit_type: obj[:credit_type] || "clean",
16
+ document_number: CNPJ.new(obj[:document_number]).formatted,
17
+ email: obj[:email],
18
+ financial: obj.key?("financial") ? build_financial(obj[:financial]) : nil,
19
+ guarantors: obj.key?("guarantors") ? build_shareholders(obj[:guarantors]) : nil,
20
+ id: obj[:id],
21
+ legal_name: obj[:legal_name],
22
+ monthly_revenue: format_money(obj[:monthly_revenue], require_positive: true),
23
+ phones: build_phones(obj[:phones]),
24
+ shareholders: build_shareholders(obj[:shareholders]),
25
+ source: obj.key?("source") ? build_source(obj[:source]) : nil,
26
+ scr_parameters: obj.key?("scr_parameters") ? build_scr_parameters(obj[:scr_parameters]) : nil,
27
+ trading_name: obj[:trading_name],
28
+ warrants: obj.key?("warrants") ? build_warrants(obj[:warrants]) : nil
31
29
  }
32
30
  end
33
31
 
34
32
  private
33
+ def format_money(value, require_positive: false)
34
+ require_positive && !value.to_f.positive? ? 1.0 : value.to_f
35
+ end
36
+
35
37
  def build_address(obj_address)
36
38
  {
37
- city: obj_address["city"],
38
- complement: obj_address["complement"] || "",
39
- country: obj_address["country"] || "BRA",
40
- neighborhood: obj_address["neighborhood"],
41
- number: obj_address["number"],
42
- postal_code: obj_address["postal_code"],
43
- street: obj_address["street"],
44
- uf: obj_address["uf"]
39
+ city: obj_address[:city],
40
+ complement: obj_address[:complement] || "",
41
+ country: obj_address[:country] || "BRA",
42
+ neighborhood: obj_address[:neighborhood],
43
+ number: obj_address[:number],
44
+ postal_code: format_cep(obj_address[:postal_code]),
45
+ street: obj_address[:street],
46
+ uf: obj_address[:uf]
45
47
  }
46
48
  end
47
49
 
48
50
  def build_phone(obj)
49
51
  {
50
- area_code: obj["area_code"],
51
- international_dial_code: obj["international_dial_code"],
52
- number: obj["number"],
53
- type: obj["type"]
52
+ area_code: obj[:area_code],
53
+ international_dial_code: obj[:international_dial_code],
54
+ number: obj[:number],
55
+ type: obj[:type]
54
56
  }
55
57
  end
56
58
 
@@ -63,88 +65,104 @@ module Zaig
63
65
  end
64
66
 
65
67
  def build_shareholders(obj_shareholders)
68
+ return nil if obj_shareholders.nil?
69
+
66
70
  shareholders = []
67
71
 
68
72
  obj_shareholders.each do |s|
69
73
  shareholders << {
70
- address: build_address(s["address"]),
71
- birthdate: Date.parse(s["birthdate"]).to_s,
72
- declared_assets: s["declared_assets"],
73
- document_number: CPF.new(s["document_number"]).number,
74
- email: s["email"],
75
- father_name: s["father_name"],
76
- gender: s["gender"],
77
- monthly_income: s["monthly_income"].to_f,
78
- mother_name: s["mother_name"],
79
- name: s["name"],
80
- nationality: s["nationality"],
81
- occupation: s["occupation"],
82
- phones: build_phones(s["phones"])
74
+ address: build_address(s[:address]),
75
+ birthdate: s[:birthdate],
76
+ declared_assets: format_money(s[:declared_assets]),
77
+ document_number: CPF.new(s[:document_number]).formatted,
78
+ email: s[:email],
79
+ father_name: s[:father_name],
80
+ gender: s[:gender],
81
+ monthly_income: format_money(s[:monthly_income]),
82
+ mother_name: s[:mother_name],
83
+ name: s[:name],
84
+ nationality: s[:nationality],
85
+ occupation: s[:occupation],
86
+ phones: build_phones(s[:phones])
83
87
  }
84
88
  end
85
89
  shareholders
86
90
  end
87
91
 
88
92
  def build_financial(fin)
93
+ return nil if fin.nil?
94
+
89
95
  {
90
- amount: fin["amount"],
91
- annual_interest_rate: fin["annual_interest_rate"],
92
- cdi_percentage: fin["cdi_percentage"],
93
- currency: fin["currency"] || "BRL",
94
- interest_type: fin["interest_type"],
95
- number_of_installments: fin.key?("number_of_installments") ? fin["number_of_installments"].to_i : 0
96
+ amount: fin[:amount],
97
+ annual_interest_rate: fin[:annual_interest_rate],
98
+ cdi_percentage: fin[:cdi_percentage],
99
+ currency: fin[:currency] || "BRL",
100
+ interest_type: fin[:interest_type],
101
+ number_of_installments: fin.key?("number_of_installments") ? fin[:number_of_installments].to_i : 0
96
102
  }
97
103
  end
98
104
 
99
105
  def build_warrants(obj_warrants)
106
+ return nil if obj_warrants.nil?
107
+
100
108
  warrants = []
101
109
 
102
110
  obj_warrants.each do |w|
103
111
  warrants << {
104
- warrant_type: w["warrant_type"],
105
- address: build_address(w["address"]),
106
- property_type: w["property_type"],
107
- estimated_value: w["estimated_value"],
108
- forced_selling_value: w["forced_selling_value"]
112
+ warrant_type: w[:warrant_type],
113
+ address: build_address(w[:address]),
114
+ property_type: w[:property_type],
115
+ estimated_value: w[:estimated_value],
116
+ forced_selling_value: w[:forced_selling_value]
109
117
  }
110
118
  end
111
119
  warrants
112
120
  end
113
121
 
114
122
  def build_source(obj_source)
123
+ return nil if obj_source.nil?
124
+
115
125
  {
116
- channel: obj_source["channel"],
117
- ip: obj_source["ip"],
118
- session_id: obj_source["session_id"]
126
+ channel: obj_source[:channel],
127
+ ip: obj_source[:ip],
128
+ session_id: obj_source[:session_id]
119
129
  }
120
130
  end
121
131
 
122
132
  def build_scr_parameters(obj_src)
133
+ return nil if obj_src.nil?
134
+
123
135
  {
124
- signers: build_signers(obj_src["signers"]),
136
+ signers: build_signers(obj_src[:signers]),
125
137
  signature_evidence: {
126
- access_token: obj_src["signature_evidence"]["access_token"],
127
- additional_data: obj_src["signature_evidence"]["additional_data"],
128
- ip_address: obj_src["signature_evidence"]["ip_address"],
129
- session_id: obj_src["signature_evidence"]["session_id"],
138
+ access_token: obj_src[:signature_evidence][:access_token],
139
+ additional_data: obj_src[:signature_evidence][:additional_data],
140
+ ip_address: obj_src[:signature_evidence][:ip_address],
141
+ session_id: obj_src[:signature_evidence][:session_id],
130
142
  signed_term: {
131
- raw_text: obj_src["signature_evidence"]["signed_term"]["raw_text"]
143
+ raw_text: obj_src[:signature_evidence][:signed_term][:raw_text]
132
144
  }
133
145
  }
134
146
  }
135
147
  end
136
148
 
137
149
  def build_signers(obj_signers)
150
+ return nil if obj_signers.nil?
151
+
138
152
  signers = []
139
153
  obj_signers.each do |s|
140
154
  signers << {
141
- document_number: CNPJ.new(s["document_number"]).number,
142
- name: s["name"],
143
- email: s["email"],
144
- phone: build_phone(s["phone"])
155
+ document_number: CNPJ.new(s[:document_number]).number,
156
+ name: s[:name],
157
+ email: s[:email],
158
+ phone: build_phone(s[:phone])
145
159
  }
146
160
  end
147
161
  signers
148
162
  end
163
+
164
+ def format_cep(cep)
165
+ cep.gsub(/[^0-9]/, "").insert(5, "-")
166
+ end
149
167
  end
150
168
  end
data/lib/zaig/version.rb CHANGED
@@ -8,5 +8,5 @@ module Zaig
8
8
  # Major - Incremented for incompatible changes with previous release (or big enough new features)
9
9
  # Minor - Incremented for new backwards-compatible features + deprecations
10
10
  # Patch - Incremented for backwards-compatible bug fixes
11
- VERSION = "1.0.1"
11
+ VERSION = "1.0.4"
12
12
  end
data/lib/zaig.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require "cpf_cnpj"
4
4
  require "flash_integration"
5
5
  require "i18n"
6
+ require "singleton"
6
7
 
7
8
  require "zaig/base_error"
8
9
  require "zaig/already_exists_error"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zaig
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danilo Carolino
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-15 00:00:00.000000000 Z
11
+ date: 2022-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cpf_cnpj