Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Moose::Cookbook::Meta:UserlContributed:PerlbDok::Meta::Table_MetaclassTrait(3)

NAME
       Moose::Cookbook::Meta::Table_MetaclassTrait - Adding a "table"
       attribute as a metaclass	trait

VERSION
       version 2.2005

SYNOPSIS
	 # in lib/MyApp/Meta/Class/Trait/HasTable.pm
	 package MyApp::Meta::Class::Trait::HasTable;
	 use Moose::Role;
	 Moose::Util::meta_class_alias('HasTable');

	 has table => (
	     is	 => 'rw',
	     isa => 'Str',
	 );

	 # in lib/MyApp/User.pm
	 package MyApp::User;
	 use Moose -traits => 'HasTable';

	 __PACKAGE__->meta->table('User');

DESCRIPTION
       In this recipe, we'll create a class metaclass trait which has a
       "table" attribute. This trait 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.

THE METACLASS TRAIT
       This really is as simple	as the recipe "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
       Moose::Cookbook::Extending::Debugging_BaseClassRole, which shows	how to
       make a module like "Moose.pm" itself, with sugar	like "has_table()".

   Using this Metaclass	Trait in Practice
       Accessing this new "table" attribute is quite simple. Given a class
       named "MyApp::User", we could simply write the following:

	 my $table = MyApp::User->meta->table;

       As long as "MyApp::User"	has arranged to	apply the
       "MyApp::Meta::Class::Trait::HasTable" to	its metaclass, this method
       call just works.	If we want to be more careful, we can check that the
       class metaclass object has a "table" method:

	 $table	= MyApp::User->meta->table
	     if	MyApp::User->meta->can('table');

       In theory, this is not entirely correct,	since the metaclass might be
       getting its "table" method from a different trait. In practice, you are
       unlikely	to encounter this sort of problem.

RECIPE CAVEAT
       This recipe doesn't work	when you paste it all into a single file. This
       is because the "use Moose -traits => 'HasTable';" line ends up being
       executed	before the "table" attribute is	defined.

       When the	two packages are separate files, this just works.

SEE ALSO
       Moose::Cookbook::Meta::Labeled_AttributeTrait - Labels implemented via
       attribute traits	=pod

AUTHORS
       o   Stevan Little <stevan.little@iinteractive.com>

       o   Dave	Rolsky <autarch@urth.org>

       o   Jesse Luehrs	<doy@tozt.net>

       o   Shawn M Moore <code@sartak.org>

       o   xxxx	x<section>xx'xx	(Yuval Kogman) <nothingmuch@woobling.org>

       o   Karen Etheridge <ether@cpan.org>

       o   Florian Ragwitz <rafl@debian.org>

       o   Hans	Dieter Pearcey <hdp@weftsoar.net>

       o   Chris Prather <chris@prather.org>

       o   Matt	S Trout	<mst@shadowcat.co.uk>

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.

perl v5.24.1			Moose::Cookbook::Meta::Table_MetaclassTrait(3)

NAME | VERSION | SYNOPSIS | DESCRIPTION | THE METACLASS TRAIT | RECIPE CAVEAT | SEE ALSO | AUTHORS | COPYRIGHT AND LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Moose::Cookbook::Meta::Table_MetaclassTrait&sektion=3&manpath=FreeBSD+12.0-RELEASE+and+Ports>

home | help