Expand/fortify the handling of attributes
[dbsrgits/DBIx-Class-Historic.git] / lib / DBIx / Class / AccessorGroup.pm
CommitLineData
fe5d862b 1package DBIx::Class::AccessorGroup;
2
12bbb339 3use strict;
4use warnings;
5
73281318 6use base qw/Class::Accessor::Grouped/;
91fe73bc 7use Scalar::Util qw/weaken blessed/;
e5053694 8use DBIx::Class::_Util 'fail_on_internal_call';
0d374214 9use namespace::clean;
701da8c4 10
d009cb7d 11sub mk_classdata {
e5053694 12 DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call;
d009cb7d 13 shift->mk_classaccessor(@_);
14}
15
16sub mk_classaccessor {
17 my $self = shift;
18 $self->mk_group_accessors('inherited', $_[0]);
e5053694 19 (@_ > 1)
20 ? $self->set_inherited(@_)
21 : ( DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call )
22 ;
d009cb7d 23}
24
0d374214 25my $successfully_loaded_components;
db29433c 26
27sub get_component_class {
28 my $class = $_[0]->get_inherited($_[1]);
0d374214 29
91fe73bc 30 # It's already an object, just go for it.
31 return $class if blessed $class;
32
0d374214 33 if (defined $class and ! $successfully_loaded_components->{$class} ) {
db29433c 34 $_[0]->ensure_class_loaded($class);
0d374214 35
d009cb7d 36 mro::set_mro( $class, 'c3' );
37
0d374214 38 no strict 'refs';
39 $successfully_loaded_components->{$class}
40 = ${"${class}::__LOADED__BY__DBIC__CAG__COMPONENT_CLASS__"}
41 = do { \(my $anon = 'loaded') };
42 weaken($successfully_loaded_components->{$class});
db29433c 43 }
0d374214 44
db29433c 45 $class;
46};
47
48sub set_component_class {
dd185339 49 $_[0]->set_inherited($_[1], $_[2]);
50
51 # trigger a load for the case of $foo->component_accessor("bar")->new
52 $_[0]->get_component_class($_[1])
53 if defined wantarray;
db29433c 54}
55
fe0e9f67 561;
57
75d07914 58=head1 NAME
34d52be2 59
73281318 60DBIx::Class::AccessorGroup - See Class::Accessor::Grouped
34d52be2 61
62=head1 SYNOPSIS
63
64=head1 DESCRIPTION
65
73281318 66This class now exists in its own right on CPAN as Class::Accessor::Grouped
fc969005 67
a2bd3796 68=head1 FURTHER QUESTIONS?
34d52be2 69
a2bd3796 70Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
34d52be2 71
a2bd3796 72=head1 COPYRIGHT AND LICENSE
34d52be2 73
a2bd3796 74This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
75by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
76redistribute it and/or modify it under the same terms as the
77L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
34d52be2 78
79=cut