X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FRole%2FApplication%2FToInstance.pm;h=3165f93f05e365559c27f93536cdf41aaf6f45dc;hb=9e4ed568f2e5c1041e6fea8d0cbde420562ab5df;hp=522d972b89573b4ac9890fee8d3d7f9f3175ca09;hpb=d71ba374b66efd4eeca044f17fabc1b65f0d0221;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Role/Application/ToInstance.pm b/lib/Moose/Meta/Role/Application/ToInstance.pm index 522d972..3165f93 100644 --- a/lib/Moose/Meta/Role/Application/ToInstance.pm +++ b/lib/Moose/Meta/Role/Application/ToInstance.pm @@ -4,16 +4,19 @@ use strict; use warnings; use metaclass; -use Carp 'confess'; -use Scalar::Util 'blessed'; +use Scalar::Util 'blessed'; -use Data::Dumper; - -our $VERSION = '0.01'; +our $VERSION = '0.84'; +$VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; use base 'Moose::Meta::Role::Application::ToClass'; +__PACKAGE__->meta->add_attribute('rebless_params' => ( + reader => 'rebless_params', + default => sub { {} } +)); + my %ANON_CLASSES; sub apply { @@ -26,14 +29,15 @@ sub apply { $class = $ANON_CLASSES{$anon_role_key}; } else { - $class = Moose::Meta::Class->create_anon_class( + my $obj_meta = Class::MOP::class_of($object) || 'Moose::Meta::Class'; + $class = $obj_meta->create_anon_class( superclasses => [ blessed($object) ] ); $ANON_CLASSES{$anon_role_key} = $class; $self->SUPER::apply($role, $class); } - $class->rebless_instance($object); + $class->rebless_instance($object, %{$self->rebless_params}); } 1; @@ -44,7 +48,7 @@ __END__ =head1 NAME -Moose::Meta::Role::Application::ToInstance +Moose::Meta::Role::Application::ToInstance - Compose a role into an instance =head1 DESCRIPTION @@ -58,6 +62,8 @@ Moose::Meta::Role::Application::ToInstance =item B +=item B + =back =head1 BUGS @@ -72,7 +78,7 @@ Stevan Little Estevan@iinteractive.comE =head1 COPYRIGHT AND LICENSE -Copyright 2006-2008 by Infinity Interactive, Inc. +Copyright 2006-2009 by Infinity Interactive, Inc. L