If you want to store more information about your classes, you'll have
to extend C<Moose::Meta::Class>. Doing so is simple, but you'll
probably also want to provide some sugar, so see
-L<Moose::Cookbook::Meta::Recipe6> as well.
+L<Moose::Cookbook::Extending::Recipe2> as well.
-=item L<Moose::Cookbook::Meta::Recipe5> - The "table" attribute implemented via a metaclass trait
+=item L<Moose::Cookbook::Meta::Recipe5> - The "table" attribute implemented as a metaclass trait
-I<abstract goes here>
+This example takes the class metaclass we saw in the previous recipe
+and reimplements it as a metaclass trait.
=item L<Moose::Cookbook::Meta::Recipe6> - Hooking into the immutabilization system (TODO)
=item L<Moose::Cookbook::Extending::Recipe2> - Acting like Moose.pm and providing sugar Moose-style
-This recipe shows how to provide a replacement for C<Moose.pm>. This
-is something that you may want to do as part of a C<MooseX> module,
+This recipe shows how to provide a replacement for C<Moose.pm>. You
+may want to do this as part of the API for a C<MooseX> module,
especially if you want to default to a new metaclass class or base
object class.
in L<Moose::Cookbook::Extending::Recipe2>, which shows how to make a
module like C<Moose.pm> itself, with sugar like C<has_table()>.
-=head2 Using It
+=head2 Using this Metaclass in Practice
Using this new "table" attribute is quite simple. Let's say we have a
class named C<MyApp::User>, we could simply write the following:
=head1 SEE ALSO
L<Moose::Cookbook::Meta::Recipe5> - The "table" attribute implemented
-via a metaclass trait
+as a metaclass trait
+
+L<Moose::Cookbook::Extending::Recipe2> - Acting like Moose.pm and
+providing sugar Moose-style
=head1 AUTHOR
--- /dev/null
+
+=pod
+
+=head1 NAME
+
+Moose::Cookbook::Meta::Recipe5 - The "table" attribute as a metaclass trait
+
+=head1 SYNOPSIS
+
+ package MyApp::Meta::Class::Trait::HasTable;
+ use Moose::Role;
+
+ has table =>
+ ( is => 'rw',
+ isa => 'Str',
+ );
+
+ package Moose::Meta::Class::Custom::Trait::HasTable;
+ sub register_implementation { 'MyApp::Meta::Class::Trait::HasTable' }
+
+ package MyApp::User;
+ use Moose -traits => 'HasTable';
+
+ __PACKAGE__->table('User');
+
+=head1 DESCRIPTION
+
+This recipe takes the metaclass table attribute and reimplements it as
+a metaclass trait. Traits are just roles that Moose applies to
+something for you. In this case, that "something" is the class's
+metaclass object.
+
+The advantage of using traits is that it's easy to combine multiple
+traits, whereas combining multiple metaclasses can be tricky (which
+subclasses which?).
+
+The disadvantage is that it's not easy to combine a trait with some
+sort of sugar (like our notional C<has_table> sugar).
+
+=head2 Using this Metaclass Trait in Practice
+
+Once this trait has been applied to a metaclass, it looks exactly like
+the example we saw in L<Moose::Cookbook::Meta::Recipe4>:
+
+ my $table = MyApp::User->meta()->table();
+
+=head1 SEE ALSO
+
+L<Moose::Cookbook::Meta::Recipe3> - Labels implemented via attribute
+traits
+
+L<Moose::Cookbook::Meta::Recipe4> - Adding a "table" attribute to the
+metaclass
+
+=head1 AUTHOR
+
+Dave Rolsky E<lt>autarch@urth.orgE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2006-2008 by Infinity Interactive, Inc.
+
+L<http://www.iinteractive.com>
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=pod