X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRelationship%2FProxyMethods.pm;h=11a4e286f852a64d77f28b673ceea9ed4fdbc4e9;hb=223b8fe3185dba976b275c120ba7a07c05c06644;hp=ede62a7e00952f76370da77aaa1daf4e0c60a5e0;hpb=74b92d9a6f3501f2db4e612da228b5debb33ac30;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Relationship/ProxyMethods.pm b/lib/DBIx/Class/Relationship/ProxyMethods.pm index ede62a7..11a4e28 100644 --- a/lib/DBIx/Class/Relationship/ProxyMethods.pm +++ b/lib/DBIx/Class/Relationship/ProxyMethods.pm @@ -9,22 +9,28 @@ sub add_relationship { my ($class, $rel, @rest) = @_; my $ret = $class->NEXT::ACTUAL::add_relationship($rel => @rest); if (my $proxy_list = $class->_relationships->{$rel}->{attrs}{proxy}) { - no strict 'refs'; - no warnings 'redefine'; - foreach my $proxy (ref $proxy_list ? @$proxy_list : $proxy_list) { - *{"${class}::${proxy}"} = - sub { - my $self = shift; - my $val = $self->$rel; - if (@_ && !defined $val) { - $val = $self->create_related($rel, { $proxy => $_[0] }); - @_ = (); - } - return ($val ? $val->$proxy(@_) : undef); - } - } + $class->proxy_to_related($rel, + (ref $proxy_list ? @$proxy_list : $proxy_list)); } return $ret; } +sub proxy_to_related { + my ($class, $rel, @proxy) = @_; + no strict 'refs'; + no warnings 'redefine'; + foreach my $proxy (@proxy) { + *{"${class}::${proxy}"} = + sub { + my $self = shift; + my $val = $self->$rel; + if (@_ && !defined $val) { + $val = $self->create_related($rel, { $proxy => $_[0] }); + @_ = (); + } + return ($val ? $val->$proxy(@_) : undef); + } + } +} + 1;