File Coverage

blib/lib/DBIx/Class/Schema/Journal/DB.pm
Criterion Covered Total %
statement 3 30 10.0
branch 0 12 0.0
condition n/a
subroutine 1 7 14.2
pod 0 5 0.0
total 4 54 7.4


line stmt bran cond sub pod time code
1             package DBIx::Class::Schema::Journal::DB;
2              
3 2     2   10 use base 'DBIx::Class::Schema';
  2         3  
  2         829  
4              
5             __PACKAGE__->mk_classdata('nested_changesets');
6             __PACKAGE__->mk_group_accessors( simple => 'current_user' );
7             __PACKAGE__->mk_group_accessors( simple => 'current_session' );
8             __PACKAGE__->mk_group_accessors( simple => '_current_changeset_container' );
9              
10             DBIx::Class::Schema::Journal::DB->load_classes(qw(ChangeSet ChangeLog));
11              
12             require DBIx::Class::Schema::Journal::DB::AuditLog;
13             require DBIx::Class::Schema::Journal::DB::AuditHistory;
14              
15             sub _current_changeset {
16 0     0     my $self = shift;
17 0           my $ref = $self->_current_changeset_container;
18 0 0         $ref && $ref->{changeset};
19             }
20              
21             # this is for localization of the current changeset
22             sub current_changeset {
23 0     0 0   my ( $self, @args ) = @_;
24              
25 0 0         $self->throw_exception("setting current_changeset is not supported, use txn_do to create a new changeset") if @args;
26              
27 0           my $id = $self->_current_changeset;
28              
29 0 0         $self->throw_exception("Can't call current_changeset outside of a transaction") unless $id;
30              
31 0           return $id;
32             }
33              
34             sub journal_create_changeset {
35 0     0 0   my ( $self, @args ) = @_;
36              
37 0           my %changesetdata = ( @args, ID => undef );
38              
39 0 0         delete $changesetdata{parent_id} unless $self->nested_changesets;
40              
41 0 0         if( defined( my $user = $self->current_user() ) )
42             {
43 0           $changesetdata{user_id} = $user;
44             }
45 0 0         if( defined( my $session = $self->current_session() ) )
46             {
47 0           $changesetdata{session_id} = $session;
48             }
49              
50             ## Create a new changeset, then run $code as a transaction
51 0           my $cs = $self->resultset('ChangeSet');
52              
53 0           $cs->create({ %changesetdata });
54             }
55              
56             sub journal_create_change {
57 0     0 0   my $self = shift;
58 0           $self->resultset("ChangeLog")->create({ changeset_id => $self->current_changeset });
59             }
60              
61             sub journal_update_or_create_log_entry
62             {
63 0     0 0   my ($self, $row, @cols) = @_;
64              
65 0           my $s_name = $row->result_source->source_name;
66              
67 0           my %id = map { $_ => $row->get_column($_)} $row->primary_columns;
  0            
68              
69 0           $self->resultset("${s_name}AuditLog")->update_or_create({ @cols, %id });
70             }
71              
72             sub journal_record_in_history
73             {
74 0     0 0   my ($self, $row, @cols) = @_;
75              
76 0           my $s_name = $row->result_source->source_name;
77              
78 0           $self->resultset("${s_name}AuditHistory")->create({ $row->get_columns, @cols });
79             }
80              
81              
82             1;