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 |
|
|
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); |
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; |