--- trunk/lib/Frey/ClassLoader.pm 2008/11/28 13:18:18 582 +++ trunk/lib/Frey/ClassLoader.pm 2008/12/02 01:06:46 668 @@ -210,28 +210,44 @@ } } +our $syntax_checked_last; + sub new_frey_class { my ( $self, $class, $params ) = @_; - my $instance = $class->new( %$params ); + my $instance; + + my $path = $self->class_path( $class ); + if ( $syntax_checked_last->{$class} != -C $path ) { + my $syntax = `perl -Ilib -wc $path 2>&1`; + warn "# syntax: $syntax"; + $syntax_checked_last->{$class} = -C $class; + } + + if ( $class->meta->isa('Moose::Meta::Role') ) { + $instance = Frey->new; + Frey::Web->meta->apply( $instance ); + warn "new_frey_class $class role with Frey::Web"; + } else { + $params->{request_url} = $self->request_url; + $instance = $class->new( %$params ) or confess "can't $class->new".dump( %$params ); + warn "new_frey_class $class"; + } + if ( $instance->can('data') && ! $instance->can('as_data') ) { Frey::Role::as_data->meta->apply( $instance ); - $self->TODO("apply as_data role to $class"); + warn "# apply as_data role to $class"; } if ( $instance->can('sponge') && ! $instance->can('as_sponge') ) { Frey::Role::as_sponge->meta->apply( $instance ); - $self->TODO("apply as_sponge role to $class"); + warn "# apply as_sponge role to $class"; } if ( ! $instance->can('add_status') ) { Frey::Web->meta->apply( $instance ); - $self->TODO("apply Frey::Web role to $class"); + warn "# apply Frey::Web role to $class"; } - if ( $self->can('add_status') ) { - $self->add_status({ $class => $params }); - } else { - warn "# class $self can't add_status"; - } + $self->add_status({ $class => $params }); return $instance; }