Skip to content

Instantly share code, notes, and snippets.

@brunoandradd
Last active August 5, 2020 23:34
Show Gist options
  • Save brunoandradd/0023b212e22554a4f4a9001a1905d66e to your computer and use it in GitHub Desktop.
Save brunoandradd/0023b212e22554a4f4a9001a1905d66e to your computer and use it in GitHub Desktop.
Refactory
#old code
def filtrar_padrao_por_data(horario, data)
programado_substituto = Agendamento::Horario.programados_por_horario_padrao(horario).where('? BETWEEN validade_inicial AND validade_final', data).first
if programado_substituto # se existe um substituto para ele
if data.between?(programado_substituto.validade_inicial, programado_substituto.validade_final) # e substitui nessa data
if programado_substituto.bloqueado?
false
else
programado_substituto # mostra o substituto
end
else
horario # senão mostra ele mesmo
end
else # se não existe substituto
if horario.programado? && horario.horario_padrao_id # se ele for programado e substitui alguém
false # não mostra
else # se não
if data.between?(horario.validade_inicial, horario.validade_final) # e a data for dentro da validade dele
horario # mostra ele
else # senão
false # não mostra
end
end
end
end
#new code
def filtrar_padrao_por_data(data)
horarios_filtrados = @horarios.select { |h| h.bloqueado? == false }
.select { |h| data.between?(h.validade_inicial, h.validade_final) }
horarios_filtrados.detect(&:programado?) || horarios_filtrados.detect { |h| h.programado? == false }
end
#functional new code
def filtrar_padrao_por_data(data)
remove_bloqueados = -> (h) { h.bloqueado? == false }
na_data = -> (h) { data.between?(h.validade_inicial, h.validade_final) }
horarios_filtrados = @horarios.select(&remove_bloqueados)
.select(&na_data)
horarios_filtrados.detect(&:programado?) || horarios_filtrados.detect { |h| h.programado? == false }
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment