File Coverage

blib/lib/ObjectDB/InflateColumn.pm
Criterion Covered Total %
statement 22 42 52.3
branch 2 14 14.2
condition 0 8 0.0
subroutine 7 12 58.3
pod n/a
total 31 76 40.7


line stmt bran cond sub pod time code
1             package ObjectDB::InflateColumn;
2 3     3   345155 use strict;
  3         7  
  3         125  
3 3     3   19 use warnings;
  3         5  
  3         164  
4              
5             our $VERSION = '0.01';
6              
7             BEGIN {
8 3     3   16 use Carp;
  3         8  
  3         240  
9 3     3   3012 use Module::Util qw();
  3         14406  
  3         156  
10 3 50   3   135 unless (Module::Util::module_is_loaded('ObjectDB')) {
11 0         0 croak __PACKAGE__." can't be loaded before ObjectDB"
12             }
13             # ok, lets go
14             }
15              
16 3     3   3302 use Sub::Install;
  3         6630  
  3         24  
17              
18             my $imported = 0;
19             sub import {
20 3     3   37 my $class = shift;
21 3 50       16 return if $imported;
22            
23             # extend ObjectDB::Schema
24             Sub::Install::install_sub({
25             code => sub {
26 0     0   0 my $self = shift;
27 0         0 my $field = shift;
28 0 0       0 unless ($field) {
29 0   0     0 return $self->{_inflate_columns_info} ||= {};
30             };
31 0 0       0 my $param = ref $_[0] eq 'HASH' ? $_[0] : {@_};
32 0   0 0   0 $param->{inflate} ||= sub {$_[0]};
  0         0  
33 0   0 0   0 $param->{deflate} ||= sub {$_[0]};
  0         0  
34            
35 0         0 $self->{_inflate_columns_info}->{$field} = $param;
36            
37 0         0 return 1;
38             },
39 3         25 into => 'ObjectDB::Schema',
40             as => 'inflate_column'
41             });
42             # method 'inflate_column' has been added
43            
44 0   0 0   0 Sub::Install::install_sub({
45             code => sub {$_[0]->{_inflate_columns_info} ||= {}},
46 3         211 into => 'ObjectDB::Schema',
47             as => '_inflate_columns_info'
48             });
49             # method '_inflate_columns_info' has been added (access to field {_inflate_columns_info})
50            
51             # extend ObjectDB
52             Sub::Install::install_sub({
53             code => sub {
54 0     0   0 my $self = shift;
55 0         0 my $inflate_info = $self->schema->_inflate_columns_info;
56 0 0       0 if (exists $inflate_info->{$_[0]}) {
57 0 0       0 if (@_==1) {
    0          
58 0         0 return $inflate_info->{$_[0]}->{deflate}->($self->column($_[0]));
59             } elsif (@_==2) {
60 0         0 return $self->column($_[0], $inflate_info->{$_[0]}->{inflate}->($_[1]));
61             };
62             };
63 0         0 return $self->column(@_);
64             },
65 3         154 into => 'ObjectDB',
66             as => 'inflate_column'
67             });
68             # method 'inflate_column' has been added
69 3         195 $imported++;
70             };
71              
72             1;
73             __END__