commit:2016f2b13cfb48bea6d6d0498fe2a4492b491bf2
author:Chip Black
committer:Chip Black
date:Wed May 29 00:04:37 2013 -0500
parents:3d76b7537d7b50ca8ccf83d4ed8e2dc93a871ddb
Basic OO functions for perl lib
diff --git a/lib/perl/Blerg-Database/lib/Blerg/Database.pm b/lib/perl/Blerg-Database/lib/Blerg/Database.pm
line changes: +50/-1
index 74481d2..3da5ad3
--- a/lib/perl/Blerg-Database/lib/Blerg/Database.pm
+++ b/lib/perl/Blerg-Database/lib/Blerg/Database.pm
@@ -57,6 +57,55 @@ XSLoader::load('Blerg::Database', $VERSION);
 
 # Preloaded methods go here.
 
+sub open {
+    my ($class, $name) = @_;
+    my $ptr = Blerg::Database::_open($name);
+    my $obj = {
+        ptr => $ptr
+    };
+    return bless $obj, $class;
+}
+
+sub open_existing {
+    my ($class, $name) = @_;
+
+    if (Blerg::Database::exists($name)) {
+        return Blerg::Database::open($name);
+    }
+    return undef;
+}
+
+sub _ensure_pointer {
+    my ($obj) = @_;
+    if (!defined $obj->{ptr}) {
+        croak "Attempted to use closed Blerg::Database";
+    }
+}
+
+sub close {
+    my ($obj) = @_;
+    $obj->_ensure_pointer;
+    Blerg::Database::_close($obj->{ptr});
+    delete $obj->{ptr};
+}
+
+DESTROY {
+    my ($obj) = @_;
+    $obj->close;
+}
+
+sub store {
+    my ($obj, $data) = @_;
+    $obj->_ensure_pointer;
+    return Blerg::Database::_store($obj->{ptr}, $data);
+}
+
+sub fetch {
+    my ($obj, $record) = @_;
+    $obj->_ensure_pointer;
+    return Blerg::Database::_fetch($obj->{ptr}, $record);
+}
+
 # Autoload methods go after =cut, and are processed by the autosplit program.
 
 1;
@@ -118,7 +167,7 @@ If you have a web site set up for your module, mention it here.
 
 =head1 AUTHOR
 
-Chip Black, E<lt>chip@slackware.lanE<gt>
+Chip Black, E<lt>bytex64@bytex64.netE<gt>
 
 =head1 COPYRIGHT AND LICENSE
 

diff --git a/lib/perl/Blerg-Database/t/Blerg-Database.t b/lib/perl/Blerg-Database/t/Blerg-Database.t
line changes: +10/-1
index fba8885..32cff92
--- 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 => 13;
+use Test::More tests => 18;
 BEGIN { use_ok('Blerg::Database') };
 
 #########################
@@ -70,3 +70,12 @@ ok( Blerg::Database::_close($ptr) );
 # Test existence
 ok( Blerg::Database::exists($test_user) );
 
+# Perl OO interface
+my $blerg = Blerg::Database->open_existing('nonexistent');
+ok( not defined $blerg );
+$blerg = Blerg::Database->open($test_user);
+ok( defined $blerg );
+ok( $blerg->fetch(0) eq $data );
+ok( $blerg->store($data) == 4 );
+ok( $blerg->fetch(4) eq $data );
+