--000325557876e195da048d1a03ab
Content-Type: text/plain; charset=UTF-8

Ok, so here's something fairly simple to try. There are better ways to do
this, but this should work. In your error-handling file, put this:

module ErrorHandling
  def self.included(cls)
    def cls.method_added(method)
      return if @_adding_a_method
      @_adding_a_method  rue

      original_method  original #{method}"
      alias_method original_method, method

      define_method(method) do |*args|
        begin
          puts "gonna try something dangerous"
          send original_method, *args
        rescue Exception
        ensure
          puts "My last will and testament..."
        end
      end

      @_adding_a_method  alse
    end
  end
end

The idea is, when you include this module, then it watches for any new
methods you define. When you define one, it immediately hides it away, and
creates a new method, which calls the original one, but inside a
begin/rescue/ensure block. The @_adding_a_method flag is just to keep from
infinite recursion when you create the new method (because it will also
trigger method_added.

Now in your main class, do something like this:

include ErrorHandling

def do_something
  puts "do something dangerous"
end

do_something

On Thu, Aug 5, 2010 at 1:37 PM, Martin Hansen <mail / maasha.dk> wrote:

> Andrew Wagner wrote:
>
> > Then when you could do is have a module which overrides Ruby's method
> > that
> > gets called when you define a method. You can alias the method being
> > created
> > to something else, then define a new method which calls that one, but
> > wraps
> > it in whatever error-handling code you want.
>
> Sorry, I have no idea how to do that - it sounds terribly complicated.
> Is there no simple solution?  Could you perhaps give a small example?
>
>
> Martin
> --
> Posted via http://www.ruby-forum.com/.
>
>

--000325557876e195da048d1a03ab--