diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-06-06 17:50:16 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-06-06 17:50:16 +0000 |
commit | 5ac2026f7eed78958d69d051e7a8e993dcf51205 (patch) | |
tree | 298c3d2f08bdfe5689998b11892d72a897985be1 /lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod | |
download | Moose-tarball-5ac2026f7eed78958d69d051e7a8e993dcf51205.tar.gz |
Moose-2.1405HEADMoose-2.1405master
Diffstat (limited to 'lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod')
-rw-r--r-- | lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod b/lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod new file mode 100644 index 0000000..e264fea --- /dev/null +++ b/lib/Moose/Cookbook/Legacy/Table_ClassMetaclass.pod @@ -0,0 +1,132 @@ +# PODNAME: Moose::Cookbook::Legacy::Table_ClassMetaclass +# ABSTRACT: Adding a "table" attribute to the metaclass + +__END__ + +=pod + +=encoding UTF-8 + +=head1 NAME + +Moose::Cookbook::Legacy::Table_ClassMetaclass - Adding a "table" attribute to the metaclass + +=head1 VERSION + +version 2.1405 + +=head1 SYNOPSIS + + package MyApp::Meta::Class; + use Moose; + extends 'Moose::Meta::Class'; + + has table => ( + is => 'rw', + isa => 'Str', + ); + +=head1 DESCRIPTION + +B<WARNING: Subclassing metaclasses (as opposed to providing metaclass traits) +is strongly discouraged. This recipe is provided solely for reference when +encountering older code that does this.> + +In this recipe, we'll create a new metaclass which has a "table" +attribute. This metaclass is for classes associated with a DBMS table, +as one might do for an ORM. + +In this example, the table name is just a string, but in a real ORM +the table might be an object describing the table. + +=head1 THE METACLASS + +This really is as simple as the recipe L</SYNOPSIS> shows. The trick +is getting your classes to use this metaclass, and providing some sort +of sugar for declaring the table. This is covered 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 this Metaclass in Practice + +Accessing this new C<table> attribute is quite simple. Given a class +named C<MyApp::User>, we could simply write the following: + + my $table = MyApp::User->meta->table; + +As long as C<MyApp::User> has arranged to use C<MyApp::Meta::Class> as +its metaclass, this method call just works. If we want to be more +careful, we can check the metaclass's class: + + $table = MyApp::User->meta->table + if MyApp::User->meta->isa('MyApp::Meta::Class'); + +=head1 CONCLUSION + +Creating custom metaclass is trivial. Using it is a little harder, and +is covered in other recipes. We will also talk about applying traits +to a class metaclass, which is a more flexible and cooperative +implementation. + +=head1 SEE ALSO + +L<Moose::Cookbook::Meta::Recipe5> - The "table" attribute implemented +as a metaclass trait + +L<Moose::Cookbook::Extending::Recipe2> - Acting like Moose.pm and +providing sugar Moose-style + +=head1 AUTHORS + +=over 4 + +=item * + +Stevan Little <stevan.little@iinteractive.com> + +=item * + +Dave Rolsky <autarch@urth.org> + +=item * + +Jesse Luehrs <doy@tozt.net> + +=item * + +Shawn M Moore <code@sartak.org> + +=item * + +יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org> + +=item * + +Karen Etheridge <ether@cpan.org> + +=item * + +Florian Ragwitz <rafl@debian.org> + +=item * + +Hans Dieter Pearcey <hdp@weftsoar.net> + +=item * + +Chris Prather <chris@prather.org> + +=item * + +Matt S Trout <mst@shadowcat.co.uk> + +=back + +=head1 COPYRIGHT AND LICENSE + +This software is copyright (c) 2006 by Infinity Interactive, Inc.. + +This is free software; you can redistribute it and/or modify it under +the same terms as the Perl 5 programming language system itself. + +=cut |