Cambie el contexto / enlace dentro de un bloque en ruby

Tengo un DSL en Ruby que funciona así:

desc 'list all todos'
command :list do |c|
  c.desc 'show todos in long form'
  c.switch :l
  c.action do |global,option,args|
    # some code that's not relevant to this question
  end
end

desc 'make a new todo'
command :new do |c|
  # etc.
end

Un compañero desarrollador me sugirió que mejorara mi DSL para no requerir pasarc alcommand bloque, y por lo tanto no requiere elc. para todos los métodos dentro; presumiblemente, él dio a entender que podía hacer que el siguiente código funcionara igual:

desc 'list all todos'
command :list do
  desc 'show todos in long form'
  switch :l
  action do |global,option,args|
    # some code that's not relevant to this question
  end
end

desc 'make a new todo'
command :new do
  # etc.
end

El código paracommand se parece a

def command(*names)
  command = make_command_object(..)
  yield command                                                                                                                      
end

Intenté varias cosas y no pude hacerlo funcionar; No pude descubrir cómo cambiar el contexto / enlace del código dentro de lacommand block será diferente al predeterminado.

¿Alguna idea sobre si esto es posible y cómo podría hacerlo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta