Commit | Line | Data |
df9a9c12 |
1 | package DBIx::Class::IntrospectableM2M; |
2 | |
3 | use strict; |
4 | use warnings; |
5 | use base 'DBIx::Class'; |
6 | |
7 | #namespace pollution. sadface. |
8 | __PACKAGE__->mk_classdata( _m2m_metadata => {} ); |
9 | |
10 | sub many_to_many { |
11 | my $class = shift; |
12 | my ($meth_name, $link, $far_side) = @_; |
13 | |
14 | $class->_m2m_metadata->{$meth_name} = |
15 | { |
16 | accessor => $meth_name, |
17 | relation => $link, #"link" table or imediate relation |
18 | foreign_relation => $far_side, #'far' table or foreign relation |
19 | (@_ > 3 ? (attrs => $_[3]) : ()), #only store if exist |
20 | rs_method => "${meth_name}_rs", #for completeness.. |
21 | add_method => "add_to_${meth_name}", |
22 | set_method => "set_${meth_name}", |
23 | remove_method => "remove_from_${meth_name}", |
24 | }; |
25 | |
26 | $class->next::method(@_); |
27 | } |
28 | |
29 | 1; |