Class: CbfCalendario::Client
- Inherits:
-
Object
- Object
- CbfCalendario::Client
- Defined in:
- lib/cbf_calendario/client.rb
Constant Summary collapse
- DEFAULT_BASE =
'https://www.cbf.com.br'
Instance Attribute Summary collapse
-
#base_url ⇒ Object
readonly
Returns the value of attribute base_url.
-
#open_timeout ⇒ Object
readonly
Returns the value of attribute open_timeout.
-
#read_timeout ⇒ Object
readonly
Returns the value of attribute read_timeout.
Class Method Summary collapse
Instance Method Summary collapse
-
#calendario_json(data) ⇒ Object
Payload bruto da API para o dia (Hash).
-
#initialize(base_url: DEFAULT_BASE, read_timeout: 30, open_timeout: 15) ⇒ Client
constructor
A new instance of Client.
-
#jogo_partida(id_jogo) ⇒ Object
Apenas payload (Hash com string keys).
-
#jogos_do_dia(data) ⇒ Object
Aceita Date, Time ou String “dd/mm/aaaa”.
-
#partida_completa(id_jogo) ⇒ Object
GET /api/cbf/jogos/:id — resposta completa da API (mesmo conteúdo que
show_game.rbgrava em JSON).
Constructor Details
#initialize(base_url: DEFAULT_BASE, read_timeout: 30, open_timeout: 15) ⇒ Client
Returns a new instance of Client.
22 23 24 25 26 |
# File 'lib/cbf_calendario/client.rb', line 22 def initialize(base_url: DEFAULT_BASE, read_timeout: 30, open_timeout: 15) @base_url = base_url.to_s.chomp('/') @read_timeout = read_timeout @open_timeout = open_timeout end |
Instance Attribute Details
#base_url ⇒ Object (readonly)
Returns the value of attribute base_url.
20 21 22 |
# File 'lib/cbf_calendario/client.rb', line 20 def base_url @base_url end |
#open_timeout ⇒ Object (readonly)
Returns the value of attribute open_timeout.
20 21 22 |
# File 'lib/cbf_calendario/client.rb', line 20 def open_timeout @open_timeout end |
#read_timeout ⇒ Object (readonly)
Returns the value of attribute read_timeout.
20 21 22 |
# File 'lib/cbf_calendario/client.rb', line 20 def read_timeout @read_timeout end |
Class Method Details
.coerce_date!(data) ⇒ Object
68 69 70 71 72 73 74 75 |
# File 'lib/cbf_calendario/client.rb', line 68 def self.coerce_date!(data) case data when Date then data when Time then data.to_date else parse_data_br!(data) end end |
.normalize_id_jogo!(id_jogo) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/cbf_calendario/client.rb', line 43 def self.normalize_id_jogo!(id_jogo) s = id_jogo.to_s.strip raise InvalidGameIdError, 'id_jogo deve conter só dígitos (ex.: 832024)' unless s.match?(/\A\d+\z/) s end |
.parse_data_br!(str) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/cbf_calendario/client.rb', line 77 def self.parse_data_br!(str) m = str.to_s.strip.match(/\A(\d{2})\/(\d{2})\/(\d{4})\z/) raise InvalidDateError, 'Use dd/mm/aaaa (ex.: 15/05/2026)' unless m day = m[1].to_i month = m[2].to_i year = m[3].to_i Date.new(year, month, day) rescue ArgumentError raise InvalidDateError, 'Data inválida' end |
Instance Method Details
#calendario_json(data) ⇒ Object
Payload bruto da API para o dia (Hash).
63 64 65 66 |
# File 'lib/cbf_calendario/client.rb', line 63 def calendario_json(data) date = Client.coerce_date!(data) get_json(api_path_calendario(date)) end |
#jogo_partida(id_jogo) ⇒ Object
Apenas payload (Hash com string keys).
39 40 41 |
# File 'lib/cbf_calendario/client.rb', line 39 def jogo_partida(id_jogo) partida_completa(id_jogo)['jogo'] end |
#jogos_do_dia(data) ⇒ Object
Aceita Date, Time ou String “dd/mm/aaaa”. Retorna todos os jogos do dia no calendário (pendentes e já realizados). Array<Hash> com símbolos como chaves, ordenado e sem IDs duplicados. Cada hash: campeonato, serie, mandante, visitante, horario, placar, data, data_iso, local, rodada, id_jogo.
55 56 57 58 59 60 |
# File 'lib/cbf_calendario/client.rb', line 55 def jogos_do_dia(data) date = Client.coerce_date!(data) payload = get_json(api_path_calendario(date)) jogos = extrair_jogos_do_dia(payload, date) dedup_and_sort(jogos) end |
#partida_completa(id_jogo) ⇒ Object
GET /api/cbf/jogos/:id — resposta completa da API (mesmo conteúdo que show_game.rb grava em JSON). Chaves são String como no JSON original.
30 31 32 33 34 35 36 |
# File 'lib/cbf_calendario/client.rb', line 30 def partida_completa(id_jogo) jid = Client.normalize_id_jogo!(id_jogo) payload = get_json(api_path_jogo(jid)) raise HttpError, 'Resposta sem objeto "jogo"' unless payload['jogo'].is_a?(Hash) payload end |