File Coverage

blib/lib/Eidolon/Core/Attributes.pm
Criterion Covered Total %
statement 28 30 93.3
branch 1 2 50.0
condition n/a
subroutine 6 7 85.7
pod n/a
total 35 39 89.7


line stmt bran cond sub pod time code
1             package Eidolon::Core::Attributes;
2             # ==============================================================================
3             #
4             # Eidolon
5             # Copyright (c) 2009, Atma 7
6             # ---
7             # Eidolon/Core/Attributes.pm - base class for attributes handling
8             #
9             # ==============================================================================
10              
11 1     1   37801 use warnings;
  1         4  
  1         32  
12 1     1   7 use strict;
  1         3  
  1         91  
13              
14             our $VERSION = "0.02"; # 2009-05-14 04:57:12
15              
16             # ------------------------------------------------------------------------------
17             # @ MODIFY_CODE_ATTRIBUTES($class, $code, @attrs)
18             # modify code attributes (God bless guys from the Catalyst team)
19             # ------------------------------------------------------------------------------
20             sub MODIFY_CODE_ATTRIBUTES
21             {
22 1     1   2859 my ($class, $code, @attrs) = @_;
23              
24             {
25 1     1   6 no strict "refs";
  1         2  
  1         260  
  1         2  
26              
27 1 50       2 unless (defined ${$class."::_code_cache"})
  1         11  
28             {
29 1         3 ${ $class."::_code_cache" } = {};
  1         5  
30 1         2 ${ $class."::_attr_cache" } = {};
  1         6  
31              
32 1     2   8 *{ $class."::code_cache" } = sub { return ${ $_[0]."::_code_cache" } };
  1         7  
  2         2089  
  2         17  
33 1     2   3 *{ $class."::attr_cache" } = sub { return ${ $_[0]."::_attr_cache" } };
  1         6  
  2         5  
  2         17  
34             }
35             }
36              
37 1         5 $class->attr_cache->{$code} = [ @attrs ];
38 1         6 $class->code_cache->{$_} = $code foreach (@attrs);
39              
40 1         4 return ();
41             }
42              
43             # ------------------------------------------------------------------------------
44             # @ FETCH_CODE_ATTRIBUTES($class, $code)
45             # read code attributes
46             # ------------------------------------------------------------------------------
47             sub FETCH_CODE_ATTRIBUTES
48             {
49 0     0     return @{ $_[0]->attr_cache->{$_[1]} };
  0            
50             }
51              
52             1;
53              
54             __END__