¿Cómo puedo elegir qué versión de un módulo incluir dinámicamente en Ruby?

Estoy escribiendo una pequeña aplicación de línea de comandos Ruby que usafileutils de la biblioteca estándar para operaciones de archivos. Dependiendo de cómo el usuario invoca la aplicación, querré incluir cualquieraFileUtils, FileUtils::DryRun oFileUtils::Verbose.

Ya queinclude es privado, sin embargo, no puedo poner la lógica para elegir en el objetoinitialize método. (Ese fue mi primer pensamiento, desde entonces pude pasar la información sobre la elección del usuario como parámetro paranew.) Se me ocurrieron dos opciones que parecen funcionar, pero tampoco estoy contento con ellas:

Establezca una variable global en el espacio de nombres de la aplicación según la elección del usuario, y luego haga una inclusión condicional en la clase:

class Worker
  case App::OPTION
  when "dry-run"
    include FileUtils::DryRun
    etc.

Cree subclases, donde la única diferencia es qué versión deFileUtils Incluyen. Elija el apropiado, dependiendo de la elección del usuario.

class Worker
  include FileUtils
  # shared Worker methods go here
end
class Worker::DryRun < Worker
  include FileUtils::DryRun
end
class Worker::Verbose < Worker
  include FileUtils::Verbose
end

El primer método parece SECO, pero espero que haya algo más directo en lo que no he pensado.

Respuestas a la pregunta(3)

Su respuesta a la pregunta