File Coverage

blib/lib/Data/Mapper/Data.pm
Criterion Covered Total %
statement 43 43 100.0
branch 8 8 100.0
condition 4 5 80.0
subroutine 11 11 100.0
pod 0 6 0.0
total 66 73 90.4


line stmt bran cond sub pod time code
1             package Data::Mapper::Data;
2 2     2   25067 use strict;
  2         4  
  2         67  
3 2     2   11 use warnings;
  2         4  
  2         60  
4 2     2   647 use parent qw(Data::Mapper::Class);
  2         321  
  2         18  
5              
6 2     2   129 use Carp ();
  2         4  
  2         762  
7              
8             sub param {
9 10     10 0 264 my $self = shift;
10 10 100       51 return keys %$self if !@_;
11              
12 9 100 66     42 if (@_ == 1) {
    100          
13 5         9 my $key = shift;
14 5         36 return $self->{$key};
15             }
16             elsif (@_ && @_ % 2 == 0) {
17 3         10 my %args = @_;
18              
19 3         13 while (my ($key, $value) = each %args) {
20 4         8 $self->{$key} = $value;
21 4         17 $self->mark_as_changed($key);
22             }
23              
24 3         9 return $self;
25             }
26             else {
27 1         196 Carp::croak('arguments count must be an even number');
28             }
29             }
30              
31             my %CHANGES;
32             sub changed_keys {
33 16     16 0 23 my ($self, $changed_keys) = @_;
34 16   100     59 $CHANGES{$self + 0} ||= [];
35 16 100       36 $CHANGES{$self + 0} = $changed_keys if defined $changed_keys;
36 16         86 $CHANGES{$self + 0};
37             }
38              
39             sub changes {
40 3     3 0 4 my $self = shift;
41 3         5 my $changes = {};
42              
43 3         4 for my $key (@{$self->changed_keys}) {
  3         15  
44 1         4 $changes->{$key} = $self->param($key);
45             }
46              
47 3         13 $changes;
48             }
49              
50             sub mark_as_changed {
51 4     4 0 6 my ($self, $key) = @_;
52 4         6 push @{$self->changed_keys}, $key;
  4         12  
53             }
54              
55             sub is_changed {
56 3     3 0 13 my $self = shift;
57 3         3 scalar @{$self->changed_keys} > 0;
  3         7  
58             }
59              
60             sub discard_changes {
61 3     3 0 5 my $self = shift;
62 3         26 $self->changed_keys([]);
63             }
64              
65             sub DESTROY {
66 2     2   585 my $self = shift;
67 2         11 $self->discard_changes;
68             }
69              
70             !!1;