Esta mañana, poniendome al día con la blogesfera, dí con este pequeño y genial hack para hacer nuestros metodos algo más semanticos:

class Object
   define_method :not do
     Not.new(self)
   end
 
   class Not
     private *instance_methods.select { |m| m !~ /(^__|^\W|^binding$)/ }
 
     def initialize(subject)
       @subject = subject
     end
 
     def method_missing(sym, *args, &blk)
       !@subject.send(sym,*args,&blk)
     end
   end
 end
 

Y bueno, los ejemplos más sencillos no pueden ser:

   usuario.not.visible?
   usuario.not.admin?
 

Me encanta ^_^!

Fuente: http://blog.jayfields.com/2007/08/ruby-adding-not-method-for-readability.html