use strict;
use warnings;
+use DBIx::Class::DB;
-use base qw/Class::Data::Inheritable/;
use base qw/DBIx::Class/;
-__PACKAGE__->load_components(qw/Exception Componentised/);
+__PACKAGE__->load_components(qw/Exception/);
__PACKAGE__->mk_classdata('class_registrations' => {});
=head1 NAME
return values %{shift->class_registrations};
}
-=item load_classes [<classes>}
+=item load_classes [<classes>, (<class>, <class>), {<namespace> => [<classes>]}]
Uses L<Module::Find> to find all classes under the database class' namespace,
or uses the classes you select. Then it loads the component (using L<use>),
and registers them (using B<register_class>);
+It is possible to comment out classes with a leading '#', but note that perl
+will think it's a mistake (trying to use a comment in a qw list) so you'll
+need to add "no warnings 'qw';" before your load_classes call.
+
=cut
sub load_classes {
- my $class = shift;
- my @comp = grep { $_ !~ /^#/ } @_;
- unless (@comp) {
+ my ($class, @params) = @_;
+
+ my %comps_for;
+
+ if (@params) {
+ foreach my $param (@params) {
+ if (ref $param eq 'ARRAY') {
+ # filter out commented entries
+ my @modules = grep { $_ !~ /^#/ } @$param;
+
+ push (@{$comps_for{$class}}, @modules);
+ }
+ elsif (ref $param eq 'HASH') {
+ # more than one namespace possible
+ for my $comp ( keys %$param ) {
+ # filter out commented entries
+ my @modules = grep { $_ !~ /^#/ } @{$param->{$comp}};
+
+ push (@{$comps_for{$comp}}, @modules);
+ }
+ }
+ else {
+ # filter out commented entries
+ push (@{$comps_for{$class}}, $param) if $param !~ /^#/;
+ }
+ }
+ } else {
eval "require Module::Find;";
$class->throw("No arguments to load_classes and couldn't load".
" Module::Find ($@)") if $@;
- @comp = map { substr $_, length "${class}::" }
- Module::Find::findallmod($class);
+ my @comp = map { substr $_, length "${class}::" } Module::Find::findallmod($class);
+ $comps_for{$class} = \@comp;
}
- foreach my $comp (@comp) {
- my $comp_class = "${class}::${comp}";
- eval "use $comp_class"; # If it fails, assume the user fixed it
- $class->register_class($comp => $comp_class);
+
+ foreach my $prefix (keys %comps_for) {
+ foreach my $comp (@{$comps_for{$prefix}||[]}) {
+ my $comp_class = "${prefix}::${comp}";
+ print "$comp_class\n";
+ eval "use $comp_class"; # If it fails, assume the user fixed it
+ $class->register_class($comp => $comp_class);
+ }
}
}
my %map;
while (my ($comp, $comp_class) = each %reg) {
my $target_class = "${target}::${comp}";
- $class->inject_base($target_class, $conn_class, $comp_class);
+ $class->inject_base($target_class, $comp_class, $conn_class);
$target_class->table($comp_class->table);
@map{$comp, $comp_class} = ($target_class, $target_class);
}
sub setup_connection_class {
my ($class, $target, @info) = @_;
- $class->inject_base($target => 'DBIx::Class');
- $target->load_components('DB');
+ $class->inject_base($target => 'DBIx::Class::DB');
+ #$target->load_components('DB');
$target->connection(@info);
}