Release 0.07047
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / RelBuilder / Compat / v0_05.pm
1 package DBIx::Class::Schema::Loader::RelBuilder::Compat::v0_05;
2
3 use strict;
4 use warnings;
5 use base 'DBIx::Class::Schema::Loader::RelBuilder::Compat::v0_06';
6 use mro 'c3';
7 use DBIx::Class::Schema::Loader::Utils 'array_eq';
8 use namespace::clean;
9 use Lingua::EN::Inflect::Number ();
10
11 our $VERSION = '0.07047';
12
13 sub _to_PL {
14     my ($self, $name) = @_;
15
16     return Lingua::EN::Inflect::Number::to_PL($name);
17 }
18
19 sub _to_S {
20     my ($self, $name) = @_;
21
22     return Lingua::EN::Inflect::Number::to_S($name);
23 }
24
25 sub _default_relationship_attrs { +{} }
26
27 sub _relnames_and_method {
28     my ( $self, $local_moniker, $rel, $cond, $uniqs, $counters ) = @_;
29
30     my $remote_moniker = $rel->{remote_source};
31     my $remote_obj     = $self->{schema}->source( $remote_moniker );
32     my $remote_class   = $self->{schema}->class(  $remote_moniker );
33     my $local_relname  = $self->_local_relname( $rel->{remote_table}, $cond);
34
35     my $local_cols  = $rel->{local_columns};
36     my $local_table = $rel->{local_table};
37
38     # If more than one rel between this pair of tables, use the local
39     # col names to distinguish
40     my ($remote_relname, $remote_relname_uninflected);
41     if ( $counters->{$remote_moniker} > 1) {
42         my $colnames = lc(q{_} . join(q{_}, map lc($_), @$local_cols));
43         $local_relname .= $colnames if keys %$cond > 1;
44
45         $remote_relname = lc($local_table) . $colnames;
46
47         $remote_relname_uninflected = $remote_relname;
48         ($remote_relname) = $self->_inflect_plural( $remote_relname );
49     } else {
50         $remote_relname_uninflected = lc $local_table;
51         ($remote_relname) = $self->_inflect_plural(lc $local_table);
52     }
53
54     my $remote_method = 'has_many';
55
56     # If the local columns have a UNIQUE constraint, this is a one-to-one rel
57     my $local_source = $self->{schema}->source($local_moniker);
58     if (array_eq([ $local_source->primary_columns ], $local_cols) ||
59             grep { array_eq($_->[1], $local_cols) } @$uniqs) {
60         $remote_method = 'might_have';
61         ($remote_relname) = $self->_inflect_singular($remote_relname_uninflected);
62     }
63
64     return ( $local_relname, $remote_relname, $remote_method );
65 }
66
67 =head1 NAME
68
69 DBIx::Class::Schema::Loader::RelBuilder::Compat::v0_05 - RelBuilder for
70 compatibility with DBIx::Class::Schema::Loader version 0.05003
71
72 =head1 DESCRIPTION
73
74 See L<DBIx::Class::Schema::Loader::Base/naming> and
75 L<DBIx::Class::Schema::Loader::RelBuilder>.
76
77 =head1 AUTHORS
78
79 See L<DBIx::Class::Schema::Loader/AUTHORS>.
80
81 =head1 LICENSE
82
83 This library is free software; you can redistribute it and/or modify it under
84 the same terms as Perl itself.
85
86 =cut
87
88 1;