[Bast-commits] r4702 - in DBIx-Class-Journal/1.000/trunk: lib/DBIx/Class lib/DBIx/Class/Journal lib/DBIx/Class/Schema t/lib/DBICTest

nothingmuch at dev.catalyst.perl.org nothingmuch at dev.catalyst.perl.org
Fri Aug 1 00:23:23 BST 2008


Author: nothingmuch
Date: 2008-08-01 00:23:23 +0100 (Fri, 01 Aug 2008)
New Revision: 4702

Added:
   DBIx-Class-Journal/1.000/trunk/lib/DBIx/Class/Journal/
   DBIx-Class-Journal/1.000/trunk/lib/DBIx/Class/Journal/EvalWrap.pm
Modified:
   DBIx-Class-Journal/1.000/trunk/lib/DBIx/Class/Schema/Journal.pm
   DBIx-Class-Journal/1.000/trunk/t/lib/DBICTest/Schema.pm
Log:
EvalWrap component

Added: DBIx-Class-Journal/1.000/trunk/lib/DBIx/Class/Journal/EvalWrap.pm
===================================================================
--- DBIx-Class-Journal/1.000/trunk/lib/DBIx/Class/Journal/EvalWrap.pm	                        (rev 0)
+++ DBIx-Class-Journal/1.000/trunk/lib/DBIx/Class/Journal/EvalWrap.pm	2008-07-31 23:23:23 UTC (rev 4702)
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+
+package DBIx::Class::Journal::EvalWrap;
+use base qw(DBIx::Class::Journal);
+
+use strict;
+use warnings;
+
+foreach my $method qw(journal_log_update journal_log_insert journal_log_delete) {
+    local $@;
+    eval "sub $method " . ' {
+    my ( $self, @args ) = @_;
+    local $@;
+    eval { $self->next::method(@args) };
+    warn $@ if $@;
+    }; 1' || warn $@;
+}
+
+__PACKAGE__
+
+__END__
+
+=pod
+
+=head1 NAME
+
+DBIx::Class::Journal::EvalWrap - Wrap all journal ops with an eval { }
+
+=head1 SYNOPSIS
+
+    __PACKAGE__->journal_component("Journal::EvalWrap");
+
+=head1 DESCRIPTION
+
+This component is a wrapper for the row methods in L<DBIx:Class::Journal> that
+aides in retrofitting a schema for journaling, by wrapping all the journal CRUD
+operations with a C<local $@; eval { ... }}.
+
+This is desirable if you'd rather lose journal data than create runtime errors
+when retrofitting existing code.
+
+Use with caution.
+
+=cut
+
+

Modified: DBIx-Class-Journal/1.000/trunk/lib/DBIx/Class/Schema/Journal.pm
===================================================================
--- DBIx-Class-Journal/1.000/trunk/lib/DBIx/Class/Schema/Journal.pm	2008-07-31 23:23:11 UTC (rev 4701)
+++ DBIx-Class-Journal/1.000/trunk/lib/DBIx/Class/Schema/Journal.pm	2008-07-31 23:23:23 UTC (rev 4702)
@@ -11,6 +11,7 @@
 __PACKAGE__->mk_classdata('journal_sources'); ## [ source names ]
 __PACKAGE__->mk_classdata('journal_user'); ## [ class, field for user id ]
 __PACKAGE__->mk_classdata('_journal_schema'); ## schema object for journal
+__PACKAGE__->mk_classdata('journal_component');
 __PACKAGE__->mk_classdata('journal_nested_changesets');
 
 use strict;
@@ -59,6 +60,7 @@
 
     $self->_journal_schema($journal_schema);
 
+    my $comp = $self->journal_component || "Journal";
 
     ## Create auditlog+history per table
     my %j_sources = map { $_ => 1 } $self->journal_sources
@@ -69,7 +71,7 @@
     {
         next unless($j_sources{$s_name});
         $self->create_journal_for($s_name);
-        $self->class($s_name)->load_components('Journal');
+        $self->class($s_name)->load_components($comp);
 #        print STDERR "$s_name :", $self->class($s_name), "\n";
     }
 

Modified: DBIx-Class-Journal/1.000/trunk/t/lib/DBICTest/Schema.pm
===================================================================
--- DBIx-Class-Journal/1.000/trunk/t/lib/DBICTest/Schema.pm	2008-07-31 23:23:11 UTC (rev 4701)
+++ DBIx-Class-Journal/1.000/trunk/t/lib/DBICTest/Schema.pm	2008-07-31 23:23:23 UTC (rev 4702)
@@ -5,6 +5,8 @@
 
 __PACKAGE__->load_components(qw/+DBIx::Class::Schema::Journal/);
 
+__PACKAGE__->journal_component("Journal::EvalWrap");
+
 no warnings qw/qw/;
 DBICTest::Schema->load_classes(
 qw/




More information about the Bast-commits mailing list