Renamed DBIx::Class::PK's retrieve() as find()
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Schema.pm
index c402eff..3a08e5c 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 use base qw/Class::Data::Inheritable/;
 use DBIx::Class;
 
-__PACKAGE__->mk_classdata('_class_registrations' => {});
+__PACKAGE__->mk_classdata('class_registrations' => {});
 
 =head1 NAME
 
@@ -39,7 +39,7 @@ DBIx::Class::Schema - composable schemas
 
   then in app code
 
-  my @obj = My::DB::Foo->retrieve_all; # My::DB::Foo isa My::Schema::Foo My::DB
+  my @obj = My::DB::Foo->search({}); # My::DB::Foo isa My::Schema::Foo My::DB
 
 =head1 DESCRIPTION
 
@@ -51,9 +51,13 @@ DBIx::Class::Schema - composable schemas
 
 sub register_class {
   my ($class, $name, $to_register) = @_;
-  my %reg = %{$class->_class_registrations};
+  my %reg = %{$class->class_registrations};
   $reg{$name} = $to_register;
-  $class->_class_registrations(\%reg);
+  $class->class_registrations(\%reg);
+}
+
+sub registered_classes {
+  return values %{shift->class_registrations};
 }
 
 sub load_classes {
@@ -69,19 +73,26 @@ sub load_classes {
 
 sub compose_connection {
   my ($class, $target, @info) = @_;
-  {
-    no strict 'refs';
-    unshift(@{"${target}::ISA"}, 'DBIx::Class');
+  $class->setup_connection_class($target, @info);
+  my %reg = %{ $class->class_registrations };
+  while (my ($comp, $comp_class) = each %reg) {
+    my $target_class = "${target}::${comp}";
+    $class->inject_base($target_class, $comp_class, $target);
   }
+}
+
+sub setup_connection_class {
+  my ($class, $target, @info) = @_;
+  $class->inject_base($target => 'DBIx::Class');
   $target->load_components('DB');
   $target->connection(@info);
-  my %reg = %{ $class->_class_registrations };
-  while (my ($comp, $comp_class) = each %reg) {
-    my $target_class = "${target}::${comp}";
-    {
-      no strict 'refs';
-      unshift(@{"${target_class}::ISA"}, $comp_class, $target);
-    }
+}
+
+sub inject_base {
+  my ($class, $target, @to_inject) = @_;
+  {
+    no strict 'refs';
+    unshift(@{"${target}::ISA"}, @to_inject);
   }
 }