[OGDev] A couple of recent hacks.

Kake L Pugh kake at earth.li
Wed Feb 28 02:25:14 GMT 2007


Oh, I just noticed that the Tube stations thing mentions hacking
around a bug in Wiki::Toolkit::Plugin::Categoriser.  I attach a patch
including a test which exposes the bug, and a fix (it's pretty
simple).  Sorry Dom, wasn't quite sure where Wiki::Toolkit bugreps go
these days.

Kake

-------------- next part --------------
diff -ru Wiki-Toolkit-Plugin-Categoriser-0.04/Changes Wiki-Toolkit-Plugin-Categoriser-0.05/Changes
--- Wiki-Toolkit-Plugin-Categoriser-0.04/Changes	Sat May 13 15:33:34 2006
+++ Wiki-Toolkit-Plugin-Categoriser-0.05/Changes	Wed Feb 28 02:17:23 2007
@@ -1,3 +1,6 @@
+0.05
+        Fix bug - ->categories was picking up out-of-date categories.
+
 0.04    13 May 2006
         Renamed Wiki::Toolkit::Plugin::Categoriser
 
Common subdirectories: Wiki-Toolkit-Plugin-Categoriser-0.04/lib and Wiki-Toolkit-Plugin-Categoriser-0.05/lib
Common subdirectories: Wiki-Toolkit-Plugin-Categoriser-0.04/t and Wiki-Toolkit-Plugin-Categoriser-0.05/t
Common subdirectories: Wiki-Toolkit-Plugin-Categoriser-0.04/lib/Wiki and Wiki-Toolkit-Plugin-Categoriser-0.05/lib/Wiki
Common subdirectories: Wiki-Toolkit-Plugin-Categoriser-0.04/lib/Wiki/Toolkit and Wiki-Toolkit-Plugin-Categoriser-0.05/lib/Wiki/Toolkit
Common subdirectories: Wiki-Toolkit-Plugin-Categoriser-0.04/lib/Wiki/Toolkit/Plugin and Wiki-Toolkit-Plugin-Categoriser-0.05/lib/Wiki/Toolkit/Plugin
diff -ru Wiki-Toolkit-Plugin-Categoriser-0.04/lib/Wiki/Toolkit/Plugin/Categoriser.pm Wiki-Toolkit-Plugin-Categoriser-0.05/lib/Wiki/Toolkit/Plugin/Categoriser.pm
--- Wiki-Toolkit-Plugin-Categoriser-0.04/lib/Wiki/Toolkit/Plugin/Categoriser.pm	Sat May 13 16:03:51 2006
+++ Wiki-Toolkit-Plugin-Categoriser-0.05/lib/Wiki/Toolkit/Plugin/Categoriser.pm	Wed Feb 28 02:16:42 2007
@@ -3,7 +3,7 @@
 use Wiki::Toolkit::Plugin;
 
 use vars qw( $VERSION @ISA );
-$VERSION = '0.04';
+$VERSION = '0.05';
 @ISA = qw( Wiki::Toolkit::Plugin );
 
 =head1 NAME
@@ -124,7 +124,7 @@
 sub categories {
     my ($self, %args) = @_;
     my $dbh = $self->datastore->dbh;
-    my $sth = $dbh->prepare( "SELECT metadata_value FROM node INNER JOIN metadata ON (node_id = id) WHERE name = ? AND metadata_type = 'category'" );
+    my $sth = $dbh->prepare( "SELECT metadata_value FROM node INNER JOIN metadata ON (node.id = metadata.node_id AND node.version = metadata.version) WHERE name = ? AND metadata_type = 'category'" );
     $sth->execute( $args{node} );
     my @categories;
     while ( my ($cat) = $sth->fetchrow_array ) {
diff -ru Wiki-Toolkit-Plugin-Categoriser-0.04/t/categoriser.t Wiki-Toolkit-Plugin-Categoriser-0.05/t/categoriser.t
--- Wiki-Toolkit-Plugin-Categoriser-0.04/t/categoriser.t	Sat May 13 15:30:56 2006
+++ Wiki-Toolkit-Plugin-Categoriser-0.05/t/categoriser.t	Wed Feb 28 02:14:29 2007
@@ -3,7 +3,7 @@
 use Test::More;
 
 my $iterator = Wiki::Toolkit::TestLib->new_wiki_maker;
-plan tests => ( 1 + $iterator->number * 6 );
+plan tests => ( 1 + $iterator->number * 7 );
 
 use_ok( "Wiki::Toolkit::Plugin::Categoriser" );
 
@@ -41,4 +41,15 @@
     my @categories = $categoriser->categories( node => "Calthorpe Arms" );
     is_deeply( [ sort @categories ], [ "Pub Food", "Pubs" ],
                "...->categories returns all categories" );
+
+    # Make sure we only look at current category data.
+    my %node_data = $wiki->retrieve_node( "Calthorpe Arms" );
+    $wiki->write_node( "Calthorpe Arms",
+                       "Oh noes, they stopped doing food!",
+                       $node_data{checksum},
+                       { category => [ "Pubs" ] } )
+      or die "Can't write node";
+    @categories = $categoriser->categories( node => "Calthorpe Arms" );
+    is_deeply( \@categories, [ "Pubs" ],
+               "->categories ignores out-of-date data" );
 }


More information about the OpenGuides-Dev mailing list