On Wed, Mar 25, 2009 at 12:08 AM, Sartak <sar...@gmail.com> wrote:
> The issue I'm running into is make_immutable. Within the
> MooseX::InstanceTracking role (to be applied to Moose::Meta::Class),
> there's no way to hook into the *inlined* constructor.

Dave Rolsky pointed out that I could use MetaRole to achieve the
functionality I need. "use MooseX::InstanceTracking" uses
Moose::Util::MetaRole to give the calling class a role, and its
constructor class a role. The ENTIRE implementation is provided at the
end of this mail.

It doesn't do exactly what I wanted (traits injecting more traits) but
it's good enough.

Shawn


package MooseX::InstanceTracking;
use strict;
use warnings;

use Moose::Exporter;
use MooseX::InstanceTracking::Role::Class;

Moose::Exporter->setup_import_methods();

sub init_meta {
    shift;
    my %p = @_;

    Moose->init_meta(%p);

    return Moose::Util::MetaRole::apply_metaclass_roles(
        for_class  => $p{for_class},
        metaclass_roles => [ 'MooseX::InstanceTracking::Role::Class' ],
        constructor_class_roles => [
'MooseX::InstanceTracking::Role::Constructor' ],
    );
}

Reply via email to