blob: e3a921e506652e7b1859f89efea48833281e4249 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package DBIx::Class::IntrospectableM2M;
use strict;
use warnings;
use base 'DBIx::Class';
#namespace pollution. sadface.
__PACKAGE__->mk_classdata( _m2m_metadata => {} );
sub many_to_many {
my $class = shift;
my ($meth_name, $link, $far_side) = @_;
my $store = $class->_m2m_metadata;
die("You are overwritting another relationship's metadata")
if exists $store->{$meth_name};
my $attrs =
{
accessor => $meth_name,
relation => $link, #"link" table or imediate relation
foreign_relation => $far_side, #'far' table or foreign relation
(@_ > 3 ? (attrs => $_[3]) : ()), #only store if exist
rs_method => "${meth_name}_rs", #for completeness..
add_method => "add_to_${meth_name}",
set_method => "set_${meth_name}",
remove_method => "remove_from_${meth_name}",
};
#inheritable data workaround/
$class->_m2m_metadata({ $meth_name => $attrs, %$store});
$class->next::method(@_);
}
1;
|