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.
@@ -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
@@ -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
- # Encode each segment on its own so "?", "#" and spaces stay inside the path.
41
- # encode_uri_component keeps spaces as %20, matching the recorded cassettes.
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
@@ -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
@@ -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}")