Sorry forgot the best ;)

class Object
  def identity; self end # I wanted this for a long time, maybe itself
would be a good name too
end
class Module
  def define_casey opts={}
    arg_mth = opts[:on]
    name = opts[:name]
    trans = opts[:transform]
    define_method name do
      | *args |
      cond = lambda{ |x|
	trans ? self.send(trans, *args) == x.send( arg_mth ) :
	  self == x.send( arg_mth )
      }
      class << cond
	alias_method :===, :call
      end
      cond
    end
  end
end

class Integer
  define_casey :on => :size, :name => :elements
  define_casey :on => :identity, :name => :plus, :transform => :+
end

case []
  when 0.elements
    puts :empty
end

case 42
  when 41.plus( 1 )
    puts "The number"
end


Robert