I was intrigued by one of Matz's "Wild and Crazy Ideas" at RubyConf-- 
the inclusion of meta data in the comments section before a method  
definition.

This got me thinking about the need for metadata and Ruby's fabulous  
introspective capabilities and I wondered if it might be better to  
have a governing "metamethod" for each method.  Actually, more like  
accessor metamethods.  These metamethods would be in charge of  
setting or getting key/value pairs describing things about the method  
it is associated with:

# Returns double the input
def double(i)
     i * 2
end

meta :double, :require => 'i.is_a? Fixnum'
meta :double, :comments
=> 'Returns double the input'

I don't quite like the syntax yet, (probably because we don't really  
have a facility yet to talk about methods like this); however, I do  
like the flexibility provided.  Perhaps we could make a new syntax  
like this:

def double>require(i)
     i.is_a? Fixnum
end

def double>comment(original_comment)
     "Haha! I can over-ride the comment."
end

And we could even do some cool stuff like custom namespace selectors:

def double>visibility(looking_at_me)
     [Object, ActiveRecord].include? looking_at_me
end

(i.e. the method would be called prior to any reference to 'double'  
and it would return 'true' if it is visible from within the caller's  
scope / namespace).

We could even talk about meta-metamethods:

def double>visibility>comment
     "Comment for the 'double>visibility' metamethod"
end

Duane Johnson
(canadaduane)