/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 137 - (hide 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 dpavlin 100 package Frey::ClassLoader;
2     use Moose;
3    
4     extends 'Frey';
5    
6     use Data::Dump qw/dump/;
7     use File::Find;
8    
9 dpavlin 101 our $package_path;
10 dpavlin 112 our @classes;
11 dpavlin 100
12 dpavlin 101 sub classes {
13     my $self = shift;
14 dpavlin 112 return @classes if @classes;
15 dpavlin 101
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 dpavlin 112 @classes = sort keys %$package_path;
27 dpavlin 101 }
28    
29     sub package_path {
30     my ( $self, $package ) = @_;
31 dpavlin 125 $self->classes unless $package_path;
32     confess "can't find path for package $package" unless defined $package_path->{$package};
33 dpavlin 101 return $package_path->{$package};
34     }
35    
36 dpavlin 100 =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 dpavlin 101 if ( ! $package->can('meta') ) {
48     my $class = Moose::Meta::Class->create_anon_class;
49 dpavlin 137 warn "package $package isn't Moose, faking anon class";
50 dpavlin 101 return ( $class, $class->meta, 0 );
51     }
52    
53 dpavlin 137 my $is_role = 0;
54     my $class;
55 dpavlin 100
56     if($package->meta->isa('Moose::Meta::Role')){
57     $is_role = 1;
58     $class = Moose::Meta::Class->create_anon_class;
59 dpavlin 137 $package->meta->apply( $class );
60     die $@ if $@;
61 dpavlin 100 } else {
62 dpavlin 137 $class = $package->meta;
63 dpavlin 100 }
64 dpavlin 137 return ( $class, $is_role );
65 dpavlin 100 }
66    
67 dpavlin 101 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 dpavlin 100
77     1;

  ViewVC Help
Powered by ViewVC 1.1.26