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

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

  ViewVC Help
Powered by ViewVC 1.1.26