From 2016f2b13cfb48bea6d6d0498fe2a4492b491bf2 Mon Sep 17 00:00:00 2001 From: Chip Black Date: Wed, 29 May 2013 00:04:37 -0500 Subject: [PATCH] Basic OO functions for perl lib --- lib/perl/Blerg-Database/lib/Blerg/Database.pm | 51 ++++++++++++++++++- lib/perl/Blerg-Database/t/Blerg-Database.t | 11 +++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/lib/perl/Blerg-Database/lib/Blerg/Database.pm b/lib/perl/Blerg-Database/lib/Blerg/Database.pm index 74481d2..3da5ad3 100644 --- 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, Echip@slackware.lanE +Chip Black, Ebytex64@bytex64.netE =head1 COPYRIGHT AND LICENSE diff --git a/lib/perl/Blerg-Database/t/Blerg-Database.t b/lib/perl/Blerg-Database/t/Blerg-Database.t index fba8885..32cff92 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 => 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 ); + -- 2.25.1