--- trunk/lib/Frey/ClassLoader.pm 2008/11/18 13:52:26 409 +++ trunk/lib/Frey/ClassLoader.pm 2008/11/19 00:40:03 431 @@ -74,7 +74,7 @@ =head2 class_meta - my ( $meta, $is_role ) = $o->class_meta( 'Some::Class' ); + my ( $meta, $is_role, $instance ) = $o->class_meta( 'Some::Class' ); =cut @@ -86,26 +86,24 @@ $self->load_class($class); - if ( ! $class->can('meta') ) { - my $instance = Moose::Meta::Class->create_anon_class; - warn "class $class isn't Moose, faking anon class"; - return ( $instance, 0 ); - } - my $meta; my $is_role = 0; my $instance; - if($class->meta->isa('Moose::Meta::Role')){ - $is_role = 1; + if ( ! $class->can('meta') ) { $instance = Moose::Meta::Class->create_anon_class; + warn "class $class isn't Moose, faking anon class" if $self->debug; + $meta = $instance->meta; + } elsif( $class->meta->isa('Moose::Meta::Role') ) { + $is_role = 1; + $instance = Frey->new; + warn "# apply $class on $instance"; $class->meta->apply( $instance ); - $meta = $class->meta; - die $@ if $@; + $meta = $instance->meta; } else { $meta = $class->meta; } - return ( $meta, $is_role ); + return ( $meta, $is_role, $instance ); } sub load_class { @@ -140,7 +138,7 @@ confess "need class" unless $class; if ( ! $class->can('meta') ) { - warn "$class doesn't have meta (isn't Moose class)"; + warn "$class doesn't have meta (isn't Moose class)" if $self->debug; return; } my $meta = $class->meta;