From 9777ec792051ef0e7c3e9eec300a15233077e1a8 Mon Sep 17 00:00:00 2001 From: Chip Black Date: Fri, 15 Nov 2013 21:29:07 -0600 Subject: [PATCH] Fix OO-style subscription Also fix warning from autocleanup when you've already closed a Blerg::Database. --- lib/perl/Blerg-Database/Database.xs | 2 +- lib/perl/Blerg-Database/lib/Blerg/Database.pm | 8 ++++++-- lib/perl/Blerg-Database/t/Blerg-Database.t | 16 ++++++++++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/perl/Blerg-Database/Database.xs b/lib/perl/Blerg-Database/Database.xs index 1ad9fa6..df1c463 100644 --- 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 index 823dc6a..b05c7f9 100644 --- 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 index 74b5e16..4208375 100644 --- 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; -- 2.25.1