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?