Блочный вызов в Ruby on Rails

я есть DSL в Ruby, который работает так:

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

Один из разработчиков предложил мне улучшить DSL, чтобы не требовать прохожденияc кcommand блок, и, следовательно, не требуютc. для всех методов внутри; предположительно, он подразумевал, что я мог заставить следующий код работать так же:

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

Код дляcommand выглядит примерно так

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

Я попробовал несколько вещей и не смог заставить его работать; Я не мог понять, как изменить контекст / привязку кода внутриcommand блок должен отличаться от заданного по умолчанию.

Любые идеи о том, если это возможно, и как я могу это сделать?

Ответы на вопрос(1)

Ваш ответ на вопрос