File Coverage

blib/lib/Rose/DB/Object/Metadata/ColumnList.pm
Criterion Covered Total %
statement 39 54 72.2
branch 19 26 73.0
condition 7 21 33.3
subroutine 6 9 66.6
pod 0 5 0.0
total 71 115 61.7


line stmt bran cond sub pod time code
1             package Rose::DB::Object::Metadata::ColumnList;
2              
3 61     61   454 use strict;
  61         139  
  61         1881  
4              
5 61     61   1295 use Rose::DB::Object::Metadata::Object;
  61         160  
  61         7811  
6             our @ISA = qw(Rose::DB::Object::Metadata::Object);
7              
8             our $VERSION = '0.02';
9              
10             use overload
11             (
12             '""' => sub
13             {
14 0     0   0 my($self) = shift;
15 0   0     0 return join($", map { "$_" } @{$self->{'columns'} ||= $self->auto_init_columns});
  0         0  
  0         0  
16             },
17 61         766 fallback => 1,
18 61     61   527 );
  61         203  
19              
20             sub columns
21             {
22 309     309 0 503 my($self) = shift;
23              
24 309         703 my $meta = $self->parent;
25              
26 309 100       635 if(@_)
27             {
28             # Force stringification in case they're column objects
29             # instead of just column names.
30 1 50 33     10 if(@_ == 1 && ref $_[0] eq 'ARRAY')
31             {
32 1         3 $self->{'columns'} = [ map { "$_" } @{$_[0]} ];
  3         10  
  1         5  
33             }
34             else
35             {
36 0         0 $self->{'columns'} = [ map { "$_" } @_ ];
  0         0  
37             }
38             }
39              
40 309 100       695 return unless(defined wantarray);
41              
42 308 50       666 unless($meta)
43             {
44 0 0 0     0 return wantarray ? @{$self->{'columns'} ||= []} : ($self->{'columns'} ||= []);
  0   0     0  
45             }
46              
47 308 100 50     442 unless(@{$self->{'columns'} ||= []})
  308         904  
48             {
49 77         295 $self->{'columns'} = $self->auto_init_columns;
50             }
51              
52             # Expand into columns on return
53 237 100 50     561 return wantarray ? map { $meta->column($_) || $_ } @{$self->{'columns'} ||= []} :
  231         594  
54 308 50 50     703 [ map { $meta->column($_) || $_ } @{$self->{'columns'} ||= []} ];
  77 100       188  
  77         240  
55             }
56              
57 0     0 0 0 sub auto_init_columns { [] }
58              
59             sub column_names
60             {
61 645     645 0 4207 my($self) = shift;
62              
63 645 100 100     926 if(@{$self->{'columns'} ||= []})
  645         2094  
64             {
65 568 100       1337 return wantarray ? @{$self->{'columns'}} : $self->{'columns'};
  448         1444  
66             }
67              
68             # This call with auto-init the columns if necessary
69 77         288 my $columns = $self->columns;
70              
71 77 50       399 return wantarray ? @$columns : $columns;
72             }
73              
74             sub add_columns
75             {
76 3     3 0 9 my($self) = shift;
77              
78 3 50 33     26 if(@_ == 1 && ref $_[0] eq 'ARRAY')
79             {
80 0         0 push @{$self->{'columns'}}, map { "$_" } @{$_[0]};
  0         0  
  0         0  
  0         0  
81             }
82             else
83             {
84 3         7 push @{$self->{'columns'}}, map { "$_" } @_;
  3         25  
  3         18  
85             }
86              
87 3         23 return;
88             }
89              
90             *add_column = \&add_columns;
91              
92             sub delete_columns
93             {
94 0     0 0   shift->{'columns'} = [];
95 0           return;
96             }
97              
98             1;