Add event handlers to your Ruby objects, and guard them against unnecessary invokation