• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /macosx-10.9.5/CPANInternal-140/DBIx-Class-Schema-Loader-0.07033/lib/DBIx/Class/Schema/Loader/RelBuilder/Compat/
1package DBIx::Class::Schema::Loader::RelBuilder::Compat::v0_05;
2
3use strict;
4use warnings;
5use base 'DBIx::Class::Schema::Loader::RelBuilder::Compat::v0_06';
6use mro 'c3';
7use DBIx::Class::Schema::Loader::Utils 'array_eq';
8use namespace::clean;
9use Lingua::EN::Inflect::Number ();
10
11our $VERSION = '0.07033';
12
13sub _to_PL {
14    my ($self, $name) = @_;
15
16    return Lingua::EN::Inflect::Number::to_PL($name);
17}
18
19sub _to_S {
20    my ($self, $name) = @_;
21
22    return Lingua::EN::Inflect::Number::to_S($name);
23}
24
25sub _default_relationship_attrs { +{} }
26
27sub _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 $remote_relname = $self->_remote_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 ($local_relname, $local_relname_uninflected);
41    if ( $counters->{$remote_moniker} > 1) {
42        my $colnames = lc(q{_} . join(q{_}, map lc($_), @$local_cols));
43        $remote_relname .= $colnames if keys %$cond > 1;
44
45        $local_relname = lc($local_table) . $colnames;
46
47        $local_relname_uninflected = $local_relname;
48        ($local_relname) = $self->_inflect_plural( $local_relname );
49    } else {
50        $local_relname_uninflected = lc $local_table;
51        ($local_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        ($local_relname) = $self->_inflect_singular($local_relname_uninflected);
62    }
63
64    return ( $local_relname, $remote_relname, $remote_method );
65}
66
67=head1 NAME
68
69DBIx::Class::Schema::Loader::RelBuilder::Compat::v0_05 - RelBuilder for
70compatibility with DBIx::Class::Schema::Loader version 0.05003
71
72=head1 DESCRIPTION
73
74See L<DBIx::Class::Schema::Loader::Base/naming> and
75L<DBIx::Class::Schema::Loader::RelBuilder>.
76
77=head1 AUTHOR
78
79See L<DBIx::Class::Schema::Loader/AUTHOR> and L<DBIx::Class::Schema::Loader/CONTRIBUTORS>.
80
81=head1 LICENSE
82
83This library is free software; you can redistribute it and/or modify it under
84the same terms as Perl itself.
85
86=cut
87
881;
89