File Coverage

blib/lib/ODS/Table/Row.pm
Criterion Covered Total %
statement 50 50 100.0
branch 11 12 91.6
condition 4 10 40.0
subroutine 11 11 100.0
pod 0 7 0.0
total 76 90 84.4


line stmt bran cond sub pod time code
1             package ODS::Table::Row;
2              
3 70     70   1508 use YAOO;
  70         143  
  70         313  
4              
5             use overload
6 157738 100   157738   2438811 '%{}' => sub { caller() =~ m/YAOO$/ ? $_[0] : $_[0]->as_hash; },
7 70     70   34194 fallback => 1;
  70         205  
  70         1274  
8              
9             has table => isa(object);
10              
11             has columns => isa(ordered_hash), default(1);
12              
13             has __file => isa(string);
14              
15             has __custom_file_name => isa(string);
16              
17             sub build {
18 2663     2663 0 46614 my ($self, %args) = @_;
19              
20 2663         7913 $self->table($args{table});
21              
22 2663 100       7741 if (ref $args{data} eq 'ARRAY') {
23 3         6 my $column = 'array_items';
24 3         5 my $value = [ map { $self->table->parent_column->object_class->instantiate($self->table->parent_column, 0, $_) } @{ $args{data} } ];
  6         14  
  3         8  
25              
26             my $col = $self->table->columns->{$column}->build_column(
27             $value, $args{inflated}, $args{serialize_class}
28 3         10 );
29 3         14 $self->columns->{$column} = $col;
30 3         107 return $self;
31             }
32              
33 2660         8633 $self->__custom_file_name(delete $args{data}{__custom_file_name});
34 2660         8103 $self->__file(delete $args{data}{__file});
35              
36 2660         4401 for my $column ( keys %{ $self->table->columns } ) {
  2660         5608  
37             my $col = $self->table->columns->{$column}->build_column(
38             $args{data}{$column}, $args{inflated}, $args{serialize_class}
39 39375         287016 );
40 39375         101976 $self->columns->{$column} = $col;
41             YAOO::make_keyword($self->table->row_class, $column, sub {
42 163     163   54695 my $self = shift;
43 163         439 $self->columns->{$column}->value(@_);
44 39375 100       566856 }) unless $self->can($column);
45             }
46 2660         21777 return $self;
47             }
48              
49             sub as_hash {
50 171     171 0 329 my %hash;
51             $hash{$_} = $_[0]->columns->{$_}->value
52 171         237 for keys %{$_[0]->columns};
  171         403  
53 171         3665 return \%hash;
54             }
55              
56             sub set_row {
57 7     7 0 16 my ($self, $data) = @_;
58 7         15 for my $key ( keys %{ $data } ) {
  7         23  
59 4         14 $self->$key($data->{$key});
60             }
61             }
62              
63             sub store_row {
64 1774     1774 0 2912 my ($self, $data) = @_;
65 1774 50 0     3983 $self->set_row($data) if defined $data && ref($data || "") eq "HASH";
      33        
66             my %hash = map +(
67             $_ => $self->columns->{$_}->store_column()->value
68 1774         2312 ), keys %{ $self->columns };
  1774         3332  
69 1774         63511 return \%hash;
70             }
71              
72             sub validate {
73 1723     1723 0 3807 my ($self, $data) = @_;
74 1723 100 50     3612 $self->set_row($data) if defined $data && ref($data || "") eq "HASH";
      66        
75             my %hash = map +(
76             $_ => $self->columns->{$_}->validate()->value
77 1723         2552 ), keys %{ $self->columns };
  1723         2629  
78 1723         49263 return \%hash;
79             }
80              
81             sub update {
82 5 100   5 0 2375 my ($self, $update) = (shift, @_ > 1 ? { @_ } : $_[0]);
83 5         40 $self->set_row($update);
84 5         99 $self->table->storage->update_row($self);
85             }
86              
87             sub delete {
88 2     2 0 1695 my ($self) = @_;
89 2         30 $self->table->storage->delete_row($self);
90             }
91              
92             1;