[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