| Moose::Cookbook::Extending::Recipe4 - Acting like Moose.pm and providing sugar Moose-style |
Moose::Cookbook::Extending::Recipe4 - Acting like Moose.pm and providing sugar Moose-style
package MyApp::Mooseish;
use Moose (); use Moose::Exporter;
Moose::Exporter->setup_import_methods( with_caller => ['has_table'], also => 'Moose', );
sub init_meta { shift; return Moose->init_meta( @_, metaclass => 'MyApp::Meta::Class' ); }
sub has_table { my $caller = shift; $caller->meta->table(shift); }
package MyApp::Meta::Class; use Moose;
extends 'Moose::Meta::Class';
has 'table' => ( is => 'rw' );
This recipe expands on the use of the Moose::Exporter manpage we saw in
the Moose::Cookbook::Extending::Recipe1 manpage. Instead of providing our own
object base class, we provide our own metaclass class, and we also
export a has_table sugar function.
Given the above code, you can now replace all instances of use
Moose with use MyApp::Mooseish. Similarly, no Moose is now
replaced with no MyApp::Mooseish.
The with_caller parameter specifies a list of functions that should
be wrapped before exporting. The wrapper simply ensures that the
importing package name is the first argument to the function, so we
can do my $caller = shift;.
See the the Moose::Exporter manpage docs for more details on its API.
The purpose of all this code is to provide a Moose-like interface. Here's what it would look like in actual use:
package MyApp::User;
use MyApp::Mooseish;
has_table 'User';
has 'username' => ( is => 'ro' ); has 'password' => ( is => 'ro' );
sub login { ... }
no MyApp::Mooseish;
All of the normal Moose sugar (has(), with(), etc) is available
when you use MyApp::Mooseish.
Providing sugar functions can make your extension look much more Moose-ish. See the Fey::ORM manpage for a more extensive example.
Dave Rolsky <autarch@urth.org>
Copyright 2006-2009 by Infinity Interactive, Inc.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Moose::Cookbook::Extending::Recipe4 - Acting like Moose.pm and providing sugar Moose-style |