File Coverage

blib/lib/enum/fields/extending.pm
Criterion Covered Total %
statement 31 31 100.0
branch 8 12 66.6
condition n/a
subroutine 6 6 100.0
pod n/a
total 45 49 91.8


line stmt bran cond sub pod time code
1             package enum::fields::extending;
2              
3 1     1   928 use 5.00503;
  1         3  
  1         39  
4 1     1   5 use strict;
  1         1  
  1         43  
5 1     1   4 use vars qw($VERSION %class_info %final);
  1         2  
  1         67  
6 1     1   5 use Carp;
  1         3  
  1         71  
7              
8 1     1   5 use enum::fields;
  1         1  
  1         12  
9              
10             $VERSION = 1.0;
11              
12             sub import {
13              
14 2     2   297 shift;
15            
16 2 50       9 croak "No parent class specified" unless (@_);
17            
18 2         4 my $class = caller();
19 2         4 my $idx = 0;
20            
21 2         4 my $extclass = shift;
22            
23 2 50       5 croak $@ if ($@);
24            
25 2 100       166 croak "Connot extend from parent class if this class already has fields"
26             if exists($class_info{$class});
27            
28 1 50       3 croak "Cannot add fields to class that has been inherited"
29             if exists($final{$class});
30            
31 1 50       3 $class_info{$extclass} = [] unless exists($class_info{$extclass});
32 1         3 $final{$extclass} = 1;
33              
34 1         1 for my $fld (@{$class_info{$extclass}}, @_) {
  1         2  
35            
36 6         18 define_constant($class, $fld, $idx++);
37              
38 6 100       24 $class_info{$class} = [] unless exists($class_info{$class});
39 6         7 push @{$class_info{$class}}, $fld;
  6         56  
40             }
41             }
42              
43             1;