Merge branch 'stable'
[gitmo/Class-MOP.git] / TODO
1 ---------------------------------------------------------------------
2 TODO
3 --------------------------------------------------------------------- 
4
5 [23:47]         Theory  stevan: What do you think of the use of key names as substitutes for class names that Class::Meta uses?
6 [23:48]         stevan  Theory: key names?
7 [23:48]         Theory  stevan: All Class::Meta classes have key names.
8 [23:48]         Theory  They're short aliases, basically
9 [23:48]         stevan  oh
10 [23:48]         Theory  So Foo::Bar::App::Person might be "person".
11 [23:48]         Theory  This is useful for a few things:
12 [23:48]         Theory  1. Database mapping (table/view names)
13 [23:48]         Theory  2. easy type specification
14 [23:49]         Theory  3. Use in other contexts (e.g., URLs)
15 [23:49]         Theory  So in effect, class key names in Class::Meta are also types.
16 [23:49]         Theory  So I can say
17 [23:49]         Theory  has user => ( type => 'person');
18 [23:49]         Theory  instead of
19 [23:49]         Theory  has user => (type => "Foo::Bar::App::Person");
20 [23:50]         Theory  Anyway, the key name stuff is essential for the ORM stuff I do.
21 [23:50]         Theory  Which is why I'm asking you for your thoughts on it.
22 [23:50]         stevan  where is the mapping stored?
23 [23:50]         stevan  and how and when is it computed?
24 [23:51]         Theory  It's just another attribute of the Meta::Class object,
25 [23:51]         Theory  If it's not specified, it just grabs the last part of the package name.
26 [23:51]         Theory  and lowercases it.
27 [23:51]         stevan  but is there any global map anywhere?
28 [23:51]         Theory  But it has to be unique.
29 [23:52]         Theory  yes, Class::Meta stores a hash that maps key names to Meta::Class objects.
30 [23:52]         Theory  So you can say
31 [23:52]         stevan  k
32 [23:52]         stevan  yeah Class::MOP has a similar thing
33 [23:52]         Theory  my $meta = Class::Meta->for_key('person')
34 [23:52]         Theory  Which is great for mapping URLs and database tables.
35 [23:52]         stevan  Class::MOP::get_metaclass_by_name('Foo::Bar::App::Person')
36 [23:52]         Theory  yes, but it's only package names, right?
37 [23:52]         stevan  I could add Class::MOP::get_metaclass_by_key('person')
38 [23:52]         stevan  yeah it is
39 [23:53]         Theory  not a substitute key word.
40 [23:53]         Theory  Yes, that's what I'm thinking, exactly.,
41 [23:53]         stevan  yeah that would be fairly easy actually
42 [23:54]         stevan  I have been pondering (for a very long time actually) a Smalltalk like class browser 
43 [23:54]         stevan  it would be very useful in that context
44 [23:54]         Theory  Glad to hear it. :-)
45 [23:54]         *       stevan jots another note onto the TODO list
46
47 ---------------------------------------------------------------------
48 EXAMPLES TO WRITE
49 ---------------------------------------------------------------------
50
51 - Prototype-style example
52
53 Make a C::MOP::Class subclass which has an AUTOLOAD method, the 
54 method will DWIM depending up on the value it is passed.
55
56   Foo->prototype->say_hello(sub { print "Hello" });
57
58 This will turn into this:
59
60   Foo->prototype->add_method('say_hello' => sub { print "Hello" });
61
62 I am not sure how we should handle non-method arguments, mostly 
63 because those would be static prototype variables, which would 
64 translate to class package variables. 
65
66
67
68
69
70
71
72