File Coverage

blib/lib/Data/Serializer/Raw.pm
Criterion Covered Total %
statement 45 73 61.6
branch 8 18 44.4
condition n/a
subroutine 9 14 64.2
pod 7 7 100.0
total 69 112 61.6


line stmt bran cond sub pod time code
1             package Data::Serializer::Raw;
2              
3 1     1   3914 use warnings;
  1         2  
  1         39  
4 1     1   6 use strict;
  1         2  
  1         35  
5 1     1   5 use vars qw($VERSION);
  1         7  
  1         62  
6 1     1   5 use Carp;
  1         2  
  1         837  
7              
8             $VERSION = '0.02';
9              
10             #Global cache of modules we've loaded
11             my %_MODULES;
12              
13             my %_fields = (
14             serializer => 'Data::Dumper',
15             options => {},
16             );
17             sub new {
18 119     119 1 308837 my ($class, %args) = @_;
19 119         381 my $dataref = {%_fields};
20 119         303 foreach my $field (keys %_fields) {
21 238 100       744 $dataref->{$field} = $args{$field} if exists $args{$field};
22             }
23 119         258 my $self = $dataref;
24 119         280 bless $self, $class;
25              
26             #initialize serializer
27 119         242 $self->_serializer_obj();
28              
29 119         333 return $self;
30             }
31              
32             sub serializer {
33 0     0 1 0 my $self = (shift);
34 0         0 my $return = $self->{serializer};
35 0 0       0 if (@_) {
36 0         0 $self->{serializer} = (shift);
37             #reinitialize serializer object
38 0         0 $self->_serializer_obj(1);
39             }
40 0         0 return $return;
41             }
42              
43             sub options {
44 0     0 1 0 my $self = (shift);
45 0         0 my $return = $self->{options};
46 0 0       0 if (@_) {
47 0         0 $self->{options} = (shift);
48             #reinitialize serializer object
49 0         0 $self->_serializer_obj(1);
50             }
51 0         0 return $return;
52             }
53              
54             sub _persistent_obj {
55 0     0   0 my $self = (shift);
56 0 0       0 return $self->{persistent_obj} if (exists $self->{persistent_obj});
57 0         0 $self->_module_loader('Data::Serializer::Persistent');
58 0         0 my $persistent_obj = { parent => $self };
59 0         0 bless $persistent_obj, "Data::Serializer::Persistent";
60 0         0 $self->{persistent_obj} = $persistent_obj;
61 0         0 return $persistent_obj;
62            
63             }
64              
65             sub store {
66 0     0 1 0 my $self = (shift);
67 0         0 my $persistent = $self->_persistent_obj();
68 0         0 $persistent->_store(@_);
69             }
70              
71             sub retrieve {
72 0     0 1 0 my $self = (shift);
73 0         0 my $persistent = $self->_persistent_obj();
74 0         0 $persistent->_retrieve(@_);
75             }
76              
77              
78             sub _module_loader {
79 119     119   140 my $self = (shift);
80 119         158 my $module_name = (shift);
81 119 50       253 return if (exists $_MODULES{$module_name});
82 119 50       235 if (@_) {
83 119         257 $module_name = (shift) . "::$module_name";
84             }
85 119         145 my $package = $module_name;
86 119         423 $package =~ s|::|/|g;
87 119         168 $package .= ".pm";
88 119         151 eval { require $package };
  119         11006  
89 119 50       265 if ($@) {
90 0         0 carp "Data::Serializer error: " .
91             "Please make sure $package is a properly installed package.\n";
92 0         0 return undef;
93             }
94 119         278 $_MODULES{$module_name} = 1;
95             }
96              
97             sub _serializer_obj {
98 357     357   407 my $self = (shift);
99             #if anything is passed in remove previous obj so we will regenerate it
100 357 50       704 if (@_) {
101 0         0 delete $self->{serializer_obj};
102             }
103             #Return cached serializer object if it exists
104 357 100       1729 return $self->{serializer_obj} if (exists $self->{serializer_obj});
105              
106 119         163 my $method = $self->{serializer};
107 119         248 $self->_module_loader($method,"Data::Serializer"); #load in serializer module if necessary
108              
109 119         309 $self->{serializer_obj}->{options} = $self->{options};
110 119         370 bless $self->{serializer_obj}, "Data::Serializer::$method";
111             }
112              
113             sub serialize {
114 119     119 1 2065 my $self = (shift);
115 119         223 my @input = @_;
116              
117 119         195 return $self->_serializer_obj->serialize(@input);
118             }
119              
120              
121             sub deserialize {
122 119     119 1 48840 my $self = (shift);
123 119         351 my $input = (shift);
124              
125 119         220 return $self->_serializer_obj->deserialize($input);
126             }
127              
128             1;
129             __END__