This allows for on_* to be defined by defining the corresponding instance method

directly.  Prior to this fix, doing this will result in "SystemStackError: stack
level too deep".

Example
module RedStorm
  module Examples
    class SplitSentenceBolt < DSL::Bolt
      def on_receive(tuple)
        tuple[0].split(' ').map{|w| [w]}
      end
    end
  end
end
I think so, and I like that approach, although actually I think we could tack the unless self.method_defined?(:on_receive) into the if/else construct inside it.

Let me think about this a bit and run some tests, I want to be sure we don't get bit by inheritance shenanigans (and I have code that uses on_receive and subclasses, so I can try it out in a real world scenario).