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?