File Coverage

blib/lib/DBIx/Model/Table.pm
Criterion Covered Total %
statement 18 54 33.3
branch 0 6 0.0
condition n/a
subroutine 6 14 42.8
pod 0 8 0.0
total 24 82 29.2


line stmt bran cond sub pod time code
1             package DBIx::Model::Table;
2 1     1   3 use strict;
  1         1  
  1         22  
3 1     1   3 use warnings;
  1         1  
  1         16  
4 1     1   283 use DBIx::Model::Column;
  1         2  
  1         29  
5 1     1   414 use DBIx::Model::FK;
  1         2  
  1         26  
6 1     1   5 use Types::Standard qw/ArrayRef Int/;
  1         1  
  1         3  
7 1     1   329 use Moo;
  1         1  
  1         4  
8              
9             our $VERSION = '0.0.1_1';
10              
11             has _columns => (
12             is => 'ro',
13             isa => ArrayRef,
14             default => sub { [] },
15             );
16              
17             has db => (
18             is => 'ro',
19             required => 1,
20             weak_ref => 1,
21             );
22              
23             has name => (
24             is => 'ro',
25             required => 1,
26             );
27              
28             has ref_count => (
29             is => 'rw',
30             isa => Int,
31             default => 0,
32             );
33              
34             has target_count => (
35             is => 'rw',
36             isa => Int,
37             default => 0,
38             );
39              
40             has _foreign_keys => (
41             is => 'ro',
42             isa => ArrayRef,
43             default => sub { [] },
44             required => 1,
45             );
46              
47             sub add_column {
48 0     0 0   my $self = shift;
49 0           my $col = DBIx::Model::Column->new( @_, table => $self );
50 0           push( @{ $self->_columns }, $col );
  0            
51 0           return $col;
52             }
53              
54             sub add_foreign_key {
55 0     0 0   my $self = shift;
56 0           my $fk = DBIx::Model::FK->new( @_, table => $self );
57 0           push( @{ $self->_foreign_keys }, $fk );
  0            
58 0           return $fk;
59             }
60              
61             sub as_string {
62 0     0 0   my $self = shift;
63 0           my $prefix = shift;
64 0           my $str = $prefix . $self->name;
65              
66 0           foreach my $col ( $self->columns ) {
67 0           $str .= "\n" . $col->as_string( $prefix . ' ' );
68             }
69              
70 0 0         if ( my @pri = $self->primaries ) {
71             $str .=
72 0           "\n${prefix} PRIMARY(" . join( ',', map { $_->name } @pri ) . ')';
  0            
73             }
74              
75 0           foreach my $fk ( $self->foreign_keys ) {
76 0           $str .= "\n" . $fk->as_string( $prefix . ' ' );
77             }
78              
79 0           return $str;
80             }
81              
82             sub bump_ref_count {
83 0     0 0   my $self = shift;
84 0           $self->ref_count( $self->ref_count + 1 );
85             }
86              
87             sub bump_target_count {
88 0     0 0   my $self = shift;
89 0           $self->target_count( $self->target_count + 1 );
90             }
91              
92             sub columns {
93 0     0 0   my $self = shift;
94 0 0         return @{ $self->_columns } if wantarray;
  0            
95 0           return $self->_columns;
96             }
97              
98             sub primaries {
99 0     0 0   my $self = shift;
100 0           return grep { $_->primary } $self->columns;
  0            
101             }
102              
103             sub foreign_keys {
104 0     0 0   my $self = shift;
105 0 0         return @{ $self->_foreign_keys } if wantarray;
  0            
106 0           return $self->_foreign_keys;
107             }
108              
109             1;