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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 100 by dpavlin, Fri Jul 11 19:19:42 2008 UTC revision 112 by dpavlin, Sun Jul 13 16:54:13 2008 UTC
# Line 6  extends 'Frey'; Line 6  extends 'Frey';
6  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
7  use File::Find;  use File::Find;
8    
9  has 'classes' => (  our $package_path;
10          is => 'ro',  our @classes;
11  #       isa => 'HashRef[Str]',  
12          default => sub {  sub classes {
13                  my $self = shift;          my $self = shift;
14                  # FIXME there must be better way to do this in Moose style          return @classes if @classes;
15                  my $classes;  
16                  finddepth({ no_chdir => 1, wanted => sub {          # FIXME there must be better way to do this in Moose style
17                          return unless s/\.pm$//;          finddepth({ no_chdir => 1, wanted => sub {
18                          my @a = split(m!/!,$_);                  return unless s/\.pm$//;
19                          my $package = join('::', @a[ 1 .. $#a ]);                  my @a = split(m!/!,$_);
20                          warn ">> $_ ",dump( @a ), " >> $package\n" if $self->debug;                  my $package = join('::', @a[ 1 .. $#a ]);
21                          push @$classes, { $package => "$_.pm" };                  warn ">> $_ ",dump( @a ), " >> $package\n" if $self->debug;
22                  } }, 'lib');                  $package_path->{ $package } = "$_.pm";
23                  warn "## classes = ",dump( $classes ) if $self->debug;          } }, 'lib');
24                  $classes;          warn "## package_path = ",dump( $package_path ) if $self->debug;
25          },  
26          lazy => 1,          @classes = sort keys %$package_path;
27  );  }
28    
29    sub package_path {
30            my ( $self, $package ) = @_;
31            die "can't find path for package $package" unless defined $package_path->{$package};
32            return $package_path->{$package};
33    }
34    
35  =head2 load_package  =head2 load_package
36    
# Line 50  sub load_package { Line 56  sub load_package {
56          #confess "Failed to load package ${package} $@" if $@;          #confess "Failed to load package ${package} $@" if $@;
57          Class::MOP::load_class($package);          Class::MOP::load_class($package);
58    
59            if ( ! $package->can('meta') ) {
60                    my $class = Moose::Meta::Class->create_anon_class;
61                    warn "package $package doesn't have meta faking anon class";
62                    return ( $class, $class->meta, 0 );
63            }
64    
65          my $meta = $package->meta;          my $meta = $package->meta;
66    
67          my ($class, $is_role);          my ($class, $is_role);
# Line 65  sub load_package { Line 77  sub load_package {
77          return ( $class, $meta, $is_role );          return ( $class, $meta, $is_role );
78  }  }
79    
80    sub load_all_classes {
81            my $self = shift;
82            my $loaded = 0;
83            foreach ( $self->classes ) {
84                    Class::MOP::load_class($_);
85                    $loaded++;
86            }
87            $loaded;
88    }
89    
90  1;  1;

Legend:
Removed from v.100  
changed lines
  Added in v.112

  ViewVC Help
Powered by ViewVC 1.1.26