brasilapi 0.8.0 → 0.9.0
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/.rubocop.yml +0 -3
- data/.yardopts +5 -0
- data/CHANGELOG.md +82 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +13 -1
- data/README.md +346 -134
- data/Rakefile +18 -1
- data/lib/brasil_api/address.rb +38 -0
- data/lib/brasil_api/b3.rb +49 -0
- data/lib/brasil_api/bank.rb +31 -0
- data/lib/brasil_api/base.rb +118 -2
- data/lib/brasil_api/business_days.rb +44 -0
- data/lib/brasil_api/cambio.rb +47 -0
- data/lib/brasil_api/cid10.rb +46 -0
- data/lib/brasil_api/company.rb +20 -0
- data/lib/brasil_api/configuration.rb +25 -0
- data/lib/brasil_api/cpf.rb +36 -0
- data/lib/brasil_api/cptec.rb +84 -0
- data/lib/brasil_api/cvm.rb +76 -2
- data/lib/brasil_api/ddd.rb +67 -0
- data/lib/brasil_api/error.rb +30 -1
- data/lib/brasil_api/fipe.rb +111 -6
- data/lib/brasil_api/geolocation.rb +35 -0
- data/lib/brasil_api/holiday.rb +25 -2
- data/lib/brasil_api/hospital.rb +157 -0
- data/lib/brasil_api/ibge.rb +164 -0
- data/lib/brasil_api/ibpt.rb +106 -0
- data/lib/brasil_api/igpm.rb +66 -0
- data/lib/brasil_api/isbn.rb +25 -0
- data/lib/brasil_api/ncm.rb +43 -0
- data/lib/brasil_api/pix.rb +19 -0
- data/lib/brasil_api/registrobr.rb +20 -0
- data/lib/brasil_api/solar.rb +33 -0
- data/lib/brasil_api/status.rb +30 -0
- data/lib/brasil_api/taxas.rb +31 -0
- data/lib/brasil_api/tuss.rb +121 -0
- data/lib/brasil_api/version.rb +7 -1
- data/lib/brasil_api.rb +23 -0
- metadata +16 -1
data/lib/brasil_api/bank.rb
CHANGED
|
@@ -1,12 +1,43 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
3
8
|
module BrasilAPI
|
|
9
|
+
# Bancos participantes do Sistema de Transferência de Reservas.
|
|
10
|
+
#
|
|
11
|
+
# @see https://brasilapi.com.br/docs#tag/BANKS
|
|
4
12
|
class Bank < Base
|
|
5
13
|
class << self
|
|
14
|
+
# Lista os bancos participantes do STR.
|
|
15
|
+
#
|
|
16
|
+
# @return [Array<Hash>] código, nome e ISPB de cada banco
|
|
17
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
18
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
19
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
20
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
21
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
22
|
+
# @example
|
|
23
|
+
# BrasilAPI::Bank.all
|
|
24
|
+
# @see https://brasilapi.com.br/docs#tag/BANKS
|
|
6
25
|
def all
|
|
7
26
|
get("/banks/v1")
|
|
8
27
|
end
|
|
9
28
|
|
|
29
|
+
# Busca um banco pelo código de compensação.
|
|
30
|
+
#
|
|
31
|
+
# @param code [String, Integer] código COMPE, por exemplo +77+
|
|
32
|
+
# @return [Hash] dados do banco
|
|
33
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
34
|
+
# @raise [BrasilAPI::NotFound] quando o código não existe
|
|
35
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
36
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
37
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
38
|
+
# @example Banco Inter
|
|
39
|
+
# BrasilAPI::Bank.find_by_code(77)
|
|
40
|
+
# @see https://brasilapi.com.br/docs#tag/BANKS
|
|
10
41
|
def find_by_code(code)
|
|
11
42
|
get("/banks/v1/#{code}")
|
|
12
43
|
end
|
data/lib/brasil_api/base.rb
CHANGED
|
@@ -4,17 +4,68 @@ require "json"
|
|
|
4
4
|
require "net/http"
|
|
5
5
|
require "uri"
|
|
6
6
|
|
|
7
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
8
|
+
#
|
|
9
|
+
# @example Bancos participantes do STR
|
|
10
|
+
# BrasilAPI::Bank.all
|
|
11
|
+
# @see https://brasilapi.com.br/docs
|
|
7
12
|
module BrasilAPI
|
|
13
|
+
# Cliente HTTP compartilhado pelas famílias de endpoint.
|
|
14
|
+
#
|
|
15
|
+
# @see https://brasilapi.com.br/docs
|
|
8
16
|
class Base
|
|
17
|
+
# Origem das requisições, sem barra no final.
|
|
9
18
|
BASE_URL = "https://brasilapi.com.br/api"
|
|
10
19
|
|
|
11
20
|
class << self
|
|
21
|
+
# Executa um GET e devolve o JSON interpretado.
|
|
22
|
+
#
|
|
23
|
+
# Chaves +nil+ em +params+ não entram na query.
|
|
24
|
+
#
|
|
25
|
+
# @param path [String] caminho a partir de +/api+, começando com +/+
|
|
26
|
+
# @param params [Hash{Symbol,String=>Object}] query string
|
|
27
|
+
# @return [Hash, Array, nil] corpo JSON, ou +nil+ quando o corpo vem vazio
|
|
28
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
29
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
30
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
31
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
32
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
33
|
+
# @example
|
|
34
|
+
# BrasilAPI::Base.get("/banks/v1")
|
|
12
35
|
def get(path, params = {})
|
|
13
36
|
request_data(build_uri(path, params))
|
|
14
37
|
end
|
|
15
38
|
|
|
16
39
|
protected
|
|
17
40
|
|
|
41
|
+
# Formata uma data para +YYYY-MM-DD+.
|
|
42
|
+
#
|
|
43
|
+
# @api private
|
|
44
|
+
# @param value [Date, Time, DateTime, String] data ou texto já formatado
|
|
45
|
+
# @return [String]
|
|
46
|
+
def format_date(value)
|
|
47
|
+
return value.strftime("%Y-%m-%d") if value.respond_to?(:strftime)
|
|
48
|
+
|
|
49
|
+
value
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Traduz chaves da gem para os nomes de query da BrasilAPI.
|
|
53
|
+
#
|
|
54
|
+
# @api private
|
|
55
|
+
# @param filters [Hash{Symbol=>Object}] filtros recebidos pelo método público
|
|
56
|
+
# @param mapping [Hash{Symbol=>Symbol}] chave da gem para chave da API
|
|
57
|
+
# @return [Hash{Symbol=>Object}]
|
|
58
|
+
def translate(filters, mapping)
|
|
59
|
+
filters.to_h { |key, value| [mapping.fetch(key), value] }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Interpreta a resposta ou converte a falha em erro da gem.
|
|
63
|
+
#
|
|
64
|
+
# @api private
|
|
65
|
+
# @param uri [URI] URL completa
|
|
66
|
+
# @return [Hash, Array, nil]
|
|
67
|
+
# @raise [BrasilAPI::Error]
|
|
68
|
+
# @raise [BrasilAPI::Timeout]
|
|
18
69
|
def request_data(uri)
|
|
19
70
|
response = perform_request(uri)
|
|
20
71
|
return parsed_body(response) if response.is_a?(Net::HTTPSuccess)
|
|
@@ -26,6 +77,12 @@ module BrasilAPI
|
|
|
26
77
|
|
|
27
78
|
private
|
|
28
79
|
|
|
80
|
+
# Monta a URL, omitindo parâmetros +nil+.
|
|
81
|
+
#
|
|
82
|
+
# @api private
|
|
83
|
+
# @param path [String]
|
|
84
|
+
# @param params [Hash]
|
|
85
|
+
# @return [URI]
|
|
29
86
|
def build_uri(path, params)
|
|
30
87
|
uri = URI.parse("#{BASE_URL}#{encode_path(path)}")
|
|
31
88
|
query = params.compact
|
|
@@ -33,16 +90,32 @@ module BrasilAPI
|
|
|
33
90
|
uri
|
|
34
91
|
end
|
|
35
92
|
|
|
93
|
+
# Escapa cada segmento do caminho.
|
|
94
|
+
#
|
|
95
|
+
# @api private
|
|
96
|
+
# @param path [String]
|
|
97
|
+
# @return [String]
|
|
36
98
|
def encode_path(path)
|
|
37
99
|
path.split("/", -1).map { |segment| encode_segment(segment) }.join("/")
|
|
38
100
|
end
|
|
39
101
|
|
|
40
|
-
#
|
|
41
|
-
#
|
|
102
|
+
# Codifica um segmento do caminho.
|
|
103
|
+
#
|
|
104
|
+
# Cada segmento é escapado sozinho para que "?", "#" e espaços permaneçam no path.
|
|
105
|
+
# +URI.encode_uri_component+ mantém espaços como +%20+, igual aos cassettes gravados.
|
|
106
|
+
#
|
|
107
|
+
# @api private
|
|
108
|
+
# @param segment [String]
|
|
109
|
+
# @return [String]
|
|
42
110
|
def encode_segment(segment)
|
|
43
111
|
URI.encode_uri_component(segment)
|
|
44
112
|
end
|
|
45
113
|
|
|
114
|
+
# Abre a conexão e envia o GET.
|
|
115
|
+
#
|
|
116
|
+
# @api private
|
|
117
|
+
# @param uri [URI]
|
|
118
|
+
# @return [Net::HTTPResponse]
|
|
46
119
|
def perform_request(uri)
|
|
47
120
|
Net::HTTP.start(
|
|
48
121
|
uri.hostname,
|
|
@@ -55,6 +128,11 @@ module BrasilAPI
|
|
|
55
128
|
end
|
|
56
129
|
end
|
|
57
130
|
|
|
131
|
+
# Interpreta o corpo de uma resposta de sucesso.
|
|
132
|
+
#
|
|
133
|
+
# @api private
|
|
134
|
+
# @param response [Net::HTTPResponse]
|
|
135
|
+
# @return [Hash, Array, nil]
|
|
58
136
|
def parsed_body(response)
|
|
59
137
|
body = utf8_body(response)
|
|
60
138
|
return if body.nil? || body.empty?
|
|
@@ -62,6 +140,12 @@ module BrasilAPI
|
|
|
62
140
|
JSON.parse(body)
|
|
63
141
|
end
|
|
64
142
|
|
|
143
|
+
# Converte uma resposta de erro na exceção correspondente.
|
|
144
|
+
#
|
|
145
|
+
# @api private
|
|
146
|
+
# @param response [Net::HTTPResponse]
|
|
147
|
+
# @return [void]
|
|
148
|
+
# @raise [BrasilAPI::Error]
|
|
65
149
|
def raise_api_error(response)
|
|
66
150
|
parsed = parse_error_body(response)
|
|
67
151
|
raise error_class_for(response).new(
|
|
@@ -72,6 +156,11 @@ module BrasilAPI
|
|
|
72
156
|
)
|
|
73
157
|
end
|
|
74
158
|
|
|
159
|
+
# Interpreta o corpo de erro, ou +nil+ quando não é JSON.
|
|
160
|
+
#
|
|
161
|
+
# @api private
|
|
162
|
+
# @param response [Net::HTTPResponse]
|
|
163
|
+
# @return [Hash, Array, nil]
|
|
75
164
|
def parse_error_body(response)
|
|
76
165
|
body = utf8_body(response)
|
|
77
166
|
return if body.nil? || body.empty?
|
|
@@ -81,6 +170,11 @@ module BrasilAPI
|
|
|
81
170
|
nil
|
|
82
171
|
end
|
|
83
172
|
|
|
173
|
+
# Lê o corpo forçando UTF-8.
|
|
174
|
+
#
|
|
175
|
+
# @api private
|
|
176
|
+
# @param response [Net::HTTPResponse]
|
|
177
|
+
# @return [String, nil]
|
|
84
178
|
def utf8_body(response)
|
|
85
179
|
body = response.body
|
|
86
180
|
return if body.nil?
|
|
@@ -88,6 +182,12 @@ module BrasilAPI
|
|
|
88
182
|
body.dup.force_encoding(Encoding::UTF_8)
|
|
89
183
|
end
|
|
90
184
|
|
|
185
|
+
# Escolhe a mensagem exposta pela exceção.
|
|
186
|
+
#
|
|
187
|
+
# @api private
|
|
188
|
+
# @param parsed [Hash, Array, nil]
|
|
189
|
+
# @param response [Net::HTTPResponse]
|
|
190
|
+
# @return [String]
|
|
91
191
|
def error_message(parsed, response)
|
|
92
192
|
return parsed["message"] if parsed.is_a?(Hash) && parsed["message"]
|
|
93
193
|
|
|
@@ -97,16 +197,32 @@ module BrasilAPI
|
|
|
97
197
|
"HTTP #{response.code}"
|
|
98
198
|
end
|
|
99
199
|
|
|
200
|
+
# Escolhe o corpo exposto pela exceção.
|
|
201
|
+
#
|
|
202
|
+
# @api private
|
|
203
|
+
# @param parsed [Hash, Array, nil]
|
|
204
|
+
# @param response [Net::HTTPResponse]
|
|
205
|
+
# @return [Hash, Array, String, nil]
|
|
100
206
|
def error_body(parsed, response)
|
|
101
207
|
return parsed unless parsed.nil?
|
|
102
208
|
|
|
103
209
|
utf8_body(response)
|
|
104
210
|
end
|
|
105
211
|
|
|
212
|
+
# Lê o campo +type+ quando o corpo é um objeto.
|
|
213
|
+
#
|
|
214
|
+
# @api private
|
|
215
|
+
# @param parsed [Hash, Array, nil]
|
|
216
|
+
# @return [String, nil]
|
|
106
217
|
def error_type(parsed)
|
|
107
218
|
parsed["type"] if parsed.is_a?(Hash)
|
|
108
219
|
end
|
|
109
220
|
|
|
221
|
+
# Associa o código HTTP à classe de erro.
|
|
222
|
+
#
|
|
223
|
+
# @api private
|
|
224
|
+
# @param response [Net::HTTPResponse]
|
|
225
|
+
# @return [Class]
|
|
110
226
|
def error_class_for(response)
|
|
111
227
|
case response.code.to_i
|
|
112
228
|
when 400
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
8
|
+
module BrasilAPI
|
|
9
|
+
# Dias úteis entre duas datas.
|
|
10
|
+
#
|
|
11
|
+
# @see https://brasilapi.com.br/docs#tag/DIAS-UTEIS
|
|
12
|
+
class BusinessDays < Base
|
|
13
|
+
class << self
|
|
14
|
+
# Conta os dias úteis de um intervalo, inclusive as extremidades.
|
|
15
|
+
#
|
|
16
|
+
# +include_national_holidays+ vira +incluirFeriadosNacionais+.
|
|
17
|
+
# +nil+ omite o parâmetro (a API exclui feriados nacionais).
|
|
18
|
+
# +false+ é enviado e faz o intervalo tratar feriados como dias úteis.
|
|
19
|
+
#
|
|
20
|
+
# @param start_date [Date, Time, DateTime, String] data inicial
|
|
21
|
+
# @param end_date [Date, Time, DateTime, String] data final
|
|
22
|
+
# @param include_national_holidays [Boolean, nil] trata feriados como dias úteis quando +false+
|
|
23
|
+
# @return [Hash] quantidade de dias úteis e a lista de datas
|
|
24
|
+
# @raise [BrasilAPI::BadRequest] quando o intervalo é inválido
|
|
25
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
26
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
27
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
28
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
29
|
+
# @example Primeira quinzena de janeiro de 2024, sem o feriado do dia 1º
|
|
30
|
+
# BrasilAPI::BusinessDays.between("2024-01-01", "2024-01-10")
|
|
31
|
+
# @see https://brasilapi.com.br/docs#tag/DIAS-UTEIS
|
|
32
|
+
def between(start_date, end_date, include_national_holidays: nil)
|
|
33
|
+
get(
|
|
34
|
+
"/diasuteis/v1",
|
|
35
|
+
{
|
|
36
|
+
dataInicial: format_date(start_date),
|
|
37
|
+
dataFinal: format_date(end_date),
|
|
38
|
+
incluirFeriadosNacionais: include_national_holidays
|
|
39
|
+
}
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
8
|
+
module BrasilAPI
|
|
9
|
+
# Cotações de moedas em relação ao real.
|
|
10
|
+
#
|
|
11
|
+
# @see https://brasilapi.com.br/docs#tag/CAMBIO
|
|
12
|
+
class Cambio < Base
|
|
13
|
+
class << self
|
|
14
|
+
# Lista as moedas com cotação disponível.
|
|
15
|
+
#
|
|
16
|
+
# @return [Array<Hash>] símbolo e nome de cada moeda
|
|
17
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
18
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
19
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
20
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
21
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
22
|
+
# @example
|
|
23
|
+
# BrasilAPI::Cambio.currencies
|
|
24
|
+
# @see https://brasilapi.com.br/docs#tag/CAMBIO
|
|
25
|
+
def currencies
|
|
26
|
+
get("/cambio/v1/moedas")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Consulta a cotação PTAX de uma moeda em uma data.
|
|
30
|
+
#
|
|
31
|
+
# @param currency [String] código ISO, por exemplo +"USD"+
|
|
32
|
+
# @param date [Date, Time, DateTime, String] data da cotação
|
|
33
|
+
# @return [Hash] compra, venda e data da cotação
|
|
34
|
+
# @raise [BrasilAPI::BadRequest] quando a moeda ou a data é inválida
|
|
35
|
+
# @raise [BrasilAPI::NotFound] quando não há cotação na data
|
|
36
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
37
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
38
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
39
|
+
# @example Dólar em 15 de janeiro de 2024
|
|
40
|
+
# BrasilAPI::Cambio.quote("USD", "2024-01-15")
|
|
41
|
+
# @see https://brasilapi.com.br/docs#tag/CAMBIO
|
|
42
|
+
def quote(currency, date)
|
|
43
|
+
get("/cambio/v1/cotacao/#{currency}/#{format_date(date)}")
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
8
|
+
module BrasilAPI
|
|
9
|
+
# Classificação Internacional de Doenças, 10ª revisão.
|
|
10
|
+
#
|
|
11
|
+
# @see https://brasilapi.com.br/docs#tag/CID10
|
|
12
|
+
class CID10 < Base
|
|
13
|
+
class << self
|
|
14
|
+
# Lista os capítulos, grupos e categorias do CID-10.
|
|
15
|
+
#
|
|
16
|
+
# @return [Array<Hash>] código e descrição de cada item
|
|
17
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
18
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
19
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
20
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
21
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
22
|
+
# @example
|
|
23
|
+
# BrasilAPI::CID10.all
|
|
24
|
+
# @see https://brasilapi.com.br/docs#tag/CID10
|
|
25
|
+
def all
|
|
26
|
+
get("/oms/cid10/v1")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Busca uma categoria do CID-10 pelo código.
|
|
30
|
+
#
|
|
31
|
+
# @param code [String] código CID, por exemplo +"A00"+
|
|
32
|
+
# @return [Hash] descrição da categoria
|
|
33
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
34
|
+
# @raise [BrasilAPI::NotFound] quando o código não existe
|
|
35
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
36
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
37
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
38
|
+
# @example Cólera
|
|
39
|
+
# BrasilAPI::CID10.find_by_code("A00")
|
|
40
|
+
# @see https://brasilapi.com.br/docs#tag/CID10
|
|
41
|
+
def find_by_code(code)
|
|
42
|
+
get("/oms/cid10/v1/#{code}")
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
data/lib/brasil_api/company.rb
CHANGED
|
@@ -1,8 +1,28 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
3
8
|
module BrasilAPI
|
|
9
|
+
# Cadastro de pessoa jurídica na Receita Federal.
|
|
10
|
+
#
|
|
11
|
+
# @see https://brasilapi.com.br/docs#tag/CNPJ
|
|
4
12
|
class Company < Base
|
|
5
13
|
class << self
|
|
14
|
+
# Busca uma empresa pelo CNPJ.
|
|
15
|
+
#
|
|
16
|
+
# @param documentation [String] CNPJ, com ou sem máscara
|
|
17
|
+
# @return [Hash] razão social, situação cadastral e endereço
|
|
18
|
+
# @raise [BrasilAPI::BadRequest] quando o CNPJ é inválido
|
|
19
|
+
# @raise [BrasilAPI::NotFound] quando o CNPJ não existe
|
|
20
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
21
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
22
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
23
|
+
# @example
|
|
24
|
+
# BrasilAPI::Company.find_by_cnpj("19131243000197")
|
|
25
|
+
# @see https://brasilapi.com.br/docs#tag/CNPJ
|
|
6
26
|
def find_by_cnpj(documentation)
|
|
7
27
|
get("/cnpj/v1/#{documentation}")
|
|
8
28
|
end
|
|
@@ -1,25 +1,50 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
3
8
|
module BrasilAPI
|
|
9
|
+
# Tempo limite das requisições HTTP.
|
|
4
10
|
class Configuration
|
|
11
|
+
# Tempo limite padrão, em segundos.
|
|
5
12
|
DEFAULT_TIMEOUT = 10
|
|
6
13
|
|
|
14
|
+
# Tempo limite de abertura e de leitura, em segundos.
|
|
15
|
+
#
|
|
16
|
+
# @return [Numeric]
|
|
7
17
|
attr_accessor :timeout
|
|
8
18
|
|
|
19
|
+
# Aplica {DEFAULT_TIMEOUT}.
|
|
9
20
|
def initialize
|
|
10
21
|
@timeout = DEFAULT_TIMEOUT
|
|
11
22
|
end
|
|
12
23
|
end
|
|
13
24
|
|
|
14
25
|
class << self
|
|
26
|
+
# Altera a configuração do cliente.
|
|
27
|
+
#
|
|
28
|
+
# @yieldparam config [BrasilAPI::Configuration] configuração atual
|
|
29
|
+
# @return [void]
|
|
30
|
+
# @example Trinta segundos de timeout
|
|
31
|
+
# BrasilAPI.configure { |config| config.timeout = 30 }
|
|
15
32
|
def configure
|
|
16
33
|
yield config
|
|
17
34
|
end
|
|
18
35
|
|
|
36
|
+
# Configuração usada pelas requisições.
|
|
37
|
+
#
|
|
38
|
+
# @return [BrasilAPI::Configuration]
|
|
19
39
|
def config
|
|
20
40
|
@config ||= Configuration.new
|
|
21
41
|
end
|
|
22
42
|
|
|
43
|
+
# Volta o tempo limite para o padrão.
|
|
44
|
+
#
|
|
45
|
+
# @return [BrasilAPI::Configuration]
|
|
46
|
+
# @example
|
|
47
|
+
# BrasilAPI.reset_config!
|
|
23
48
|
def reset_config!
|
|
24
49
|
@config = Configuration.new
|
|
25
50
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
8
|
+
module BrasilAPI
|
|
9
|
+
# Validação de CPF.
|
|
10
|
+
#
|
|
11
|
+
# A resposta não traz nome nem dados pessoais: apenas se o número é válido
|
|
12
|
+
# e a região fiscal associada.
|
|
13
|
+
#
|
|
14
|
+
# @see https://brasilapi.com.br/docs#tag/CPF
|
|
15
|
+
class CPF < Base
|
|
16
|
+
class << self
|
|
17
|
+
# Verifica se um CPF tem dígitos válidos.
|
|
18
|
+
#
|
|
19
|
+
# A BrasilAPI descarta pontuação antes de validar.
|
|
20
|
+
#
|
|
21
|
+
# @param cpf [String] CPF, com ou sem máscara
|
|
22
|
+
# @return [Hash] +isValid+, região fiscal (+rf+) e UFs (+ufs+)
|
|
23
|
+
# @raise [BrasilAPI::BadRequest] quando o valor não tem 11 dígitos
|
|
24
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
25
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
26
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
27
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
28
|
+
# @example CPF com máscara
|
|
29
|
+
# BrasilAPI::CPF.find("000.000.000-00")
|
|
30
|
+
# @see https://brasilapi.com.br/docs#tag/CPF
|
|
31
|
+
def find(cpf)
|
|
32
|
+
get("/cpf/v1/#{cpf}")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
data/lib/brasil_api/cptec.rb
CHANGED
|
@@ -1,24 +1,93 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# Cliente Ruby da {https://brasilapi.com.br BrasilAPI}.
|
|
4
|
+
#
|
|
5
|
+
# @example Bancos participantes do STR
|
|
6
|
+
# BrasilAPI::Bank.all
|
|
7
|
+
# @see https://brasilapi.com.br/docs
|
|
3
8
|
module BrasilAPI
|
|
9
|
+
# Previsão do tempo e de ondas do CPTEC/INPE.
|
|
10
|
+
#
|
|
11
|
+
# @see https://brasilapi.com.br/docs#tag/CPTEC
|
|
4
12
|
class CPTEC < Base
|
|
5
13
|
class << self
|
|
14
|
+
# Lista as cidades atendidas pelo CPTEC.
|
|
15
|
+
#
|
|
16
|
+
# @return [Array<Hash>] nome e código de cada cidade
|
|
17
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
18
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
19
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
20
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
21
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
22
|
+
# @example
|
|
23
|
+
# BrasilAPI::CPTEC.all
|
|
24
|
+
# @see https://brasilapi.com.br/docs#tag/CPTEC
|
|
6
25
|
def all
|
|
7
26
|
get("/cptec/v1/cidade")
|
|
8
27
|
end
|
|
9
28
|
|
|
29
|
+
# Procura cidades pelo nome.
|
|
30
|
+
#
|
|
31
|
+
# @param city_name [String] parte do nome da cidade
|
|
32
|
+
# @return [Array<Hash>] cidades encontradas e seus códigos
|
|
33
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
34
|
+
# @raise [BrasilAPI::NotFound] quando nenhuma cidade corresponde
|
|
35
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
36
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
37
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
38
|
+
# @example
|
|
39
|
+
# BrasilAPI::CPTEC.search_location("Teresina")
|
|
40
|
+
# @see https://brasilapi.com.br/docs#tag/CPTEC
|
|
10
41
|
def search_location(city_name)
|
|
11
42
|
get("/cptec/v1/cidade/#{city_name}")
|
|
12
43
|
end
|
|
13
44
|
|
|
45
|
+
# Previsão do tempo nas capitais.
|
|
46
|
+
#
|
|
47
|
+
# @return [Array<Hash>] condição atual de cada capital
|
|
48
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
49
|
+
# @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
|
|
50
|
+
# @raise [BrasilAPI::ServerError] quando a fonte do CPTEC está indisponível
|
|
51
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
52
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
53
|
+
# @example
|
|
54
|
+
# BrasilAPI::CPTEC.capital_weather
|
|
55
|
+
# @see https://brasilapi.com.br/docs#tag/CPTEC
|
|
14
56
|
def capital_weather
|
|
15
57
|
get("/cptec/v1/clima/capital")
|
|
16
58
|
end
|
|
17
59
|
|
|
60
|
+
# Condição meteorológica de um aeroporto.
|
|
61
|
+
#
|
|
62
|
+
# @param code [String] código ICAO, por exemplo +"SBGR"+
|
|
63
|
+
# @return [Hash] condição do aeroporto
|
|
64
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
65
|
+
# @raise [BrasilAPI::NotFound] quando o código ICAO não existe
|
|
66
|
+
# @raise [BrasilAPI::ServerError] quando a fonte do CPTEC está indisponível
|
|
67
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
68
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
69
|
+
# @example Aeroporto de Guarulhos
|
|
70
|
+
# BrasilAPI::CPTEC.airport_weather("SBGR")
|
|
71
|
+
# @see https://brasilapi.com.br/docs#tag/CPTEC
|
|
18
72
|
def airport_weather(code)
|
|
19
73
|
get("/cptec/v1/clima/aeroporto/#{code}")
|
|
20
74
|
end
|
|
21
75
|
|
|
76
|
+
# Previsão do tempo de uma cidade do CPTEC.
|
|
77
|
+
#
|
|
78
|
+
# Sem +days+, a previsão é de um dia. A BrasilAPI aceita até 6 dias.
|
|
79
|
+
#
|
|
80
|
+
# @param city_code [String, Integer] código da cidade no CPTEC
|
|
81
|
+
# @param days [Integer, nil] quantidade de dias, de 1 a 6
|
|
82
|
+
# @return [Hash] previsão da cidade
|
|
83
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
84
|
+
# @raise [BrasilAPI::NotFound] quando a cidade não existe
|
|
85
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
86
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
87
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
88
|
+
# @example Previsão de três dias
|
|
89
|
+
# BrasilAPI::CPTEC.city_weather(244, 3)
|
|
90
|
+
# @see https://brasilapi.com.br/docs#tag/CPTEC
|
|
22
91
|
def city_weather(city_code, days = nil)
|
|
23
92
|
if days
|
|
24
93
|
get("/cptec/v1/clima/previsao/#{city_code}/#{days}")
|
|
@@ -27,6 +96,21 @@ module BrasilAPI
|
|
|
27
96
|
end
|
|
28
97
|
end
|
|
29
98
|
|
|
99
|
+
# Previsão de ondas no litoral de uma cidade.
|
|
100
|
+
#
|
|
101
|
+
# Sem +days+, a previsão é de um dia. A BrasilAPI aceita até 6 dias.
|
|
102
|
+
#
|
|
103
|
+
# @param city_code [String, Integer] código da cidade no CPTEC
|
|
104
|
+
# @param days [Integer, nil] quantidade de dias, de 1 a 6
|
|
105
|
+
# @return [Hash] previsão de ondas
|
|
106
|
+
# @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
|
|
107
|
+
# @raise [BrasilAPI::NotFound] quando a cidade não tem previsão de ondas
|
|
108
|
+
# @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
|
|
109
|
+
# @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
|
|
110
|
+
# @raise [BrasilAPI::Error] em outras respostas de erro
|
|
111
|
+
# @example
|
|
112
|
+
# BrasilAPI::CPTEC.ocean_forecast(241, 2)
|
|
113
|
+
# @see https://brasilapi.com.br/docs#tag/CPTEC
|
|
30
114
|
def ocean_forecast(city_code, days = nil)
|
|
31
115
|
if days
|
|
32
116
|
get("/cptec/v1/ondas/#{city_code}/#{days}")
|