[Dbix-class] [patch] additional syntax for Schema->load_classes
Hartmaier Alexander
Alexander.Hartmaier at t-systems.at
Wed Nov 16 20:47:23 CET 2005
svn diff
*snip*
Index: t/lib/DBICTest/Schema.pm
===================================================================
--- t/lib/DBICTest/Schema.pm (revision 305)
+++ t/lib/DBICTest/Schema.pm (working copy)
@@ -2,7 +2,24 @@
use base qw/DBIx::Class::Schema/;
-__PACKAGE__->load_classes(qw/
- Artist CD Track Tag LinerNotes OneKey TwoKeys FourKeys SelfRef SelfRefAlias
/);
+__PACKAGE__->load_classes(
+ { 'DBICTest::Schema' => [qw/
+ Artist
+ CD
+ Track
+ #TestDummy
+ Tag
+ LinerNotes
+ /]},
+ qw/
+ #TestDummy_first
+ OneKey
+ TwoKeys
+ FourKeys
+ #TestDummy_middle
+ SelfRef
+ SelfRefAlias
+ #TestDummy_last
+/);
1;
Index: lib/DBIx/Class/Schema.pm
===================================================================
--- lib/DBIx/Class/Schema.pm (revision 305)
+++ lib/DBIx/Class/Schema.pm (working copy)
@@ -85,31 +85,41 @@
return values %{shift->class_registrations};
}
-=item load_classes [<classes>}
+=item load_classes [<classes>], {<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 '#'.
+
=cut
sub load_classes {
my $class = shift;
- my @comp = grep { $_ !~ /^#/ } @_;
- unless (@comp) {
+ my %comp;
+ if (@_) {
+ %comp = %{+shift} if ref $_[0] eq 'HASH';
+ $comp{$class} = [ grep { $_ !~ /^#/ } @_ ];
+ } else {
eval "require Module::Find;";
$class->throw("No arguments to load_classes and couldn't load".
" Module::Find ($@)") if $@;
- @comp = map { substr $_, length "${class}::" }
+ my @comp = map { substr $_, length "${class}::" }
Module::Find::findallmod($class);
+ $comp{$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 %comp) {
+ foreach my $comp (@{$comp{$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);
+ }
}
}
+
=item compose_connection <target> <@db_info>
This is the most important method in this class. it takes a target namespace,
*snip*
With best regards
Alexander Hartmaier
T-Systems Austria GesmbH
Rennweg 97-99
A-1030 Vienna
phone: +43-(0)57057-4320
mobile: +43-(0)676-8642-4320
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 5544 bytes
Desc: not available
Url : http://lists.rawmode.org/pipermail/dbix-class/attachments/20051116/1af40689/smime-0001.bin
More information about the Dbix-class
mailing list