X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FAccessorGroup.pm;h=12a8744b2042594794608711532fc6179552b0f8;hb=d009cb7d393292037eff527a9f8bab93860224fb;hp=4d7e0469096d10caf215aa52e884703cee4e08b2;hpb=a50c9d6098b35b2a0a67d85ef4b154b265f5b752;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/AccessorGroup.pm b/lib/DBIx/Class/AccessorGroup.pm index 4d7e046..12a8744 100644 --- a/lib/DBIx/Class/AccessorGroup.pm +++ b/lib/DBIx/Class/AccessorGroup.pm @@ -4,6 +4,45 @@ use strict; use warnings; use base qw/Class::Accessor::Grouped/; +use Scalar::Util qw/weaken blessed/; +use namespace::clean; + +sub mk_classdata { + shift->mk_classaccessor(@_); +} + +sub mk_classaccessor { + my $self = shift; + $self->mk_group_accessors('inherited', $_[0]); + $self->set_inherited(@_) if @_ > 1; +} + +my $successfully_loaded_components; + +sub get_component_class { + my $class = $_[0]->get_inherited($_[1]); + + # It's already an object, just go for it. + return $class if blessed $class; + + if (defined $class and ! $successfully_loaded_components->{$class} ) { + $_[0]->ensure_class_loaded($class); + + mro::set_mro( $class, 'c3' ); + + no strict 'refs'; + $successfully_loaded_components->{$class} + = ${"${class}::__LOADED__BY__DBIC__CAG__COMPONENT_CLASS__"} + = do { \(my $anon = 'loaded') }; + weaken($successfully_loaded_components->{$class}); + } + + $class; +}; + +sub set_component_class { + shift->set_inherited(@_); +} 1; @@ -17,13 +56,15 @@ DBIx::Class::AccessorGroup - See Class::Accessor::Grouped This class now exists in its own right on CPAN as Class::Accessor::Grouped -=head1 AUTHORS +=head1 FURTHER QUESTIONS? -Matt S. Trout +Check the list of L. -=head1 LICENSE +=head1 COPYRIGHT AND LICENSE -You may distribute this code under the same terms as Perl itself. +This module is free software L +by the L. You can +redistribute it and/or modify it under the same terms as the +L. =cut -