File Coverage

blib/lib/Pixie/ObjectInfo.pm
Criterion Covered Total %
statement 51 57 89.4
branch 8 10 80.0
condition 6 12 50.0
subroutine 15 18 83.3
pod 0 12 0.0
total 80 109 73.3


line stmt bran cond sub pod time code
1             package Pixie::ObjectInfo;
2              
3 16     16   83 use strict;
  16         28  
  16         840  
4              
5             our $VERSION="2.06";
6              
7 16     16   81 use Scalar::Util qw/weaken/;
  16         28  
  16         732  
8              
9 16     16   90 use Data::UUID;
  16         27  
  16         1464  
10 16     16   94 use Carp;
  16         30  
  16         10749  
11              
12             sub new {
13 28     28 0 51 my $proto = shift;
14 28   33     179 my $class = ref($proto) || $proto;
15              
16 28         89 my $self = bless {}, $class;
17 28         116 $self->init();
18 28         93 return $self;
19             }
20              
21             sub make_from {
22 28     28 0 57 my $proto = shift;
23 28         45 my $obj = shift;
24 28         96 my $self = $proto->new;
25 28 100       416 $self->set__oid($obj->_oid) if $obj->can('_oid');
26 28         105 $self->set_the_object($obj);
27 28 100       126 $self->set_pixie(Pixie->get_the_current_pixie) if
28             defined(Pixie->get_the_current_pixie);
29 28         95 return $self;
30             }
31              
32             sub init {
33 28     28 0 51 my $self = shift;
34 28         148 $self->_oid;
35 28         48 return $self;
36             }
37              
38             {
39             my $uuid_maker;
40             sub _oid {
41 139     139   172 my $self = shift;
42 139   66     734273 $self->{_oid} ||=
      66        
43             ( $uuid_maker ||= Data::UUID->new() )->create_str();
44 139         638 return $self->{_oid};
45             }
46             }
47              
48             sub set__oid {
49 16     16 0 162 my $self = shift;
50 16         62 $self->{_oid} = shift;
51 16         42 return $self;
52             }
53              
54             sub set_the_object {
55 28     28 0 53 my $self = shift;
56 28 50       105 croak "We already have an object!" if defined($self->{the_object});
57 28         138 weaken($self->{the_object} = shift);
58 28         46 return $self;
59             }
60              
61             sub the_object {
62 5     5 0 9 my $self = shift;
63 5         17 $self->{the_object};
64             }
65              
66             sub set_lock_strategy {
67 0     0 0 0 my $self = shift;
68 0         0 $self->{lock_strat} = shift;
69 0         0 return $self;
70             }
71              
72             sub lock_strategy {
73 0     0 0 0 my $self = shift;
74 0         0 $self->{lock_strat};
75             }
76              
77             sub set_pixie {
78 25     25 0 64 my $self = shift;
79 25         133 weaken($self->{pixie} = shift);
80 25         39 return $self;
81             }
82              
83             sub pixie {
84 3     3 0 8 my $self = shift;
85 3         26 $self->{pixie};
86             }
87              
88             sub pixie_id {
89 5     5 0 7 my $self = shift;
90 5 50       15 $self->{pixie}->_oid || '';
91             }
92              
93 0     0 0 0 sub px_insertion_thaw { shift }
94              
95             sub DESTROY {
96 28     28   170 my $self = shift;
97 28         48 local $@; # Protect $@
98 28 100       114 if ($self->{pixie}) {
99 25         80 $self->{pixie}->cache_delete($self->_oid);
100 25   33     324 ($self->{lock_strat} ||= Pixie::LockStrat::Null->new)
101             ->on_DESTROY(scalar($self->_oid), $self->{pixie});
102             }
103             }
104              
105             1;