File Coverage

blib/lib/ODS/Table/Column/Object.pm
Criterion Covered Total %
statement 32 35 91.4
branch 10 14 71.4
condition 2 5 40.0
subroutine 6 6 100.0
pod 0 3 0.0
total 50 63 79.3


line stmt bran cond sub pod time code
1             package ODS::Table::Column::Object;
2              
3 2     2   14 use YAOO;
  2         24  
  2         15  
4              
5 2     2   806 use Scalar::Util;
  2         4  
  2         199  
6              
7             extends 'ODS::Table::Column::Base';
8              
9 2     2   25 use ODS::Utils qw/clone error deep_unblessed/;
  2         5  
  2         14  
10              
11             has reference => isa(boolean), default => 0;
12              
13             has blessed => isa(boolean), default => 0;
14              
15             has object_class => isa(string);
16              
17             has serialize_class => isa(object);
18              
19             sub validation {
20 6     6 0 65 my ($self, $value) = @_;
21 6 100 50     51 if (ref($value || "SCALAR") =~ m/ARRAY|HASH|SCALAR/) {
22 4         12 $value = $self->inflation($value);
23             }
24 6         20 return $value;
25             }
26              
27             sub inflation {
28 11     11 0 79 my ($self, $value) = @_;
29              
30 11 50       31 if (! ref $value) {
31 0         0 $value = $self->serialize_class->parse($value);
32 0         0 $self->reference(1);
33             }
34              
35 11 50       61 return ref($value) =~ m/HASH|ARRAY|SCALAR/ ? do {
36 11         31 $self->blessed(1);
37 11 100       460 if (ref $value eq 'ARRAY') {
38 3         5 $value = [ map { $self->object_class->instantiate($self, 0, $_) } @{ $value } ];
  6         16  
  3         6  
39             } else {
40 8         19 $value = $self->object_class->instantiate($self, 0, $value);
41             }
42 11         46 $value;
43             } : $value;
44             }
45              
46             sub deflation {
47 4     4 0 42 my ($self, $value) = @_;
48 4 50       12 if ($self->blessed) {
49 4         52 $value = deep_unblessed $value;
50             $value = { map {
51 8 100       19 my $val = ref $value->{$_} ? $value->{$_}->store_row() : $value->{$_};
52 8         36 $_ => $val
53 4         6 } keys %{ $value } };
  4         15  
54             }
55 4 50 33     24 if ($self->reference && ref $value) {
56 0         0 $value = $self->serialize_class->stringify($value);
57             }
58 4         74 return $value;
59             }
60              
61             1;
62              
63             __END__