brasilapi 0.7.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.
data/README.md CHANGED
@@ -3,157 +3,393 @@
3
3
 
4
4
  </div>
5
5
 
6
- Dependency-less Brasil API lookup gem for brazilian data with an easy-to-use API.
7
-
8
- ## Features
9
- - [x] **Bank**
10
- - [x] **CEP (Zip code)**
11
- - [x] **CNPJ**
12
- - [x] **Corretoras**
13
- - [x] **CPTEC**
14
- - [x] **DDD**
15
- - [x] **Feriados Nacionais**
16
- - [x] **FIPE**
17
- - [x] **IBGE**
18
- - [x] **ISBN**
19
- - [x] **NCM**
20
- - [x] **PIX**
21
- - [x] **Registros BR**
22
- - [x] **Taxas**
23
-
24
- ## Installation
25
-
26
- Install the gem and add to the application's Gemfile by executing:
6
+ Gem em Ruby, sem dependências de runtime, para consultar a [BrasilAPI](https://brasilapi.com.br).
7
+
8
+ ## Funcionalidades
9
+
10
+ - [x] **Bancos**
11
+ - [x] **CEP** (v1 e v2)
12
+ - [x] **CNPJ**
13
+ - [x] **CPF**
14
+ - [x] **Corretoras da CVM** e **fundos**
15
+ - [x] **CPTEC** (cidades, clima e ondas)
16
+ - [x] **DDD** (lista, v1, v2 e por UF)
17
+ - [x] **Feriados** nacionais e estaduais
18
+ - [x] **FIPE**
19
+ - [x] **IBGE** (UFs, municípios, regiões e CNAE)
20
+ - [x] **ISBN**
21
+ - [x] **NCM**
22
+ - [x] **PIX**
23
+ - [x] **Registro.br**
24
+ - [x] **Taxas**
25
+ - [x] **Câmbio**
26
+ - [x] **Dias úteis**
27
+ - [x] **Geolocalização**
28
+ - [x] **Hospitais**
29
+ - [x] **IBPT**
30
+ - [x] **IGP-M**
31
+ - [x] **CID-10**
32
+ - [x] **Incidência solar**
33
+ - [x] **Status**
34
+ - [x] **Tickers da B3**
35
+ - [x] **TUSS**
36
+
37
+ CEP v3, previsão semanal do CPTEC por coordenadas, eleições e universidades ficam de fora enquanto a BrasilAPI não responder com sucesso nessas rotas.
38
+
39
+ ## Instalação
40
+
41
+ Adicione a gem ao Gemfile da aplicação:
27
42
 
28
43
  $ bundle add brasilapi
29
44
 
30
- If bundler is not being used to manage dependencies, install the gem by executing:
45
+ Sem Bundler:
31
46
 
32
47
  $ gem install brasilapi
33
48
 
34
- ## Usage
49
+ ## Documentação
50
+
51
+ A referência da gem, gerada com YARD, fica em [rubydoc.info/gems/brasilapi](https://rubydoc.info/gems/brasilapi) depois da publicação.
52
+
53
+ Para navegar nela na máquina local:
54
+
55
+ $ bundle exec yard server
56
+
57
+ O servidor sobe em [http://localhost:8808](http://localhost:8808). O Ruby 3.3 não inclui mais o Webrick, então ele entra como dependência de desenvolvimento. `bundle exec rake yard` só gera os arquivos em `doc/`.
58
+
59
+ ## Configuração
60
+
61
+ O tempo limite padrão é de 10 segundos (`open_timeout` e `read_timeout`):
35
62
 
36
63
  ```ruby
37
- require 'brasilapi'
64
+ BrasilAPI.configure do |config|
65
+ config.timeout = 30
66
+ end
67
+ ```
68
+
69
+ `Net::OpenTimeout` e `Net::ReadTimeout` sobem como `BrasilAPI::Timeout`. Falhas HTTP são `BrasilAPI::Error` (ou uma subclasse: `NotFound`, `BadRequest` e `ServerError`) e expõem `status`, `message`, `type` e `body`.
38
70
 
39
- # get all banks
71
+ ```ruby
72
+ begin
73
+ BrasilAPI::Bank.find_by_code(0)
74
+ rescue BrasilAPI::NotFound => e
75
+ e.status # 404
76
+ e.message
77
+ e.type
78
+ rescue BrasilAPI::Error => e
79
+ e.status
80
+ end
81
+ ```
82
+
83
+ ## Uso
84
+
85
+ ```ruby
86
+ require "brasilapi"
87
+ ```
88
+
89
+ ### Bancos
90
+
91
+ ```ruby
92
+ # lista os bancos
40
93
  BrasilAPI::Bank.all
41
- =>
42
- [{"ispb"=>"00000000", "name"=>"BCO DO BRASIL S.A.", "code"=>1, "fullName"=>"Banco do Brasil S.A."},
43
- {"ispb"=>"00000208", "name"=>"BRB - BCO DE BRASILIA S.A.", "code"=>70, "fullName"=>"BRB - BANCO DE BRASILIA S.A."},
44
- ...]
45
94
 
46
- # find bank by code
95
+ # busca um banco pelo código
47
96
  BrasilAPI::Bank.find_by_code(77)
48
- => {"ispb"=>"00416968", "name"=>"BANCO INTER", "code"=>77, "fullName"=>"Banco Inter S.A."}
97
+ ```
98
+
99
+ ### CNPJ
49
100
 
50
- # find company by cnpj
101
+ ```ruby
102
+ # busca uma empresa pelo CNPJ
51
103
  BrasilAPI::Company.find_by_cnpj("60316817000103")
52
- =>
53
- {"uf"=>"SP",
54
- "cep"=>"04543907",
55
- "qsa"=>
56
- [{"pais"=>"ESTADOS UNIDOS",
57
- ...}
58
-
59
- # find address by zip code
60
- BrasilAPI::Address.find_by_zip_code('64001100')
61
- => {"cep"=>"64001100", "state"=>"PI", "city"=>"Teresina", "neighborhood"=>"Centro", "street"=>"Praça Pedro II", "service"=>"correios"}
62
-
63
- # find address with location by zip code
64
- BrasilAPI::Address.find_by_zip_code('80060000', location: true)
65
- =>
66
- {"cep"=>"80060000",
67
- "state"=>"PR",
68
- ...
69
- "location"=>{"type"=>"Point", "coordinates"=>{"longitude"=>"-49.2614791", "latitude"=>"-25.427253"}}}
70
-
71
- # get state and cities by area code
72
- BrasilAPI::Address.state_and_cities_by_area_code('89')
73
- =>
74
- {"state"=>"PI",
75
- "cities"=>
76
- ["MASSÂPE DO PIAUÍ",
77
- ...,
78
- "ACAUÃ"
79
- ]}
80
-
81
- # get all CVM brokers
104
+ ```
105
+
106
+ ### CPF
107
+
108
+ A rota devolve só validade e região fiscal, sem nome. O CPF pode ir com ou sem pontuação.
109
+
110
+ ```ruby
111
+ BrasilAPI::CPF.find("000.000.000-00")
112
+ # => {"isValid"=>false}
113
+ ```
114
+
115
+ ### CEP
116
+
117
+ `location: true` continua sendo o atalho da v2.
118
+
119
+ ```ruby
120
+ # CEP na v1
121
+ BrasilAPI::Address.find_by_zip_code("64001100")
122
+
123
+ # CEP na v2, com coordenadas
124
+ BrasilAPI::Address.find_by_zip_code("80060000", location: true)
125
+ ```
126
+
127
+ ### DDD
128
+
129
+ `Address.state_and_cities_by_area_code` permanece como atalho da v1.
130
+
131
+ ```ruby
132
+ # cada estado e seus DDDs
133
+ BrasilAPI::DDD.all
134
+
135
+ # v2: lista de estados e cidades (DDDs que cobrem mais de um estado)
136
+ BrasilAPI::DDD.find("11")
137
+
138
+ # v1: um estado e as cidades
139
+ BrasilAPI::DDD.find("86", version: 1)
140
+ BrasilAPI::Address.state_and_cities_by_area_code("86")
141
+
142
+ # DDDs de uma UF
143
+ BrasilAPI::DDD.by_state("SP")
144
+ ```
145
+
146
+ ### CVM
147
+
148
+ ```ruby
149
+ # corretoras; uf só é enviado quando state é informado
82
150
  BrasilAPI::CVM.all
83
- =>
84
- [{"cnpj"=>"76621457000185",
85
- "type"=>"CORRETORAS",
86
- ...]
87
-
88
- # find bank by code
89
- BrasilAPI::CVM.find_by_cnpj('74014747000135')
90
- =>
91
- {"cnpj"=>"74014747000135",
92
- "type"=>"CORRETORAS",
93
- ...}
94
-
95
- # get brazilian national holidays by year
151
+ BrasilAPI::CVM.all(state: "SP")
152
+
153
+ # busca a corretora da CVM pelo CNPJ
154
+ BrasilAPI::CVM.find_by_cnpj("74014747000135")
155
+
156
+ # fundos de investimento
157
+ BrasilAPI::CVM::Fund.all(page: 1, size: 1)
158
+ BrasilAPI::CVM::Fund.find_by_cnpj("00.000.684/0001-21")
159
+ ```
160
+
161
+ ### Feriados
162
+
163
+ ```ruby
164
+ # feriados nacionais; uf não é enviado
96
165
  BrasilAPI::Holiday.by_year(2024)
97
- =>
98
- [{"date"=>"2024-01-01", "name"=>"Confraternização mundial", "type"=>"national"},
99
- ...
100
- {"date"=>"2024-12-25", "name"=>"Natal", "type"=>"national"}]
101
166
 
102
- # get states from ibge
167
+ # inclui os feriados estaduais
168
+ BrasilAPI::Holiday.by_year(2024, state: "SP")
169
+ ```
170
+
171
+ ### IBGE
172
+
173
+ Providers aceitos em `cities_by_state`: os mesmos da BrasilAPI, por exemplo `dados-abertos-br`, `gov` e `wikipedia`.
174
+
175
+ ```ruby
103
176
  BrasilAPI::IBGE.states
104
- =>
105
- [{"id"=>11,
106
- "sigla"=>"RO"
107
- "nome"=>"Rondônia",
108
- "regiao"=>{"id"=>1, "sigla"=>"N", "nome"=>"Norte"}},
109
- ...
110
- {"id"=>53,
111
- "sigla"=>"DF",
112
- "nome"=>"Distrito Federal",
113
- "regiao"=>{"id"=>5, "sigla"=>"CO", "nome"=>"Centro-Oeste"}}]
114
-
115
- # find state by abbreviation from ibge
116
- BrasilAPI::IBGE.find_state_by_code('PI')
117
- =>
118
- {"id"=>22,
119
- "sigla"=>"PI",
120
- "nome"=>"Piauí",
121
- "regiao"=>{"id"=>2, "sigla"=>"NE", "nome"=>"Nordeste"}}
122
-
123
- # find state by code from ibge
177
+ BrasilAPI::IBGE.find_state_by_code("PI")
124
178
  BrasilAPI::IBGE.find_state_by_code(53)
125
- =>
126
- {"id"=>53,
127
- "sigla"=>"DF",
128
- "nome"=>"Distrito Federal",
129
- "regiao"=>{"id"=>5, "sigla"=>"CO", "nome"=>"Centro-Oeste"}}
179
+ BrasilAPI::IBGE.cities_by_state("CE")
180
+ BrasilAPI::IBGE.cities_by_state("PI", providers: ["gov"])
181
+
182
+ BrasilAPI::IBGE.regions
183
+ BrasilAPI::IBGE.find_region_by_code(1)
184
+ BrasilAPI::IBGE.states_by_region(1)
185
+ ```
186
+
187
+ ### CNAE
188
+
189
+ ```ruby
190
+ BrasilAPI::IBGE::CNAE.classes
191
+ BrasilAPI::IBGE::CNAE.find_class("01113")
192
+ BrasilAPI::IBGE::CNAE.find_division("01")
193
+ BrasilAPI::IBGE::CNAE.find_group("011")
194
+ ```
195
+
196
+ ### CPTEC
197
+
198
+ `city_weather` e `ocean_forecast` aceitam até 6 dias com precisão garantida pela BrasilAPI.
199
+
200
+ ```ruby
201
+ BrasilAPI::CPTEC.all
202
+ BrasilAPI::CPTEC.search_location("São Francisco")
203
+ BrasilAPI::CPTEC.capital_weather
204
+ BrasilAPI::CPTEC.airport_weather("SBGR")
205
+ BrasilAPI::CPTEC.city_weather(4801)
206
+ BrasilAPI::CPTEC.city_weather(4801, 6)
207
+ BrasilAPI::CPTEC.ocean_forecast(4701)
208
+ BrasilAPI::CPTEC.ocean_forecast(4701, 6)
209
+ ```
210
+
211
+ ### FIPE
212
+
213
+ `reference_table` é opcional. Quando fica `nil`, a gem não envia `tabela_referencia`. Sem `vehicle_type`, `vehicle_brands` lista as marcas de todos os tipos.
214
+
215
+ ```ruby
216
+ BrasilAPI::FIPE.vehicle_brands
217
+ BrasilAPI::FIPE.vehicle_brands("carros")
218
+ BrasilAPI::FIPE.vehicle_brands("carros", 290)
219
+ BrasilAPI::FIPE.list_vehicles("carros", 59)
220
+ BrasilAPI::FIPE.vehicle_years("carros", 59, 5585)
221
+ BrasilAPI::FIPE.vehicle_details("carros", 59, 5585, "2013-3")
222
+ BrasilAPI::FIPE.vehicle_price("005329-5")
223
+ BrasilAPI::FIPE.fipe_tables
224
+ ```
225
+
226
+ ### ISBN
227
+
228
+ Providers aceitos: `cbl`, `mercado-editorial`, `open-library` e `google-books`.
229
+
230
+ ```ruby
231
+ BrasilAPI::ISBN.search("9788545702870")
232
+ BrasilAPI::ISBN.search("9788545702870", providers: ["open-library"])
233
+ ```
234
+
235
+ ### NCM
236
+
237
+ ```ruby
238
+ BrasilAPI::NCM.all
239
+ BrasilAPI::NCM.search("cafe")
240
+ BrasilAPI::NCM.find_by_code("01012100")
241
+ ```
242
+
243
+ ### PIX
130
244
 
131
- # get cities by state abbreviation from ibge
132
- BrasilAPI::IBGE.cities_by_state('CE')
133
- =>
134
- [{"nome"=>"ABAIARA", "codigo_ibge"=>"2300101"},
135
- ...
136
- {"nome"=>"VÁRZEA ALEGRE", "codigo_ibge"=>"2314003"},
137
- {"nome"=>"VIÇOSA DO CEARÁ", "codigo_ibge"=>"2314102"}]
245
+ ```ruby
246
+ BrasilAPI::PIX.all
138
247
  ```
139
248
 
249
+ ### Registro.br
250
+
251
+ ```ruby
252
+ BrasilAPI::RegistroBR.whois("google.com.br")
253
+ ```
254
+
255
+ ### Taxas
256
+
257
+ ```ruby
258
+ BrasilAPI::Taxas.all
259
+ BrasilAPI::Taxas.find_by_name("selic")
260
+ ```
261
+
262
+ ### Câmbio
263
+
264
+ `quote` aceita `Date` ou `String` no formato `YYYY-MM-DD`.
265
+
266
+ ```ruby
267
+ BrasilAPI::Cambio.currencies
268
+ BrasilAPI::Cambio.quote("USD", Date.new(2024, 1, 15))
269
+ ```
270
+
271
+ ### Dias úteis
272
+
273
+ `between` aceita `Date` ou `String`. `include_national_holidays: false` faz o dia útil incluir feriados nacionais. Sem o argumento, a BrasilAPI exclui esses feriados.
274
+
275
+ ```ruby
276
+ BrasilAPI::BusinessDays.between("2024-01-01", "2024-01-10")
277
+ BrasilAPI::BusinessDays.between(Date.new(2024, 1, 1), Date.new(2024, 1, 10), include_national_holidays: false)
278
+ ```
279
+
280
+ ### Geolocalização
281
+
282
+ ```ruby
283
+ BrasilAPI::Geolocation.reverse(-23.55, -46.63)
284
+ BrasilAPI::Geolocation.reverse(-23.55, -46.63, language: "en")
285
+ ```
286
+
287
+ ### Hospitais
288
+
289
+ Filtros de `all`: `vertical`, `state`, `city`, `service`, `query`, `limit`, `offset`.
290
+
291
+ `nearby` aceita `zip_code`, ou `latitude` e `longitude`, ou `city` e `state`, além de `radius`, `vertical`, `service`, `limit` e `offset`.
292
+
293
+ ```ruby
294
+ BrasilAPI::Hospital.all(state: "PI", limit: 1)
295
+ BrasilAPI::Hospital.nearby(zip_code: "64001100", limit: 1)
296
+ BrasilAPI::Hospital.nearby(latitude: -5.09, longitude: -42.8, radius: 10, limit: 1)
297
+ BrasilAPI::Hospital.options
298
+ BrasilAPI::Hospital.ciatox(state: "SP")
299
+ BrasilAPI::Hospital.find_by_cnes("2726998")
300
+ BrasilAPI::Hospital.states
301
+ ```
302
+
303
+ ### IBPT
304
+
305
+ `exception` corresponde ao query param `ex`. Sem `code`, a chamada devolve a tabela inteira da UF.
306
+
307
+ ```ruby
308
+ BrasilAPI::IBPT.version
309
+ BrasilAPI::IBPT.ncm("SP")
310
+ BrasilAPI::IBPT.ncm("SP", "01012100")
311
+ BrasilAPI::IBPT.ncm("PI", "02109100", exception: "01")
312
+ BrasilAPI::IBPT.nbs("SP", "101011000")
313
+ BrasilAPI::IBPT.lc116("SP", "0101")
314
+ ```
315
+
316
+ ### IGP-M
317
+
318
+ `between` aceita `Date` ou `String`.
319
+
320
+ ```ruby
321
+ BrasilAPI::IGPM.all
322
+ BrasilAPI::IGPM.last(2)
323
+ BrasilAPI::IGPM.between("2024-01-01", "2024-02-01")
324
+ ```
325
+
326
+ ### CID-10
327
+
328
+ ```ruby
329
+ BrasilAPI::CID10.all
330
+ BrasilAPI::CID10.find_by_code("A00")
331
+ ```
332
+
333
+ ### Incidência solar
334
+
335
+ A rota usada é `GET /solar/v1?location=...`.
336
+
337
+ ```ruby
338
+ BrasilAPI::Solar.incidence("Teresina")
339
+ ```
340
+
341
+ ### Status
342
+
343
+ ```ruby
344
+ BrasilAPI::Status.check
345
+ ```
346
+
347
+ ### B3
348
+
349
+ Tipos de fundo aceitos: `FII`, `SETORIAL`, `FIAGRO-FII`, `FIAGRO-FIDC`, `FIAGRO-FIP`, `FIP` e `FIA`.
350
+
351
+ ```ruby
352
+ BrasilAPI::B3.stocks
353
+ BrasilAPI::B3.funds("SETORIAL")
354
+ ```
355
+
356
+ ### TUSS
357
+
358
+ `all` aceita `name`, `code`, `limit` e `offset`. `search` também aceita `query`, `match`, `sort`, `order` e `fields`. `autocomplete` aceita `query`, `name`, `code` e `limit`.
359
+
360
+ ```ruby
361
+ BrasilAPI::TUSS.all(limit: 1)
362
+ BrasilAPI::TUSS.find_by_code("10101012")
363
+ BrasilAPI::TUSS.search(query: "consulta", limit: 1)
364
+ BrasilAPI::TUSS.autocomplete(query: "cons", limit: 2)
365
+ ```
366
+
367
+ ## Publicação
368
+
369
+ A publicação no RubyGems acontece quando um pull request que altera a versão entra na `main`:
370
+
371
+ 1. Atualize `BrasilAPI::VERSION` em `lib/brasil_api/version.rb`.
372
+ 2. Mova a seção `[Unreleased]` do `CHANGELOG.md` para essa versão, com a data.
373
+ 3. Abra um pull request e faça o merge na `main`.
374
+
375
+ `.github/workflows/release.yml` roda a suíte (testes com cobertura e RuboCop), cria a tag `vX.Y.Z`, publica um GitHub Release com as notas daquela versão e envia a gem com Trusted Publishing do RubyGems (OIDC). Se a versão já tiver a tag `vX.Y.Z`, o workflow não faz nada.
376
+
377
+ Antes da primeira publicação automática, registre um trusted publisher no rubygems.org para `dayvidemerson/brasilapi-rb` e o arquivo `release.yml`, sem environment do GitHub. O gemspec mantém `rubygems_mfa_required`.
140
378
 
141
- # License
142
- [MIT](./LICENSE)
379
+ ## Contribuindo
143
380
 
144
- ## Contributing
381
+ Relatos de bugs e pull requests são bem-vindos em https://github.com/dayvidemerson/brasilapi-rb. Este projeto deve ser um espaço seguro e acolhedor, e quem contribui deve seguir o [código de conduta](https://github.com/dayvidemerson/brasilapi-rb/blob/main/CODE_OF_CONDUCT.md).
145
382
 
146
- Bug reports and pull requests are welcome on GitHub at https://github.com/dayvidemerson/brasilapi-rb. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/dayvidemerson/brasilapi-rb/blob/main/CODE_OF_CONDUCT.md).
383
+ ## Licença
147
384
 
148
- ## License
385
+ A gem é software livre sob a [licença MIT](https://opensource.org/licenses/MIT).
149
386
 
150
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
387
+ ## Código de conduta
151
388
 
152
- ## Code of Conduct
389
+ Quem interage nos repositórios, issues, salas e listas deste projeto deve seguir o [código de conduta](https://github.com/dayvidemerson/brasilapi-rb/blob/main/CODE_OF_CONDUCT.md).
153
390
 
154
- Everyone interacting in the Brasilapi project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/dayvidemerson/brasilapi-rb/blob/main/CODE_OF_CONDUCT.md).
391
+ ## Autor
155
392
 
156
- # Autor
157
393
  <div align="center">
158
394
 
159
395
  | [<img src="https://github.com/dayvidemerson.png?size=115" width=115><br><sub>@dayvidemerson</sub>](https://github.com/dayvidemerson) |
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
+ require "open3"
4
5
  require "rspec/core/rake_task"
5
6
 
6
7
  RSpec::Core::RakeTask.new(:spec)
@@ -9,4 +10,20 @@ require "rubocop/rake_task"
9
10
 
10
11
  RuboCop::RakeTask.new
11
12
 
12
- task default: %i[spec rubocop]
13
+ desc "Gera a documentação YARD em doc/"
14
+ task :yard do
15
+ sh "yard", "doc"
16
+ end
17
+
18
+ desc "Falha se a documentação YARD não estiver em 100%"
19
+ task :yard_stats do
20
+ output, status = Open3.capture2e("yard", "stats", "--list-undoc")
21
+ puts output
22
+ abort("yard stats --list-undoc falhou") unless status.success?
23
+
24
+ undocumented = output.scan(/\(\s*(\d+) undocumented\)/).flatten.map(&:to_i)
25
+ fully_documented = undocumented.any? && undocumented.all?(&:zero?) && output.match?(/100(?:\.0+)?% documented/)
26
+ abort("A documentação YARD não está em 100%.") unless fully_documented
27
+ end
28
+
29
+ task default: %i[spec yard_stats rubocop]
@@ -1,14 +1,52 @@
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
+ # Consulta CEP e o DDD de um código de área.
10
+ #
11
+ # @see https://brasilapi.com.br/docs#tag/CEP
12
+ # @see https://brasilapi.com.br/docs#tag/DDD
4
13
  class Address < Base
5
14
  class << self
15
+ # Busca o endereço de um CEP.
16
+ #
17
+ # Com +location: true+ a rota é a v2 e a resposta inclui coordenadas.
18
+ #
19
+ # @param zip_code [String] CEP, com ou sem hífen
20
+ # @param location [Boolean] usa +/cep/v2+ quando +true+
21
+ # @return [Hash] logradouro, bairro, cidade e UF
22
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
23
+ # @raise [BrasilAPI::NotFound] quando o CEP não existe
24
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
25
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
26
+ # @raise [BrasilAPI::Error] em outras respostas de erro
27
+ # @example Avenida Frei Serafim, em Teresina
28
+ # BrasilAPI::Address.find_by_zip_code("64001100")
29
+ # @example CEP com latitude e longitude
30
+ # BrasilAPI::Address.find_by_zip_code("80060000", location: true)
31
+ # @see https://brasilapi.com.br/docs#tag/CEP
6
32
  def find_by_zip_code(zip_code, location: false)
7
33
  return get("/cep/v2/#{zip_code}") if location
8
34
 
9
35
  get("/cep/v1/#{zip_code}")
10
36
  end
11
37
 
38
+ # Lista o estado e as cidades de um DDD.
39
+ #
40
+ # @param area_code [String, Integer] código DDD, por exemplo +"11"+
41
+ # @return [Hash] estado e cidades atendidas
42
+ # @raise [BrasilAPI::BadRequest] quando a BrasilAPI responde 400
43
+ # @raise [BrasilAPI::NotFound] quando o DDD não existe
44
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
45
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
46
+ # @raise [BrasilAPI::Error] em outras respostas de erro
47
+ # @example DDD de São Paulo
48
+ # BrasilAPI::Address.state_and_cities_by_area_code(11)
49
+ # @see https://brasilapi.com.br/docs#tag/DDD
12
50
  def state_and_cities_by_area_code(area_code)
13
51
  get("/ddd/v1/#{area_code}")
14
52
  end
@@ -0,0 +1,49 @@
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
+ # Ações e fundos listados na B3.
10
+ #
11
+ # @see https://brasilapi.com.br/docs#tag/TICKERS
12
+ class B3 < Base
13
+ class << self
14
+ # Lista as ações negociadas na B3.
15
+ #
16
+ # @return [Array<Hash>] ticker, empresa e segmento de cada ação
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::B3.stocks
24
+ # @see https://brasilapi.com.br/docs#tag/TICKERS
25
+ def stocks
26
+ get("/tickers/b3/acoes/v1")
27
+ end
28
+
29
+ # Lista os fundos de um tipo da B3.
30
+ #
31
+ # Tipos aceitos: +"FII"+, +"SETORIAL"+, +"FIAGRO-FII"+, +"FIAGRO-FIDC"+,
32
+ # +"FIAGRO-FIP"+, +"FIP"+ e +"FIA"+.
33
+ #
34
+ # @param type [String] tipo do fundo
35
+ # @return [Array<Hash>] sigla e nome de cada fundo
36
+ # @raise [BrasilAPI::BadRequest] quando o tipo é inválido
37
+ # @raise [BrasilAPI::NotFound] quando a BrasilAPI responde 404
38
+ # @raise [BrasilAPI::ServerError] quando a BrasilAPI responde 5xx
39
+ # @raise [BrasilAPI::Timeout] quando a requisição estoura o tempo limite
40
+ # @raise [BrasilAPI::Error] em outras respostas de erro
41
+ # @example Fundos setoriais
42
+ # BrasilAPI::B3.funds("SETORIAL")
43
+ # @see https://brasilapi.com.br/docs#tag/TICKERS
44
+ def funds(type)
45
+ get("/tickers/b3/fundos/v1/#{type}")
46
+ end
47
+ end
48
+ end
49
+ end
@@ -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