--- trunk/lib/Frey/ClassLoader.pm 2008/07/11 19:19:42 100 +++ trunk/lib/Frey/ClassLoader.pm 2008/07/11 22:54:42 101 @@ -6,25 +6,30 @@ use Data::Dump qw/dump/; use File::Find; -has 'classes' => ( - is => 'ro', -# isa => 'HashRef[Str]', - default => sub { - my $self = shift; - # FIXME there must be better way to do this in Moose style - my $classes; - finddepth({ no_chdir => 1, wanted => sub { - return unless s/\.pm$//; - my @a = split(m!/!,$_); - my $package = join('::', @a[ 1 .. $#a ]); - warn ">> $_ ",dump( @a ), " >> $package\n" if $self->debug; - push @$classes, { $package => "$_.pm" }; - } }, 'lib'); - warn "## classes = ",dump( $classes ) if $self->debug; - $classes; - }, - lazy => 1, -); +our $package_path; + +sub classes { + my $self = shift; + return keys %$package_path if $package_path; + + # FIXME there must be better way to do this in Moose style + finddepth({ no_chdir => 1, wanted => sub { + return unless s/\.pm$//; + my @a = split(m!/!,$_); + my $package = join('::', @a[ 1 .. $#a ]); + warn ">> $_ ",dump( @a ), " >> $package\n" if $self->debug; + $package_path->{ $package } = "$_.pm"; + } }, 'lib'); + warn "## package_path = ",dump( $package_path ) if $self->debug; + + return keys %$package_path; +} + +sub package_path { + my ( $self, $package ) = @_; + die "can't find path for package $package" unless defined $package_path->{$package}; + return $package_path->{$package}; +} =head2 load_package @@ -50,6 +55,12 @@ #confess "Failed to load package ${package} $@" if $@; Class::MOP::load_class($package); + if ( ! $package->can('meta') ) { + my $class = Moose::Meta::Class->create_anon_class; + warn "package $package doesn't have meta faking anon class"; + return ( $class, $class->meta, 0 ); + } + my $meta = $package->meta; my ($class, $is_role); @@ -65,5 +76,14 @@ return ( $class, $meta, $is_role ); } +sub load_all_classes { + my $self = shift; + my $loaded = 0; + foreach ( $self->classes ) { + Class::MOP::load_class($_); + $loaded++; + } + $loaded; +} 1;