File Coverage

blib/lib/Pixie/ObjectInfo.pm
Criterion Covered Total %
statement 57 57 100.0
branch 10 10 100.0
condition 8 14 57.1
subroutine 18 18 100.0
pod 0 12 0.0
total 93 111 83.7


line stmt bran cond sub pod time code
1             package Pixie::ObjectInfo;
2              
3 31     31   32930 use strict;
  31         63  
  31         1433  
4              
5 31     31   168 use Carp qw( croak confess );
  31         68  
  31         1854  
6 31     31   11248 use Data::UUID;
  31         12799  
  31         2195  
7 31     31   192 use Scalar::Util qw( weaken );
  31         63  
  31         40727  
8              
9             our $VERSION = "2.08_02";
10              
11             # TODO: Pixie::Object has a constructor - use it?
12             sub new {
13 47     47 0 1305 my $proto = shift;
14 47   33     258 my $class = ref($proto) || $proto;
15              
16 47         156 my $self = bless {}, $class;
17 47         153 $self->init();
18 47         111 return $self;
19             }
20              
21             # TODO: rename 'new_from_object'
22             sub make_from {
23 40     40 0 145 my $proto = shift;
24 40         66 my $obj = shift;
25 40         143 my $self = $proto->new;
26 40 100       3505 $self->set__oid($obj->_oid) if $obj->can('_oid');
27 40         150 $self->set_the_object($obj);
28 40 100       379 $self->set_pixie(Pixie->get_the_current_pixie) if
29             defined(Pixie->get_the_current_pixie);
30 40         107 return $self;
31             }
32              
33             sub init {
34 47     47 0 70 my $self = shift;
35 47         132 $self->_oid; # TODO: rename _create_oid for readability?
36 47         82 return $self;
37             }
38              
39             # TODO: split this up into _create_oid()
40             # (even better would be to make a new class called Pixie::OID)
41             {
42             my $uuid_maker;
43             sub _oid {
44 193     193   756 my $self = shift;
45 193   66     75407 $self->{_oid} ||=
      66        
46             ( $uuid_maker ||= Data::UUID->new() )->create_str();
47 193         1050 return $self->{_oid};
48             }
49             }
50              
51             sub set__oid {
52 23     23 0 2999 my $self = shift;
53 23         58 $self->{_oid} = shift;
54 23         48 return $self;
55             }
56              
57             sub set_the_object {
58 42     42 0 142 my $self = shift;
59 42 100       172 croak "We already have an object!" if defined($self->{the_object});
60 41         291 weaken($self->{the_object} = shift);
61 41         65 return $self;
62             }
63              
64             sub the_object {
65 14     14 0 502 my $self = shift;
66 14         81 $self->{the_object};
67             }
68              
69             sub set_lock_strategy {
70 6     6 0 155 my $self = shift;
71 6         57 $self->{lock_strat} = shift;
72 6         16 return $self;
73             }
74              
75             sub lock_strategy {
76 3     3 0 7 my $self = shift;
77 3         27 $self->{lock_strat};
78             }
79              
80             sub set_pixie {
81 38     38 0 142 my $self = shift;
82 38         125 weaken($self->{pixie} = shift);
83 38         61 return $self;
84             }
85              
86             sub pixie {
87 7     7 0 14 my $self = shift;
88 7         43 $self->{pixie};
89             }
90              
91             sub pixie_id {
92 4     4 0 12 my $self = shift;
93 4 100 50     46 $self->{pixie}->_oid || '' if $self->{pixie};
94             }
95              
96 1     1 0 6 sub px_insertion_thaw { shift }
97              
98             sub DESTROY {
99 47     47   8186 my $self = shift;
100 47         85 local $@; # Protect $@
101 47 100       238 if ($self->{pixie}) {
102 33         105 $self->{pixie}->cache_delete($self->_oid);
103 33   66     1093 ($self->{lock_strat} ||= Pixie::LockStrat::Null->new)
104             ->on_DESTROY(scalar($self->_oid), $self->{pixie});
105             }
106             }
107              
108             1;