allow lookup by name as well as ID
Tara L Andrews [Fri, 16 Mar 2012 08:05:25 +0000 (09:05 +0100)]
lib/Text/Tradition/Directory.pm
t/text_tradition_directory.t

index 2fa8fc5..7bfba71 100644 (file)
@@ -131,6 +131,7 @@ is( ref( $nt ), 'Text::Tradition', "Made new tradition" );
                like( $e->message, qr/Cannot directly delete non-Tradition object/, 
                        "Exception has correct message" );
        }
+       
        $f->delete( $uuid );
        ok( !$f->exists( $uuid ), "Object is deleted from DB" );
        ok( !$f->exists( $sid ), "Object stemma also deleted from DB" );
@@ -141,6 +142,10 @@ is( ref( $nt ), 'Text::Tradition', "Made new tradition" );
        my $g = Text::Tradition::Directory->new( 'dsn' => $dsn );
        my $scope = $g->new_scope;
        is( scalar $g->traditionlist, 1, "Now one object in new directory index" );
+       my $ntobj = $g->tradition( 'CX' );
+       my @w1 = sort $ntobj->witnesses;
+       my @w2 = sort( $nt->witnesses );
+       is_deeply( \@w1, \@w2, "Looked up remaining tradition by name" );
 }
 
 =end testing
@@ -221,7 +226,16 @@ sub save {
 sub tradition {
        my( $self, $id ) = @_;
        my $obj = $self->lookup( $id );
-       unless( ref( $obj ) eq 'Text::Tradition' ) {
+       unless( $obj ) {
+               # Try looking up by name.
+               foreach my $item ( $self->traditionlist ) {
+                       if( $item->{'name'} eq $id ) {
+                               $obj = $self->lookup( $item->{'id'} );
+                               last;
+                       }
+               }
+       }
+       if( $obj && ref( $obj ) ne 'Text::Tradition' ) {
                throw( "Retrieved object is a " . ref( $obj ) . ", not a Text::Tradition" );
        }
        return $obj;
index 5ca1a3e..de455ea 100644 (file)
@@ -78,6 +78,7 @@ is( ref( $nt ), 'Text::Tradition', "Made new tradition" );
                like( $e->message, qr/Cannot directly delete non-Tradition object/, 
                        "Exception has correct message" );
        }
+       
        $f->delete( $uuid );
        ok( !$f->exists( $uuid ), "Object is deleted from DB" );
        ok( !$f->exists( $sid ), "Object stemma also deleted from DB" );
@@ -88,6 +89,10 @@ is( ref( $nt ), 'Text::Tradition', "Made new tradition" );
        my $g = Text::Tradition::Directory->new( 'dsn' => $dsn );
        my $scope = $g->new_scope;
        is( scalar $g->traditionlist, 1, "Now one object in new directory index" );
+       my $ntobj = $g->tradition( 'CX' );
+       my @w1 = sort $ntobj->witnesses;
+       my @w2 = sort( $nt->witnesses );
+       is_deeply( \@w1, \@w2, "Looked up remaining tradition by name" );
 }
 }