, Correçoes na busca da API para ver os ultimos planos

This commit is contained in:
2026-08-28 17:24:05 -03:00
parent 3e51d0e03b
commit 2bdad2a45b
4 changed files with 210 additions and 34 deletions

View File

@@ -64,6 +64,16 @@ module SimpliRoute
Array(get(caminho))
end
# UM plano pelo uuid. Existe separado de `planos` porque a busca do plano
# ESCOLHIDO não pode depender de recorte nenhum: o operador pode ter filtrado
# por período e escolhido um plano fora dos mais recentes, e procurá-lo numa
# lista cortada devolveria "plano não encontrado" para um plano que existe.
def plano(id)
Array(get('/v1/routes/plans/')).find { |pl| pl['id'].to_s == id.to_s }
rescue Error
nil
end
# UMA rota pelo uuid. Serve para descobrir o DIA REAL de um plano: o registro
# do plano só traz a JANELA (`start_date`/`end_date`), e o dia das rotas nem
# sempre é o começo dela — medido em 28/08/2026: EMAD SETEMBRO 2026 (31/08 a
@@ -113,12 +123,22 @@ module SimpliRoute
# (o EMAD SETEMBRO 2026 vai de 31/08 a 08/09), e é justamente essa janela que
# tornava impossível adivinhar "a data do plano". Quem publicou por último é
# quem o operador quer — ele abre a ferramenta logo depois de lançar.
def planos(limite: 5)
Array(get('/v1/routes/plans/'))
.sort_by { |p| p['created'].to_s }
.reverse
.first(limite)
rescue Error
#
# COM PERÍODO (`inicio`/`fim`) o corte muda de propósito: em vez dos N mais
# recentes, devolve TODOS os planos da faixa — é assim que se alcança um
# plano antigo sem saber o dia dele, e é o mesmo recorte que a tela do
# SimpliRoute usa. O critério é a JANELA DO PLANO CRUZAR o período
# (`start_date <= fim AND end_date >= inicio`), a mesma semântica de
# `Consolidacao.cruzando_periodo`: um plano de 31/08 a 08/09 pertence a
# agosto E a setembro, e some da lista se a regra for "está dentro".
def planos(limite: 5, inicio: nil, fim: nil)
lista = Array(get('/v1/routes/plans/')).sort_by { |p| p['created'].to_s }.reverse
return lista.first(limite) if inicio.blank? || fim.blank?
i = inicio.to_date
f = fim.to_date
lista.select { |p| cruza_periodo?(p, i, f) }
rescue Error, Date::Error
[]
end
@@ -192,6 +212,18 @@ module SimpliRoute
private
# Plano sem data em um dos lados não some da lista por isso: usa a que tem.
# Sumir em silêncio é o pior resultado possível numa lista de escolha.
def cruza_periodo?(plano, inicio, fim)
comeco = Date.parse(plano['start_date'].to_s) rescue nil
termino = Date.parse(plano['end_date'].to_s) rescue nil
comeco ||= termino
termino ||= comeco
return false if comeco.nil?
comeco <= fim && termino >= inicio
end
def get(path)
requisicao(Net::HTTP::Get.new(caminho(path)))
end