File Coverage

blib/lib/Aniki/Schema/Relationships.pm
Criterion Covered Total %
statement 33 39 84.6
branch 7 10 70.0
condition n/a
subroutine 10 10 100.0
pod 0 5 0.0
total 50 64 78.1


line stmt bran cond sub pod time code
1             package Aniki::Schema::Relationships;
2 29     29   436 use 5.014002;
  29         99  
3              
4 29     29   148 use namespace::autoclean;
  29         58  
  29         166  
5 29     29   1778 use Mouse v2.4.5;
  29         320  
  29         186  
6 29     29   9693 use SQL::Translator::Schema::Constants;
  29         75  
  29         1798  
7 29     29   9456 use Aniki::Schema::Relationship;
  29         2757  
  29         13196  
8              
9             has schema => (
10             is => 'ro',
11             required => 1,
12             weak_ref => 1,
13             );
14              
15             has table => (
16             is => 'ro',
17             required => 1,
18             );
19              
20             has rule => (
21             is => 'rw',
22             default => sub { +{} },
23             );
24              
25             sub add {
26 121     121 0 2812 my $self = shift;
27 121         2313 my $relationship = Aniki::Schema::Relationship->new(schema => $self->schema, @_);
28              
29 121         1917 my $name = $relationship->name;
30 121 50       557 exists $self->rule->{$name}
31 0         0 and die "already exists $name in rule. (table:@{[ $self->table->name ]})";
32 121         637 $self->rule->{$name} = $relationship;
33             }
34              
35             sub add_by_constraint {
36 7     7 0 270 my ($self, $constraint) = @_;
37 7 50       169 die "Invalid constraint: @{[ $constraint->name ]}. (table:@{[ $self->table->name ]})" if $constraint->type ne FOREIGN_KEY;
  0         0  
  0         0  
38              
39 7 100       764 if ($constraint->table->name eq $self->table->name) {
    50          
40 4         820 $self->add(
41             src_table_name => $constraint->table->name,
42             src_columns => [$constraint->field_names],
43             dest_table_name => $constraint->reference_table,
44             dest_columns => [$constraint->reference_fields],
45             );
46             }
47             elsif ($constraint->reference_table eq $self->table->name) {
48 3         671 $self->add(
49             src_table_name => $constraint->reference_table,
50             src_columns => [$constraint->reference_fields],
51             dest_table_name => $constraint->table->name,
52             dest_columns => [$constraint->field_names],
53             );
54             }
55             else {
56 0         0 die "Invalid constraint: @{[ $constraint->name ]}. (table:@{[ $self->table->name ]})";
  0         0  
  0         0  
57             }
58             }
59              
60             sub names {
61 210     210 0 334 my $self = shift;
62 210         340 return keys %{ $self->rule };
  210         732  
63             }
64              
65             sub all {
66 207     207 0 353 my $self = shift;
67 207         457 return map { $self->get($_) } $self->names;
  298         640  
68             }
69              
70             sub get {
71 340     340 0 645 my ($self, $name) = @_;
72 340 100       1073 return unless exists $self->rule->{$name};
73 336         1132 return $self->rule->{$name};
74             }
75              
76             __PACKAGE__->meta->make_immutable();
77             __END__