Tracks
/
Elixir
Elixir
/
Ejercicios
/
Nuevo pasaporte
Nuevo pasaporte

Nuevo pasaporte

Ejercicio de aprendizaje

Introducción

With

La forma especial with ofrece una manera de concentrarte en el «camino feliz» de una serie de pasos que pueden fallar y de ocuparte de los errores más adelante.

with {:ok, id} <- get_id(username),
     {:ok, avatar} <- fetch_avatar(id),
     {:ok, image_type} <- check_valid_image_type(avatar) do
  {:ok, image_type, avatar}
else
  :not_found ->
    {:error, "invalid username"}

  {:error, "not an image"} ->
    {:error, "avatar associated to #{username} is not an image"}

  err ->
    err
end

En cada paso, si una cláusula coincide, la cadena continúa hasta que se ejecuta el bloque do. Si alguna coincidencia falla, la cadena se detiene y se devuelve la cláusula que no coincidió. Tienes la opción de usar un bloque else para capturar las coincidencias fallidas y modificar el valor de retorno.

Instrucciones

Tu pasaporte está por vencer, así que necesitas pasar por la oficina de la ciudad para renovarlo. Sabes por experiencia previa que la oficina de tu ciudad no es necesariamente la más fácil de tratar, así que decides hacer lo posible por siempre «centrarte en el camino feliz».

Imprimes el formulario que necesitas para obtener tu nuevo pasaporte, lo llenas, te subes al auto, das una vuelta a la manzana, te estacionas y te diriges a la oficina.

Todas las tareas siguientes requerirán que implementes y extiendas get_new_passport/3.

1. Entra al edificio

Resulta que el edificio solo abre por la tarde, y no a la misma hora todos los días.

Llama a la función enter_building/1 con la hora actual (que se te da como primer argumento de get_new_passport/3). Si el edificio está abierto, la función devolverá una tupla con :ok y una marca de tiempo que necesitarás más adelante; de lo contrario, una tupla con :error y un mensaje. Por ahora, el camino feliz puede devolver la tupla :ok.

Si recibes una tupla :error, usa el bloque else para devolverla.

2. Ve al mostrador de información y averigua a qué ventanilla debes ir

El mostrador de información es famoso por tomar largos descansos para el café. Si tienes la suerte de encontrar a alguien ahí, te dará un manual de instrucciones que explicará a qué ventanilla necesitas ir según tu fecha de nacimiento.

Llama a la función find_counter_information/1 con la hora actual. Recibirás una tupla con :ok y un manual, representado por una función anónima, o una tupla con :coffee_break y más instrucciones. En tu camino feliz, donde recibes el manual, aplícalo a tu fecha de nacimiento (segundo argumento de get_new_passport/3). Devolverá el número de la ventanilla a la que necesitas ir. Devuelve una tupla :ok con ese número de ventanilla.

Si recibes un mensaje :coffee_break, devuelve una tupla con :retry y un NaiveDateTime que apunte a 15 minutos después de la hora actual. Como antes, si recibes una tupla :error, devuélvela.

3. Ve a la ventanilla y haz que sellen tu formulario

Por alguna razón, las distintas ventanillas requieren formularios de distintos colores. Por supuesto, imprimiste el primero que encontraste en el sitio web, así que te concentras en tu camino feliz y esperas lo mejor.

Llama a la función stamp_form/3 con la marca de tiempo que recibiste en la entrada, la ventanilla y el formulario que llevaste (último argumento de get_new_passport/3). Recibirás una tupla con :ok y una suma de verificación que se usará para verificar tu número de pasaporte, o una tupla con :error y un mensaje. Haz que tu camino feliz devuelva una tupla :ok con la suma de verificación. Si recibes una tupla :error, devuélvela.

4. Recibe tu nuevo pasaporte

Por fin, tienes todos los documentos que necesitas.

Llama a get_new_passport_number/3 con la marca de tiempo, la ventanilla y la suma de verificación que recibiste antes. Recibirás un string con tu número de pasaporte final; lo único que queda por hacer es devolver ese string en una tupla con :ok y volver a casa.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Elixir Exercism

¿Todo listo para empezar Nuevo pasaporte?

Regístrate en Exercism para aprender y dominar Elixir con 58 conceptos168 ejercicios y mentoría humana real, todo gratis.