File Coverage

blib/lib/ODS/Table/Row.pm
Criterion Covered Total %
statement 40 40 100.0
branch 8 10 80.0
condition 4 10 40.0
subroutine 14 14 100.0
pod 0 7 0.0
total 66 81 81.4


line stmt bran cond sub pod time code
1             package ODS::Table::Row;
2              
3 2     2   12 use YAOO;
  2         3  
  2         9  
4              
5             use overload
6 968 100   968   15855 '%{}' => sub { caller() =~ m/YAOO$/ ? $_[0] : $_[0]->as_hash; },
7 2     2   616 fallback => 1;
  2         4  
  2         11  
8              
9             has table => isa(object);
10              
11             has columns => isa(ordered_hash), default(1);
12              
13             sub build {
14 12     12 0 137 my ($self, %args) = @_;
15              
16 12         49 $self->table($args{table});
17 12         18 for my $column ( keys %{ $self->table->columns } ) {
  12         26  
18 60         963 my $col = $self->table->columns->{$column}->build_column($args{data}{$column}, $args{inflated});
19 60         147 $self->columns->{$column} = $col;
20             YAOO::make_keyword($self->table->row_class, $column, sub {
21 46     46   3677 my $self = shift;
        46      
        46      
        23      
22 46         89 $self->columns->{$column}->value(@_);
23 60 100       918 }) unless $self->can($column);
24             }
25 12         92 return $self;
26             }
27              
28             sub as_hash {
29 86     86 0 97 my %hash;
30             $hash{$_} = $_[0]->columns->{$_}->value
31 86         89 for keys %{$_[0]->columns};
  86         149  
32 86         1390 return \%hash;
33             }
34              
35             sub set_row {
36 4     4 0 7 my ($self, $data) = @_;
37 4         7 for my $key ( keys %{ $data } ) {
  4         9  
38 4         10 $self->$key($data->{$key});
39             }
40             }
41              
42             sub store_row {
43 44     44 0 53 my ($self, $data) = @_;
44 44 50 0     98 $self->set_row($data) if defined $data && ref($data || "") eq "HASH";
      33        
45             my %hash = map +(
46             $_ => $self->columns->{$_}->store_column()->value
47 44         47 ), keys %{ $self->columns };
  44         66  
48 44         861 return \%hash;
49             }
50              
51             sub validate {
52 6     6 0 11 my ($self, $data) = @_;
53 6 100 50     40 $self->set_row($data) if defined $data && ref($data || "") eq "HASH";
      66        
54             my %hash = map +(
55             $_ => $self->columns->{$_}->validate()->value
56 6         67 ), keys %{ $self->columns };
  6         12  
57 6         72 return \%hash;
58             }
59              
60             sub update {
61 2 50   2 0 25 my ($self, $update) = (shift, @_ > 1 ? { @_ } : $_[0]);
62 2         7 $self->set_row($update);
63 2         64 $self->table->storage->update_row();
64             }
65              
66             sub delete {
67 2     2 0 904 my ($self) = @_;
68 2         7 $self->table->storage->delete_row($self);
69             }
70              
71             1;