Rails Insights

Opciones de Línea de Comando en Ruby CLI

Ruby es un lenguaje de programación versátil y poderoso, conocido por su simplicidad y elegancia. Una de las características más útiles de Ruby es su capacidad para interactuar con la línea de comandos, lo que permite a los desarrolladores crear herramientas y scripts que pueden ser ejecutados directamente desde el terminal. En este artículo, exploraremos cómo manejar las opciones de línea de comando en Ruby, utilizando la biblioteca estándar y algunas gemas populares.

¿Qué son las Opciones de Línea de Comando?

Las opciones de línea de comando son parámetros que se pueden pasar a un programa cuando se ejecuta desde la terminal. Estas opciones permiten a los usuarios modificar el comportamiento del programa sin necesidad de cambiar el código fuente. Por ejemplo, un programa que procesa archivos puede aceptar una opción para especificar el archivo de entrada o el formato de salida.

Ejemplo Básico de Uso de Opciones

Para ilustrar cómo funcionan las opciones de línea de comando en Ruby, consideremos un ejemplo simple. Supongamos que queremos crear un script que imprima un saludo personalizado. Aquí hay un código básico que acepta un nombre como argumento:

# saludo.rb
nombre = ARGV[0] || "Mundo"
puts "¡Hola, #{nombre}!"

En este script, usamos la constante ARGV, que es un array que contiene los argumentos pasados al script. Si no se proporciona un nombre, se utiliza "Mundo" como valor predeterminado.

Para ejecutar este script, simplemente lo llamamos desde la terminal:

ruby saludo.rb Juan

Esto imprimirá:

¡Hola, Juan!

Usando la Biblioteca Optparse

Para manejar opciones de línea de comando más complejas, Ruby proporciona la biblioteca Optparse. Esta biblioteca permite definir opciones de manera más estructurada y proporciona ayuda automática para los usuarios. A continuación, veremos cómo usar Optparse para crear un script más avanzado.

Ejemplo con Optparse

Imaginemos que queremos crear un script que acepte varias opciones, como un nombre, un saludo y un indicador para mostrar un mensaje de ayuda. Aquí hay un ejemplo de cómo hacerlo:

# saludo_optparse.rb
require 'optparse'

opciones = {}
OptionParser.new do |opts|
  opts.banner = "Uso: saludo_optparse.rb [opciones]"

  opts.on("-n", "--nombre NOMBRE", "Nombre de la persona a saludar") do |n|
    opciones[:nombre] = n
  end

  opts.on("-g", "--greeting SALUDO", "Saludo personalizado") do |g|
    opciones[:saludo] = g
  end

  opts.on("-h", "--help", "Mostrar ayuda") do
    puts opts
    exit
  end
end.parse!

nombre = opciones[:nombre] || "Mundo"
saludo = opciones[:saludo] || "¡Hola"

puts "#{saludo}, #{nombre}!"

En este script, hemos definido varias opciones utilizando opts.on. Cada opción puede tener un alias corto (como -n) y un nombre largo (como --nombre). También hemos incluido una opción de ayuda que muestra cómo usar el script.

Para ejecutar este script, podemos usar diferentes combinaciones de opciones:

ruby saludo_optparse.rb -n Juan -g "¡Saludos"

Esto imprimirá:

¡Saludos, Juan!

Opciones Posicionales y Opciones de Bandera

En Ruby, las opciones de línea de comando se pueden clasificar en dos categorías: opciones posicionales y opciones de bandera.

Opciones Posicionales

Las opciones posicionales son aquellas que se pasan al script en un orden específico. Por ejemplo, en el script de saludo anterior, el nombre es una opción posicional. Si cambiamos el orden de los argumentos, el resultado puede ser diferente.

Opciones de Bandera

Las opciones de bandera son aquellas que no requieren un valor adicional. Se utilizan para activar o desactivar una característica. Por ejemplo, podríamos agregar una opción de bandera para activar un saludo en mayúsculas:

# saludo_optparse.rb
require 'optparse'

opciones = {}
OptionParser.new do |opts|
  opts.banner = "Uso: saludo_optparse.rb [opciones]"

  opts.on("-n", "--nombre NOMBRE", "Nombre de la persona a saludar") do |n|
    opciones[:nombre] = n
  end

  opts.on("-u", "--uppercase", "Saludo en mayúsculas") do
    opciones[:uppercase] = true
  end

  opts.on("-h", "--help", "Mostrar ayuda") do
    puts opts
    exit
  end
end.parse!

nombre = opciones[:nombre] || "Mundo"
saludo = "¡Hola"

saludo = saludo.upcase if opciones[:uppercase]

puts "#{saludo}, #{nombre}!"

Ahora, si ejecutamos el script con la opción de mayúsculas:

ruby saludo_optparse.rb -n Juan -u

Imprimirá:

¡HOLA, JUAN!

Validación de Opciones

Es importante validar las opciones proporcionadas por el usuario para asegurarse de que el script funcione correctamente. Podemos agregar validaciones simples en nuestro script para verificar que se haya proporcionado un nombre:

# saludo_optparse.rb
require 'optparse'

opciones = {}
OptionParser.new do |opts|
  opts.banner = "Uso: saludo_optparse.rb [opciones]"

  opts.on("-n", "--nombre NOMBRE", "Nombre de la persona a saludar") do |n|
    opciones[:nombre] = n
  end

  opts.on("-h", "--help", "Mostrar ayuda") do
    puts opts
    exit
  end
end.parse!

if opciones[:nombre].nil?
  puts "Error: Se debe proporcionar un nombre."
  puts "Uso: saludo_optparse.rb -n NOMBRE"
  exit 1
end

puts "¡Hola, #{opciones[:nombre]}!"

Con esta validación, si el usuario intenta ejecutar el script sin proporcionar un nombre, se mostrará un mensaje de error claro.

Gemas Populares para Manejar Opciones de Línea de Comando

Además de la biblioteca estándar Optparse, hay varias gemas populares que facilitan el manejo de opciones de línea de comando en Ruby. Algunas de ellas son:

  • Thor: Una herramienta poderosa para crear scripts de línea de comando. Permite definir tareas y opciones de manera sencilla.
  • GLI: Una gema que permite crear interfaces de línea de comando de manera intuitiva y flexible.
  • Commander: Proporciona una forma sencilla de crear aplicaciones de línea de comando con opciones y subcomandos.

Ejemplo con Thor

A continuación, veremos un ejemplo simple de cómo usar Thor para crear un script de saludo:

# saludo_thor.rb
require 'thor'

class Saludo < Thor
  desc "saludar NOMBRE", "Saluda a la persona con el nombre proporcionado"
  def saludar(nombre = "Mundo")
    puts "¡Hola, #{nombre}!"
  end
end

Saludo.start

Para ejecutar este script, primero debemos instalar la gema Thor:

gem install thor

Luego, podemos ejecutar el script de la siguiente manera:

ruby saludo_thor.rb saludar Juan

Esto imprimirá:

¡Hola, Juan!

Conclusión

Las opciones de línea de comando son una parte esencial de la creación de scripts y herramientas en Ruby. Con la biblioteca estándar Optparse y gemas como Thor, puedes crear aplicaciones de línea de comando robustas y fáciles de usar. A medida que te familiarices con estas herramientas, podrás mejorar la experiencia del usuario y hacer que tus scripts sean más flexibles y potentes.

Esperamos que este artículo te haya proporcionado una comprensión clara de cómo manejar las opciones de línea de comando en Ruby. ¡Feliz codificación!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.