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' ], ); }