File Coverage

blib/lib/DBIx/Class/CDBICompat/AccessorMapping.pm
Criterion Covered Total %
statement 12 42 28.5
branch 0 18 0.0
condition 0 9 0.0
subroutine 4 8 50.0
pod 0 4 0.0
total 16 81 19.7


line stmt bran cond sub pod time code
1             package # hide from PAUSE Indexer
2             DBIx::Class::CDBICompat::AccessorMapping;
3              
4 2     2   1234 use strict;
  2         3  
  2         48  
5 2     2   8 use warnings;
  2         5  
  2         44  
6              
7 2     2   9 use Scalar::Util 'blessed';
  2         4  
  2         87  
8 2     2   12 use namespace::clean;
  2         3  
  2         11  
9              
10             sub mk_group_accessors {
11 0     0 0   my ($class, $group, @cols) = @_;
12              
13 0           foreach my $col (@cols) {
14 0 0         my($accessor, $col) = ref $col eq 'ARRAY' ? @$col : (undef, $col);
15              
16 0           my($ro_meth, $wo_meth);
17 0 0 0       if (defined blessed $col and $col->isa('Class::DBI::Column')) {
    0 0        
18 0           $ro_meth = $col->accessor;
19 0           $wo_meth = $col->mutator;
20             }
21             elsif (defined $accessor and ($accessor ne $col)) {
22 0           $ro_meth = $wo_meth = $accessor;
23             }
24             else {
25 0           $ro_meth = $class->accessor_name_for($col);
26 0           $wo_meth = $class->mutator_name_for($col);
27             }
28              
29             # warn "class: $class / col: $col / ro: $ro_meth / wo: $wo_meth\n";
30 0 0 0       if ($ro_meth eq $wo_meth or # they're the same
31             $wo_meth eq $col) # or only the accessor is custom
32             {
33 0           $class->next::method($group => [ $ro_meth => $col ]);
34             }
35             else {
36 0           $class->mk_group_ro_accessors($group => [ $ro_meth => $col ]);
37 0           $class->mk_group_wo_accessors($group => [ $wo_meth => $col ]);
38             }
39             }
40             }
41              
42              
43             sub accessor_name_for {
44 0     0 0   my ($class, $column) = @_;
45 0 0         if ($class->can('accessor_name')) {
46 0           return $class->accessor_name($column)
47             }
48              
49 0           return $column;
50             }
51              
52             sub mutator_name_for {
53 0     0 0   my ($class, $column) = @_;
54 0 0         if ($class->can('mutator_name')) {
55 0           return $class->mutator_name($column)
56             }
57              
58 0           return $column;
59             }
60              
61              
62             sub new {
63 0     0 0   my ($class, $attrs, @rest) = @_;
64 0 0         $class->throw_exception( "create needs a hashref" ) unless ref $attrs eq 'HASH';
65 0           foreach my $col ($class->columns) {
66 0           my $acc = $class->accessor_name_for($col);
67 0 0         $attrs->{$col} = delete $attrs->{$acc} if exists $attrs->{$acc};
68              
69 0           my $mut = $class->mutator_name_for($col);
70 0 0         $attrs->{$col} = delete $attrs->{$mut} if exists $attrs->{$mut};
71             }
72 0           return $class->next::method($attrs, @rest);
73             }
74              
75             1;