---------------------------------------------------------------------
TODO
--------------------------------------------------------------------- 

[23:47] 	Theory	stevan: What do you think of the use of key names as substitutes for class names that Class::Meta uses?
[23:48] 	stevan	Theory: key names?
[23:48] 	Theory	stevan: All Class::Meta classes have key names.
[23:48] 	Theory	They're short aliases, basically
[23:48] 	stevan	oh
[23:48] 	Theory	So Foo::Bar::App::Person might be "person".
[23:48] 	Theory	This is useful for a few things:
[23:48] 	Theory	1. Database mapping (table/view names)
[23:48] 	Theory	2. easy type specification
[23:49] 	Theory	3. Use in other contexts (e.g., URLs)
[23:49] 	Theory	So in effect, class key names in Class::Meta are also types.
[23:49] 	Theory	So I can say
[23:49] 	Theory	has user => ( type => 'person');
[23:49] 	Theory	instead of
[23:49] 	Theory	has user => (type => "Foo::Bar::App::Person");
[23:50] 	Theory	Anyway, the key name stuff is essential for the ORM stuff I do.
[23:50] 	Theory	Which is why I'm asking you for your thoughts on it.
[23:50] 	stevan	where is the mapping stored?
[23:50] 	stevan	and how and when is it computed?
[23:51] 	Theory	It's just another attribute of the Meta::Class object,
[23:51] 	Theory	If it's not specified, it just grabs the last part of the package name.
[23:51] 	Theory	and lowercases it.
[23:51] 	stevan	but is there any global map anywhere?
[23:51] 	Theory	But it has to be unique.
[23:52] 	Theory	yes, Class::Meta stores a hash that maps key names to Meta::Class objects.
[23:52] 	Theory	So you can say
[23:52] 	stevan	k
[23:52] 	stevan	yeah Class::MOP has a similar thing
[23:52] 	Theory	my $meta = Class::Meta->for_key('person')
[23:52] 	Theory	Which is great for mapping URLs and database tables.
[23:52] 	stevan	Class::MOP::get_metaclass_by_name('Foo::Bar::App::Person')
[23:52] 	Theory	yes, but it's only package names, right?
[23:52] 	stevan	I could add Class::MOP::get_metaclass_by_key('person')
[23:52] 	stevan	yeah it is
[23:53] 	Theory	not a substitute key word.
[23:53] 	Theory	Yes, that's what I'm thinking, exactly.,
[23:53] 	stevan	yeah that would be fairly easy actually
[23:54] 	stevan	I have been pondering (for a very long time actually) a Smalltalk like class browser 
[23:54] 	stevan	it would be very useful in that context
[23:54] 	Theory	Glad to hear it. :-)
[23:54] 	*	stevan jots another note onto the TODO list

---------------------------------------------------------------------
EXAMPLES TO WRITE
---------------------------------------------------------------------

- Prototype-style example

Make a C::MOP::Class subclass which has an AUTOLOAD method, the 
method will DWIM depending up on the value it is passed.

  Foo->prototype->say_hello(sub { print "Hello" });

This will turn into this:

  Foo->prototype->add_method('say_hello' => sub { print "Hello" });

I am not sure how we should handle non-method arguments, mostly 
because those would be static prototype variables, which would 
translate to class package variables. 








