changing the default base class

[email protected] (Jonathan Swartz)
Newsgroups perl.moose
Message-ID <[email protected]>
I have a default base class, call it My::Moose::Object, that inherits  
from Moose::Object and adds a few common methods for our application.  
I want all the objects in my application to inherit from  
My::Moose::Object.

In a Moose-ish way, I'd like to create a My::Moose that acts like  
Moose except that the default superclass is My::Moose::Object. Then  
my classes can be defined like:

     package My::Person;
     use My::Moose;    # automatically sets superclass to  
My::Moose::Object, instead of Moose::Object

My::Moose would then be a good place to insert other application-wide  
Moose changes later on.

But I can't figure out how to implement this. Moose.pm performs all  
its operations on caller(); so as soon as I create a dummy My::Moose:

    package My::Moose;
    use base qw(Moose);

    sub import
    {
        my ($class) = @_;
        $class->SUPER::import();
        # Do app-specific things here
    }

    1;

then My::Person doesn't work, because Moose::import() thinks the  
caller is My::Moose.

One solution is for Moose to provide an import_to_class, just like  
import but taking a classname.

Or perhaps I could use Moose::Policy for this. But then each class  
would read

     package My::Person;
     use Moose::Policy 'My::Moose::Policy';
     use Moose;

Yuck. It seems like a significant blow to the syntactic single-use- 
line beauty of Moose, and a violation of DRY.

Maybe I'm just saying that I wish project-wide Policies could be set  
with a little less syntax, and less room for user error. It seems  
like it shouldn't be so hard to make this possible.

Jon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.