Altere o contexto / ligação dentro de um bloco em ruby

Eu tenho um DSL em Ruby que funciona assim:

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

Um colega desenvolvedor sugeriu que eu aprimore minha DSL para não exigir aprovaçãoc aocommand e, portanto, não requer oc. para todos os métodos internos; presumivelmente, ele sugeriu que eu poderia fazer o seguinte código funcionar da mesma maneira:

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

O código paracommand parece algo como

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

Tentei várias coisas e não consegui fazê-lo funcionar; Eu não conseguia descobrir como alterar o contexto / ligação do código dentro docommand para ser diferente do padrã

Alguma idéia de se isso é possível e como posso fazê-lo?

questionAnswers(4)

yourAnswerToTheQuestion