DBIx-Class-AuditAny
view release on metacpan or search on metacpan
lib/DBIx/Class/AuditAny.pm view on Meta::CPAN
}
# factory-like helper:
sub _new_change_context {
my $self = shift;
my $class = $self->change_context_class;
return $class->new(@_);
}
1;
__END__
=head1 NAME
DBIx::Class::AuditAny - Flexible change tracking framework for L<DBIx::Class>
=begin HTML
<a href='https://coveralls.io/r/vanstyn/DBIx-Class-AuditAny?branch=master'>
<img
src='https://coveralls.io/repos/vanstyn/DBIx-Class-AuditAny/badge.svg?branch=master'
alt='Coverage Status'
/>
</a>
=end HTML
=head1 SYNOPSIS
my $schema = My::Schema->connect(@connect);
use DBIx::Class::AuditAny;
my $Auditor = DBIx::Class::AuditAny->track(
schema => $schema,
track_all_sources => 1,
collector_class => 'Collector::AutoDBIC',
collector_params => {
sqlite_db => 'db/audit.db',
}
);
=head1 DESCRIPTION
This module provides a generalized way to track changes to DBIC databases. The aim is
to provide quick/turn-key options to be able to hit the ground running, while also
being highly flexible and customizable with sane APIs.
C<DBIx::Class::AuditAny> wants to be a general framework on top of which other Change
Tracking modules for DBIC can be written, while also providing fully fleshed, end-user
solutions that can be dropped in and work out-of-the-box.
=head2 Background
This module was originally written in 2012 for an internal client project, and the process
of getting it released open-source as a stand-alone, general-purpose module was started in
2013. However, I got busy with other projects and wasn't able to complete a CPAN release at
that time (mainly due to missing docs and minor loose ends). I finally came back to this
project (May 2015) to actually get a release out to CPAN. So, even though the release date
is in 2015, the majority of the code is actually several years old (and has been running
perfectly in production for several client apps the whole time).
=head2 API and Usage
AuditAny uses a different API than typical DBIC components. Instead of loading at the
schema/result class level with C<load_components>, AuditAny is used by attaching an
"Auditor" to an existing schema I<object> instance:
my $schema = My::Schema->connect(@connect);
my $Auditor = DBIx::Class::AuditAny->track(
schema => $schema,
track_all_sources => 1,
collector_class => 'Collector::AutoDBIC',
collector_params => {
sqlite_db => 'db/audit.db',
}
);
The rationale of this approach is that change tracking isn't necessarily something that
needs to be, or should be, defined as a built-in attribute of the schema class.
Additionally, because of the object-based approach, it is possible to attach multiple
Auditors to a single schema object with multiple calls to DBIx::Class::AuditAny->track.
=head1 DATAPOINTS
As changes occur in the tracked schema, information is collected in the form of
I<datapoints> at various stages - or I<contexts> - before being passed to the
configured Collector. A datapoint has a globally unique name and code used to calculate
its value. Code is called at the stage defined by the I<context> of the datapoint.
The available contexts are:
=over 4
=item set
=over 5
=item base
=back
=item change
=over 5
=item source
=back
=item column
=back
B<set> (AKA changeset) datapoints are specific to an entire set of changes - insert/
( run in 1.351 second using v1.01-cache-2.11-cpan-39bf76dae61 )