Rutas
/
Ruby
Ruby
/
Ejercicios
/
Analizador de líneas de registro
Analizador de líneas de registro

Analizador de líneas de registro

Ejercicio de aprendizaje

Introducción

Como todo en Ruby, un String es un objeto. Las cadenas de caracteres están formadas por una secuencia arbitraria de bytes (normalmente caracteres) y se inicializan y manipulan como cualquier otro objeto. De hecho, una de las cosas más útiles de Ruby es la gran cantidad de métodos que se pueden llamar sobre los strings (y sobre otros objetos) para ahorrarte mucho tiempo al escribir código. En este ejercicio vamos a explorar y jugar con algunos de esos métodos auxiliares.

Crear un string

Aunque puedes usar String.new(...) para crear un string, es mucho más habitual usar un literal. Hay muchos literales distintos que puedes usar, y se dividen en dos categorías: los que permiten interpolación y los que no.

Los literales más comunes son las comillas simples y dobles ('...' y "..."). Las comillas simples no permiten interpolación, mientras que las dobles sí. La interpolación consiste en incluir un string dentro de otro con la sintaxis #{}.

# Use single quotes when not interpolated
location = 'World'

# And double quotes when interpolated
puts "Hello, #{location}!"   #=> "Hello, World!"

También puedes usar otros literales, como %{... } para strings interpolados y %q{...} para strings no interpolados. Estos resultan útiles si tus strings contienen los caracteres ' o ".

Nota: no hay ninguna regla absoluta que diga que tienes que usar strings no interpolados si tu string no contiene interpolación.

Interactuar con los strings

Resulta útil pensar en los strings de Ruby de forma parecida a como piensas en los arrays. Tienen un tamaño y sus caracteres están indexados (con 0 como primer índice):

my_string = "Some string"

my_string.size   #=> 11

my_string[0]    #=> 'S'
my_string[1]    #=> 'o'
my_string[-1]   #=> 'g'

# Find the first index of a character
my_string.index('m')   #=> 2

Se pueden extraer partes de un string usando índices o slice:

my_string = "Some string"

# Find three characters starting with the second character (index 1)
my_string[1, 3]         #=> "ome"
my_string.slice(1, 3)   #=> "ome"

También se pueden manipular los valores semánticos de los strings. Merece la pena explorar la documentación de Ruby para conocer todos los métodos, pero aquí tienes algunos ejemplos de uso habitual:

"hello".capitalize   #=> "Hello"
"HELLO".downcase     #=> "hello"
"hello".center(9)    #=> "  hello  "
"  hello  ".strip    #=> "hello"

"hello world".split(" ")   #=> ["hello", "world"]

También puedes usar métodos como gsub para sustituir caracteres:

# Replace one character with another
"noob".gsub("o","0")   #=> "n00b"

# (Advanced) Replace a regular expression
"Ruby really rocks".gsub(/[aieou]/,'')   #=> "Rby rlly rcks"

En todos los ejemplos anteriores se devuelve un nuevo String. Sin embargo, muchos métodos tienen equivalentes que terminan en ! y que modifican el propio string.

# Use normal methods to return new strings
my_string = "hello"
my_string.capitalize   #=> "Hello"
puts my_string         #=> "hello"

# And bang-methods (...!) to modify the object
my_string = "hello"
my_string.capitalize!  #=> "Hello"
puts my_string         #=> "Hello"

Instrucciones

En este ejercicio vas a procesar líneas de registro.

Cada línea de registro es un string con el formato siguiente: "[<LEVEL>]: <MESSAGE>".

Hay tres niveles de registro diferentes:

  • INFO
  • WARNING
  • ERROR

Tienes tres tareas, cada una de las cuales recibe una línea de registro y te pide que hagas algo con ella. Hay muchas formas de resolver estas tareas: elige tus métodos favoritos de los ejemplos anteriores y a ver con qué se te ocurre.

1. Obtener el mensaje de una línea de registro

Implementa el método LogLineParser#message para devolver el mensaje de una línea de registro:

LogLineParser.new('[ERROR]: Invalid operation').message
# => "Invalid operation"

Debe eliminarse cualquier espacio en blanco al principio o al final:

LogLineParser.new("[WARNING]:  Disk almost full\r\n").message
# => "Disk almost full"

2. Obtener el nivel de registro de una línea de registro

Implementa el método LogLineParser#log_level para devolver el nivel de registro de una línea de registro, que debe devolverse en minúsculas:

LogLineParser.new('[ERROR]: Invalid operation').log_level
# => "error"

3. Cambiar el formato de una línea de registro

Implementa el método LogLineParser#reformat, que cambia el formato de la línea de registro poniendo primero el mensaje y después el nivel de registro entre paréntesis:

LogLineParser.new('[INFO]: Operation completed').reformat
# => "Operation completed (info)"
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Ruby Exercism

¿Listo para empezar Analizador de líneas de registro?

Regístrate en Exercism para aprender y dominar Ruby con 21 conceptos121 ejercicios y mentoría humana real, todo gratis.