use Class::Unload ();
use Class::Inspector ();
-our $VERSION = '0.07036_01';
+our $VERSION = '0.07038';
# Glossary:
#
$self->_relnames_and_method( $local_moniker, $rel, \%cond, $uniqs, \%counters );
my $local_method = 'belongs_to';
- ($remote_relname) = $self->_rel_name_map($remote_relname, $local_method, $local_class, $local_moniker, $local_cols, $remote_class, $remote_moniker, $remote_cols);
- ($local_relname) = $self->_rel_name_map($local_relname, $remote_method, $remote_class, $remote_moniker, $remote_cols, $local_class, $local_moniker, $local_cols);
+ ($remote_relname) = $self->_rel_name_map(
+ $remote_relname, $local_method,
+ $local_class, $local_moniker, $local_cols,
+ $remote_class, $remote_moniker, $remote_cols,
+ );
+ ($local_relname) = $self->_rel_name_map(
+ $local_relname, $remote_method,
+ $remote_class, $remote_moniker, $remote_cols,
+ $local_class, $local_moniker, $local_cols,
+ );
- $remote_relname = $self->_resolve_relname_collision($local_moniker, $local_cols, $remote_relname);
- $local_relname = $self->_resolve_relname_collision($remote_moniker, $remote_cols, $local_relname);
+ $remote_relname = $self->_resolve_relname_collision(
+ $local_moniker, $local_cols, $remote_relname,
+ );
+ $local_relname = $self->_resolve_relname_collision(
+ $remote_moniker, $remote_cols, $local_relname,
+ );
my $rel_attrs_params = {
rel_name => $remote_relname,
remote_cols => $remote_cols,
};
- push(@{$all_code->{$local_class}},
- { method => $local_method,
- args => [ $remote_relname,
- $remote_class,
- \%cond,
- $self->_remote_attrs($local_moniker, $local_cols, $rel->{attrs}, $rel_attrs_params),
- ],
- extra => {
- local_class => $local_class,
- local_moniker => $local_moniker,
- remote_moniker => $remote_moniker,
- },
- }
- );
+ push @{$all_code->{$local_class}}, {
+ method => $local_method,
+ args => [
+ $remote_relname,
+ $remote_class,
+ \%cond,
+ $self->_remote_attrs($local_moniker, $local_cols, $rel->{attrs}, $rel_attrs_params),
+ ],
+ extra => {
+ local_class => $local_class,
+ local_moniker => $local_moniker,
+ remote_moniker => $remote_moniker,
+ },
+ };
my %rev_cond = reverse %cond;
for (keys %rev_cond) {
remote_cols => $local_cols,
};
- push(@{$all_code->{$remote_class}},
- { method => $remote_method,
- args => [ $local_relname,
- $local_class,
- \%rev_cond,
- $self->_relationship_attrs($remote_method, {}, $rel_attrs_params),
- ],
- extra => {
- local_class => $remote_class,
- local_moniker => $remote_moniker,
- remote_moniker => $local_moniker,
- },
- }
- );
+ push @{$all_code->{$remote_class}}, {
+ method => $remote_method,
+ args => [
+ $local_relname,
+ $local_class,
+ \%rev_cond,
+ $self->_relationship_attrs($remote_method, {}, $rel_attrs_params),
+ ],
+ extra => {
+ local_class => $remote_class,
+ local_moniker => $remote_moniker,
+ remote_moniker => $local_moniker,
+ },
+ };
}
}
remote_columns => $remote_cols,
};
- my $new_name = $relname;
+ $self->_run_user_map($self->rel_name_map, $info);
+}
+
+sub _run_user_map {
+ my ($self, $map, $info) = @_;
- my $map = $self->rel_name_map;
+ my $new_name = $info->{name};
my $mapped = 0;
if ('HASH' eq ref($map)) {
}
}
elsif ('CODE' eq ref($map)) {
- my $name = $map->($info);
+ my $cb = sub {
+ my ($cb_map) = @_;
+ croak "reentered rel_name_map must be a hashref"
+ unless 'HASH' eq ref($cb_map);
+ my ($cb_name, $cb_mapped) = $self->_run_user_map($cb_map, $info);
+ return $cb_mapped && $cb_name;
+ };
+ my $name = $map->($info, $cb);
if ($name) {
$new_name = $name;
$mapped = 1;