Added a new cookbook section, extending Moose.
[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
14 has table =>
15 ( is => 'rw',
16 isa => 'Str',
17 );
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
36=head2 Using It
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
41 my $table = MyApp::User->meta()->table();
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
49via a metaclass trait
50
51=head1 AUTHOR
52
53Dave Rolsky E<lt>autarch@urth.orgE<gt>
54
55=head1 COPYRIGHT AND LICENSE
56
57Copyright 2006-2008 by Infinity Interactive, Inc.
58
59L<http://www.iinteractive.com>
60
61This library is free software; you can redistribute it and/or modify
62it under the same terms as Perl itself.
63
64=pod