Quantcast
Channel: Active questions tagged ruby - Stack Overflow
Viewing all articles
Browse latest Browse all 4616

Change the context/binding inside a block in ruby

$
0
0

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?


Viewing all articles
Browse latest Browse all 4616

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>