Class: CbfCalendario::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/cbf_calendario/client.rb

Constant Summary collapse

DEFAULT_BASE =
'https://www.cbf.com.br'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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_urlObject (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_timeoutObject (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_timeoutObject (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

Raises:



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.

Raises:



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