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.87';
+$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
-use base 'Moose::Meta::Role::Application';
+use base 'Moose::Meta::Role::Application::ToClass';
+
+__PACKAGE__->meta->add_attribute('rebless_params' => (
+ reader => 'rebless_params',
+ default => sub { {} }
+));
+
+my %ANON_CLASSES;
+
+sub apply {
+ my ($self, $role, $object) = @_;
+
+ my $anon_role_key = (blessed($object) . $role->name);
+
+ my $class;
+ if (exists $ANON_CLASSES{$anon_role_key} && defined $ANON_CLASSES{$anon_role_key}) {
+ $class = $ANON_CLASSES{$anon_role_key};
+ }
+ else {
+ 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, %{$self->rebless_params});
+}
1;
=head1 NAME
-Moose::Meta::Role::Application::ToInstance
+Moose::Meta::Role::Application::ToInstance - Compose a role into an instance
=head1 DESCRIPTION
=item B<meta>
+=item B<apply>
+
+=item B<rebless_params>
+
=back
=head1 BUGS
=head1 COPYRIGHT AND LICENSE
-Copyright 2006, 2007 by Infinity Interactive, Inc.
+Copyright 2006-2009 by Infinity Interactive, Inc.
L<http://www.iinteractive.com>