I have a DSL in Ruby that works like so:
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 endenddesc 'make a new todo'command :new do |c| # etc.end
A fellow developer suggested I enhance my DSL to not require passing c
to the command
block, and thus not require the c.
for allthe methods inside; presumably, he implied I could make the following code work the same:
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 endenddesc 'make a new todo'command :new do # etc.end
The code for command
looks something like
def command(*names) command = make_command_object(..) yield command end
I tried several things and was unable to get it to work; I couldn't figure out how to change the context/binding of the code inside the command
block to be different than the default.
Any ideas on if this is possible and how I might do it?