Merge branch 'master' into method_generation_cleanup
[gitmo/Moose.git] / lib / Moose / Cookbook / Meta / Recipe4.pod
CommitLineData
3f002851 1
2=pod
3
4=head1 NAME
5
6Moose::Cookbook::Meta::Recipe4 - Adding a "table" attribute to the metaclass
7
8=head1 SYNOPSIS
9
10 package MyApp::Meta::Class;
11 use Moose;
12 extends 'Moose::Meta::Class';
13
59f5bbde 14 has table => (
15 is => 'rw',
16 isa => 'Str',
17 );
3f002851 18
19=head1 DESCRIPTION
20
21In this recipe, we'll create a new metaclass which has a "table"
22attribute. This metaclass is for classes associated with a DBMS table,
23as one might do for an ORM.
24
25In this example, the table name is just a string, but in a real ORM
26the table might be an object describing the table.
27
28=head1 THE METACLASS
29
30The metaclass example really is as simple as the one in the
31synopsis. The trick is getting your classes to use this metaclass, and
32providing some sort of sugar for declaring the table. This is covered
6fa0a13f 33in L<Moose::Cookbook::Extending::Recipe2>, which shows how to make a
34module like C<Moose.pm> itself, with sugar like C<has_table()>.
3f002851 35
c5b9daec 36=head2 Using this Metaclass in Practice
3f002851 37
38Using this new "table" attribute is quite simple. Let's say we have a
39class named C<MyApp::User>, we could simply write the following:
40
59f5bbde 41 my $table = MyApp::User->meta->table;
3f002851 42
43As long as MyApp::User has arranged to use C<MyApp::Meta::Class> as
44its metaclass, this method call just works.
45
46=head1 SEE ALSO
47
48L<Moose::Cookbook::Meta::Recipe5> - The "table" attribute implemented
c5b9daec 49as a metaclass trait
50
51L<Moose::Cookbook::Extending::Recipe2> - Acting like Moose.pm and
52providing sugar Moose-style
3f002851 53
54=head1 AUTHOR
55
56Dave Rolsky E<lt>autarch@urth.orgE<gt>
57
58=head1 COPYRIGHT AND LICENSE
59
60Copyright 2006-2008 by Infinity Interactive, Inc.
61
62L<http://www.iinteractive.com>
63
64This library is free software; you can redistribute it and/or modify
65it under the same terms as Perl itself.
66
67=pod