On Sat, Feb 12, 2011 at 2:15 AM, Terry Michaels <cmhoward / frigidcode.com> wrote:
> Okay... this might sound weird (contradictory even) but is there a way
> in Ruby to create an exception that can be caught at any level above the
> point of origin, but /doesn't/ actually interrupt program flow when it
> is raised?

There are a few ways to do this. One way to return side-band data like
this is to set a thread-local variable and check its value later on. A
clean-ish way to do this is to make a method that encapsulates the
error check:

def handle_errors
  yield
  if Thread.current[:error]
    # handle error
    Thread.current[:error] = nil
  end
end

handle_errors do
  # ... code that might set the error flag ...
end

--
Avdi Grimm
http://avdi.org