Aniki

 view release on metacpan or  search on metacpan

lib/Aniki/Schema/Relationship.pm  view on Meta::CPAN

package Aniki::Schema::Relationship;
use 5.014002;

use namespace::autoclean;
use Mouse v2.4.5;
use Aniki::Schema::Relationship::Fetcher;
use Lingua::EN::Inflect qw/PL/;
use Hash::Util::FieldHash qw/fieldhash/;

our @WORD_SEPARATORS = ('-', '_', ' ');

has schema => (
    is       => 'ro',
    required => 1,
    weak_ref => 1,
);

has src_table_name => (
    is       => 'ro',
    required => 1,
);

has src_columns => (
    is       => 'ro',
    required => 1,
);

has dest_table_name => (
    is       => 'ro',
    required => 1,
);

has dest_columns => (
    is       => 'ro',
    required => 1,
);

has has_many => (
    is      => 'ro',
    default => sub {
        my $self = shift;
        return $self->schema->has_many($self->dest_table_name, $self->dest_columns);
    },
);

has name => (
    is       => 'ro',
    default  => \&_guess_name,
);

has fetcher => (
    is      => 'ro',
    default => sub { Aniki::Schema::Relationship::Fetcher->new(relationship => $_[0]) },
);

sub _guess_name {
    my $self = shift;

    my @src_columns     = @{ $self->src_columns };
    my @dest_columns    = @{ $self->dest_columns };
    my $src_table_name  = $self->src_table_name;
    my $dest_table_name = $self->dest_table_name;

    my $prefix = (@src_columns  == 1 && $src_columns[0]  =~ /^(.+)_\Q$dest_table_name/) ? $1.'_' :



( run in 0.984 second using v1.01-cache-2.11-cpan-5a3173703d6 )