class NilClass def include?(*args) false end end module MethodPrependAndAppend def before_method(m, &blk) alias_method :"#{m}_before_extending", m define_method m do instance_eval(&blk) send :"#{m}_before_extending" end end def after_method(m, &blk) alias_method :"#{m}_before_extending", m define_method m do result = send :"#{m}_before_extending" instance_eval(result, &blk) end end end Class.send :include, MethodPrependAndAppend