commit:9777ec792051ef0e7c3e9eec300a15233077e1a8
author:Chip Black
committer:Chip Black
date:Fri Nov 15 21:29:07 2013 -0600
parents:681f470b41ea3674089425b5227a5b0b76291118
Fix OO-style subscription

Also fix warning from autocleanup when you've already closed a
Blerg::Database.
diff --git a/lib/perl/Blerg-Database/Database.xs b/lib/perl/Blerg-Database/Database.xs
line changes: +1/-1
index 1ad9fa6..df1c463
--- a/lib/perl/Blerg-Database/Database.xs
+++ b/lib/perl/Blerg-Database/Database.xs
@@ -146,7 +146,7 @@ int subscription_remove(const char *from, const char *to)
     OUTPUT:
         RETVAL
 
-void subscription_list(const char *author, const char *str_offset, int direction)
+void _subscription_list(const char *author, const char *str_offset, int direction)
     INIT:
         HV *tmp;
         struct blergref *list;

diff --git a/lib/perl/Blerg-Database/lib/Blerg/Database.pm b/lib/perl/Blerg-Database/lib/Blerg/Database.pm
line changes: +6/-2
index 823dc6a..b05c7f9
--- a/lib/perl/Blerg-Database/lib/Blerg/Database.pm
+++ b/lib/perl/Blerg-Database/lib/Blerg/Database.pm
@@ -85,7 +85,10 @@ sub _ensure_pointer {
 
 sub close {
     my ($obj) = @_;
-    $obj->_ensure_pointer;
+    if (!(defined $obj && defined $obj->{ptr})) {
+        # Welp, nothing to do here!
+        return;
+    }
     Blerg::Database::_close($obj->{ptr});
     delete $obj->{ptr};
 }
@@ -115,7 +118,8 @@ sub get_subscription_mark {
 
 sub subscription_list {
     my ($obj) = @_;
-    return Blerg::Database::subscription_list($obj->{name});
+    $obj->_ensure_pointer;
+    return Blerg::Database::_subscription_list($obj->{name}, 0, 1);
 }
 
 sub mute {

diff --git a/lib/perl/Blerg-Database/t/Blerg-Database.t b/lib/perl/Blerg-Database/t/Blerg-Database.t
line changes: +14/-2
index 74b5e16..4208375
--- a/lib/perl/Blerg-Database/t/Blerg-Database.t
+++ b/lib/perl/Blerg-Database/t/Blerg-Database.t
@@ -9,7 +9,7 @@ use File::Path qw/remove_tree/;
 use strict;
 use warnings;
 
-use Test::More tests => 30;
+use Test::More tests => 34;
 BEGIN { use_ok('Blerg::Database') };
 
 #########################
@@ -58,7 +58,7 @@ $ptra = Blerg::Database::_open("a");
 $ptrb = Blerg::Database::_open("b");
 ok( Blerg::Database::subscription_add("a", "b") == 1 );
 Blerg::Database::_store($ptrb, "Hello, A!");
-@list = Blerg::Database::subscription_list("a", 0, 1);
+@list = Blerg::Database::_subscription_list("a", 0, 1);
 ok( @list == 1 );
 ok( $list[0]->{author} eq 'b' );
 ok( $list[0]->{record} == 0 );
@@ -109,6 +109,18 @@ ok( $blerg->fetch(0) eq $data );
 ok( $blerg->store($data) == $n + 1 );
 $n++;
 ok( $blerg->fetch($n) eq $data );
+$blerg->close;
+
+# Subscription OO-style
+$ptra = Blerg::Database->open_existing('a');
+$ptrb = Blerg::Database->open_existing('b');
+@list = $ptra->subscription_list;
+ok( @list == 1 );
+ok( $list[0]->{author} eq 'b' );
+ok( $list[0]->{record} == 0 );
+ok( $ptrb->fetch($list[0]->{record}) eq 'Hello, A!' );
+$ptrb->close;
+$ptra->close;
 
 END {
 	chdir;