/[Frey]/trunk/lib/Frey/ClassLoader.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/lib/Frey/ClassLoader.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 137 - (show annotations)
Tue Jul 15 18:06:27 2008 UTC (15 years, 9 months ago) by dpavlin
File size: 1629 byte(s)
fixed role introspection and simplify code [0.12]
1 package Frey::ClassLoader;
2 use Moose;
3
4 extends 'Frey';
5
6 use Data::Dump qw/dump/;
7 use File::Find;
8
9 our $package_path;
10 our @classes;
11
12 sub classes {
13 my $self = shift;
14 return @classes if @classes;
15
16 # FIXME there must be better way to do this in Moose style
17 finddepth({ no_chdir => 1, wanted => sub {
18 return unless s/\.pm$//;
19 my @a = split(m!/!,$_);
20 my $package = join('::', @a[ 1 .. $#a ]);
21 warn ">> $_ ",dump( @a ), " >> $package\n" if $self->debug;
22 $package_path->{ $package } = "$_.pm";
23 } }, 'lib');
24 warn "## package_path = ",dump( $package_path ) if $self->debug;
25
26 @classes = sort keys %$package_path;
27 }
28
29 sub package_path {
30 my ( $self, $package ) = @_;
31 $self->classes unless $package_path;
32 confess "can't find path for package $package" unless defined $package_path->{$package};
33 return $package_path->{$package};
34 }
35
36 =head2 load_package
37
38 my ( $class, $meta, $is_role ) = $o->load_package( 'Some::Package' );
39
40 =cut
41
42 sub load_package {
43 my ( $self, $package ) = @_;
44
45 Class::MOP::load_class($package);
46
47 if ( ! $package->can('meta') ) {
48 my $class = Moose::Meta::Class->create_anon_class;
49 warn "package $package isn't Moose, faking anon class";
50 return ( $class, $class->meta, 0 );
51 }
52
53 my $is_role = 0;
54 my $class;
55
56 if($package->meta->isa('Moose::Meta::Role')){
57 $is_role = 1;
58 $class = Moose::Meta::Class->create_anon_class;
59 $package->meta->apply( $class );
60 die $@ if $@;
61 } else {
62 $class = $package->meta;
63 }
64 return ( $class, $is_role );
65 }
66
67 sub load_all_classes {
68 my $self = shift;
69 my $loaded = 0;
70 foreach ( $self->classes ) {
71 Class::MOP::load_class($_);
72 $loaded++;
73 }
74 $loaded;
75 }
76
77 1;

  ViewVC Help
Powered by ViewVC 1.1.26