zaig 1.0.3 → 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: 00531b692d17cf8b508317410d44fd193c247f49b73579f1c836199e457a43c1
4
- data.tar.gz: b156aa4e304031c1c65397ac458e9430038d84c7223352b7add307551ee9348d
3
+ metadata.gz: 445f2312bf3306d59b548373e139522dbea660d2078c7c617837ffbff8429dc7
4
+ data.tar.gz: 2dfd8b0ac9f20729abf3df0447a5a3a3d349371bd3558d86e62ff84355f89f20
5
5
  SHA512:
6
- metadata.gz: 4da7e1c681ab55b6ace31c91cda4514076ffb414c8cbfffb98325514c2dafb46b9528c7608169082aa7b4ef89b2caf95a7210835f56fce796b4f7c7d55df022e
7
- data.tar.gz: 1e7ef1819184ec0c8a208e7b7b546f4fdd14ac58ef926d029a9ee9c55f3a3d1834b31273a84f32d2d254fb5c122a499dadb8207548c3b1ca03e2a57cd80c146f
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: Date.parse(obj["constitution_date"]).to_s,
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: obj.key?("source") ? build_source(obj["source"]) : nil,
28
- scr_parameters: obj.key?("scr_parameters") ? build_scr_parameters(obj["scr_parameters"]) : nil,
29
- trading_name: obj["trading_name"],
30
- warrants: obj.key?("warrants") ? build_warrants(obj["warrants"]) : nil
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
 
@@ -69,19 +71,19 @@ module Zaig
69
71
 
70
72
  obj_shareholders.each do |s|
71
73
  shareholders << {
72
- address: build_address(s["address"]),
73
- birthdate: Date.parse(s["birthdate"]).to_s,
74
- declared_assets: s["declared_assets"],
75
- document_number: CPF.new(s["document_number"]).number,
76
- email: s["email"],
77
- father_name: s["father_name"],
78
- gender: s["gender"],
79
- monthly_income: s["monthly_income"].to_f,
80
- mother_name: s["mother_name"],
81
- name: s["name"],
82
- nationality: s["nationality"],
83
- occupation: s["occupation"],
84
- 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])
85
87
  }
86
88
  end
87
89
  shareholders
@@ -91,12 +93,12 @@ module Zaig
91
93
  return nil if fin.nil?
92
94
 
93
95
  {
94
- amount: fin["amount"],
95
- annual_interest_rate: fin["annual_interest_rate"],
96
- cdi_percentage: fin["cdi_percentage"],
97
- currency: fin["currency"] || "BRL",
98
- interest_type: fin["interest_type"],
99
- 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
100
102
  }
101
103
  end
102
104
 
@@ -107,11 +109,11 @@ module Zaig
107
109
 
108
110
  obj_warrants.each do |w|
109
111
  warrants << {
110
- warrant_type: w["warrant_type"],
111
- address: build_address(w["address"]),
112
- property_type: w["property_type"],
113
- estimated_value: w["estimated_value"],
114
- 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]
115
117
  }
116
118
  end
117
119
  warrants
@@ -121,9 +123,9 @@ module Zaig
121
123
  return nil if obj_source.nil?
122
124
 
123
125
  {
124
- channel: obj_source["channel"],
125
- ip: obj_source["ip"],
126
- session_id: obj_source["session_id"]
126
+ channel: obj_source[:channel],
127
+ ip: obj_source[:ip],
128
+ session_id: obj_source[:session_id]
127
129
  }
128
130
  end
129
131
 
@@ -131,14 +133,14 @@ module Zaig
131
133
  return nil if obj_src.nil?
132
134
 
133
135
  {
134
- signers: build_signers(obj_src["signers"]),
136
+ signers: build_signers(obj_src[:signers]),
135
137
  signature_evidence: {
136
- access_token: obj_src["signature_evidence"]["access_token"],
137
- additional_data: obj_src["signature_evidence"]["additional_data"],
138
- ip_address: obj_src["signature_evidence"]["ip_address"],
139
- 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],
140
142
  signed_term: {
141
- raw_text: obj_src["signature_evidence"]["signed_term"]["raw_text"]
143
+ raw_text: obj_src[:signature_evidence][:signed_term][:raw_text]
142
144
  }
143
145
  }
144
146
  }
@@ -150,13 +152,17 @@ module Zaig
150
152
  signers = []
151
153
  obj_signers.each do |s|
152
154
  signers << {
153
- document_number: CNPJ.new(s["document_number"]).number,
154
- name: s["name"],
155
- email: s["email"],
156
- 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])
157
159
  }
158
160
  end
159
161
  signers
160
162
  end
163
+
164
+ def format_cep(cep)
165
+ cep.gsub(/[^0-9]/, "").insert(5, "-")
166
+ end
161
167
  end
162
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.3"
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.3
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