/[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 125 by dpavlin, Mon Jul 14 23:12:07 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            $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  =head2 load_package
37    
# Line 50  sub load_package { Line 57  sub load_package {
57          #confess "Failed to load package ${package} $@" if $@;          #confess "Failed to load package ${package} $@" if $@;
58          Class::MOP::load_class($package);          Class::MOP::load_class($package);
59    
60            if ( ! $package->can('meta') ) {
61                    my $class = Moose::Meta::Class->create_anon_class;
62                    warn "package $package doesn't have meta faking anon class";
63                    return ( $class, $class->meta, 0 );
64            }
65    
66          my $meta = $package->meta;          my $meta = $package->meta;
67    
68          my ($class, $is_role);          my ($class, $is_role);
# Line 65  sub load_package { Line 78  sub load_package {
78          return ( $class, $meta, $is_role );          return ( $class, $meta, $is_role );
79  }  }
80    
81    sub load_all_classes {
82            my $self = shift;
83            my $loaded = 0;
84            foreach ( $self->classes ) {
85                    Class::MOP::load_class($_);
86                    $loaded++;
87            }
88            $loaded;
89    }
90    
91  1;  1;

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

  ViewVC Help
Powered by ViewVC 1.1.26