Merge 'trunk' into 'DBIx-Class-current'
Matt S Trout [Sun, 16 Apr 2006 21:22:47 +0000 (21:22 +0000)]
r9637@obrien (orig r1450):  castaway | 2006-04-14 15:08:57 +0100
oops, bogus many_to_many example in pod

r9641@obrien (orig r1453):  matthewt | 2006-04-15 22:55:47 +0100
Fixed typo in Relationship POD
r9644@obrien (orig r1455):  matthewt | 2006-04-16 20:21:28 +0100
disabled ->resultset caching
r9645@obrien (orig r1456):  phaylon | 2006-04-16 21:57:56 +0100
inject_base filters out double entries

Changes
lib/DBIx/Class/Componentised.pm
lib/DBIx/Class/Relationship.pm
lib/DBIx/Class/ResultSource.pm
t/05components.t

diff --git a/Changes b/Changes
index aac5233..948ae23 100644 (file)
--- a/Changes
+++ b/Changes
@@ -6,6 +6,7 @@ Revision history for DBIx::Class
        - load_classes now uses source_name and sets it if necessary
 
 0.06002
+        - nuke ResultSource caching of ->resultset for consistency reasons
         - fix for -and conditions when updating or deleting on a ResultSet
 
 0.06001 2006-04-08 21:48:43
index a8a17c3..7e62354 100644 (file)
@@ -10,7 +10,11 @@ sub inject_base {
   my ($class, $target, @to_inject) = @_;
   {
     no strict 'refs';
-    unshift(@{"${target}::ISA"}, grep { $target ne $_ && !$target->isa($_)} @to_inject);
+    my %seen;
+    unshift( @{"${target}::ISA"},
+        grep { !$seen{ $_ }++ && $target ne $_ && !$target->isa($_) }
+            @to_inject
+    );
   }
 
   # Yes, this is hack. But it *does* work. Please don't submit tickets about
index 77bfa8c..44ed65b 100644 (file)
@@ -31,7 +31,7 @@ DBIx::Class::Relationship - Inter-table relationships
 
   $schema->resultset('Actor')->roles();
   $schema->resultset('Role')->search_related('actors', { Name => 'Fred' });
-  $schema->resultset('ActorRole')->add_to_role({ Name => 'Sherlock Holmes'});
+  $schema->resultset('ActorRole')->add_to_roles({ Name => 'Sherlock Holmes'});
 
 See L<DBIx::Class::Manual::Cookbook> for more.
 
@@ -184,7 +184,7 @@ left join.
                                             'My::DBIC::Schema::Actor' );
 
   My::DBIC::Schema::Actor->many_to_many( roles => 'actor_roles',
-                                         'My::DBIC::Schema::Roles' );
+                                         'role' );
 
   ...
 
index 1caf03c..ee96129 100644 (file)
@@ -846,9 +846,14 @@ sub resultset {
     'resultset does not take any arguments. If you want another resultset, '.
     'call it on the schema instead.'
   ) if scalar @_;
-  return $self->{_resultset}
-    if ref $self->{_resultset} eq $self->resultset_class;
-  return $self->{_resultset} = $self->resultset_class->new(
+
+  # disabled until we can figure out a way to do it without consistency issues
+  #
+  #return $self->{_resultset}
+  #  if ref $self->{_resultset} eq $self->resultset_class;
+  #return $self->{_resultset} =
+
+  return $self->resultset_class->new(
     $self, $self->{resultset_attributes}
   );
 }
index 57bebd5..fd0742f 100644 (file)
@@ -7,8 +7,27 @@ use Test::More;
 use lib qw(t/lib);
 use DBICTest::ForeignComponent;
 
-plan tests => 1;
+plan tests => 2;
 
 #   Tests if foreign component was loaded by calling foreign's method
 ok( DBICTest::ForeignComponent->foreign_test_method, 'foreign component' );
 
+#   Test for inject_base to filter out duplicates
+{   package DBICTest::_InjectBaseTest;
+    use base qw/ DBIx::Class /;
+}
+DBICTest::_InjectBaseTest->inject_base( 'DBICTest::_InjectBaseTest', qw/
+    DBICTest::_InjectBaseTest::A
+    DBICTest::_InjectBaseTest::B
+    DBICTest::_InjectBaseTest::B
+    DBICTest::_InjectBaseTest::C
+/);
+is_deeply( \@DBICTest::_InjectBaseTest::ISA,
+    [qw/
+        DBICTest::_InjectBaseTest::A
+        DBICTest::_InjectBaseTest::B
+        DBICTest::_InjectBaseTest::C
+        DBIx::Class
+    /],
+    'inject_base filters duplicates'
+);