X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSetManager.pm;h=721c84c7fd59d6bc1f6b4069bae4e5dc17783cf5;hb=748ab0dca771812bd2c733366fe91c561cd4afbf;hp=c3ab98d4c60319796fccde3645135ab5de1f04b3;hpb=a39e84a316835c1560df02133bb1d74d33336211;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSetManager.pm b/lib/DBIx/Class/ResultSetManager.pm index c3ab98d..721c84c 100644 --- a/lib/DBIx/Class/ResultSetManager.pm +++ b/lib/DBIx/Class/ResultSetManager.pm @@ -1,17 +1,44 @@ package DBIx::Class::ResultSetManager; use strict; +use warnings; use base 'DBIx::Class'; use Class::Inspector; -__PACKAGE__->mk_classdata($_) for qw/ base_resultset_class table_resultset_class_suffix /; +warn "DBIx::Class::ResultSetManager never left experimental status and +has now been DEPRECATED. This module will be deleted in 09000 so please +migrate any and all code using it to explicit resultset classes using either +__PACKAGE__->resultset_class(...) calls or by switching from using +DBIx::Class::Schema->load_classes() to load_namespaces() and creating +appropriate My::Schema::ResultSet::* classes for it to pick up."; + +=head1 NAME + +DBIx::Class::ResultSetManager - scheduled for deletion in 09000 + +=head1 DESCRIPTION + +DBIx::Class::ResultSetManager never left experimental status and +has now been DEPRECATED. This module will be deleted in 09000 so please +migrate any and all code using it to explicit resultset classes using either +__PACKAGE__->resultset_class(...) calls or by switching from using +DBIx::Class::Schema->load_classes() to load_namespaces() and creating +appropriate My::Schema::ResultSet::* classes for it to pick up."; + +=cut + +__PACKAGE__->mk_classdata($_) + for qw/ base_resultset_class table_resultset_class_suffix /; __PACKAGE__->base_resultset_class('DBIx::Class::ResultSet'); __PACKAGE__->table_resultset_class_suffix('::_resultset'); sub table { my ($self,@rest) = @_; - $self->next::method(@rest); - $self->_register_attributes; - $self->_register_resultset_class; + my $ret = $self->next::method(@rest); + if (@rest) { + $self->_register_attributes; + $self->_register_resultset_class; + } + return $ret; } sub load_resultset_components { @@ -22,17 +49,17 @@ sub load_resultset_components { sub _register_attributes { my $self = shift; - return unless $self->can('_attr_cache'); - my $cache = $self->_attr_cache; + return if keys %$cache == 0; + foreach my $meth (@{Class::Inspector->methods($self) || []}) { my $attrs = $cache->{$self->can($meth)}; next unless $attrs; if ($attrs->[0] eq 'ResultSet') { no strict 'refs'; my $resultset_class = $self->_setup_resultset_class; - *{"$resultset_class\::$meth"} = *{"$self\::$meth"}; - undef *{"$self\::$meth"}; + *{"$resultset_class\::$meth"} = $self->can($meth); + delete ${"${self}::"}{$meth}; } } } @@ -52,43 +79,11 @@ sub _register_resultset_class { my $resultset_class = $self . $self->table_resultset_class_suffix; no strict 'refs'; if (@{"$resultset_class\::ISA"}) { - $self->result_source_instance->resultset_class($resultset_class); + $self->result_source_instance->resultset_class($resultset_class); } else { - $self->result_source_instance->resultset_class($self->base_resultset_class); + $self->result_source_instance->resultset_class + ($self->base_resultset_class); } } 1; - -__END__ - -=head1 NAME - - DBIx::Class::ResultSetManager - helpful methods for managing resultset classes (EXPERIMENTAL) - -=head1 SYNOPSIS - - # in a table class - __PACKAGE__->load_components(qw/ResultSetManager/); - __PACKAGE__->load_resultset_components(qw/AlwaysRS/); - - # will be removed from the table class and inserted into a table-specific resultset class - sub foo : resultset { ... } - -=head1 DESCRIPTION - -This package implements two useful features for customizing resultset classes. -C loads components in addition to C -(or whatever you set as C). Any methods tagged with the C -attribute will be moved into a table-specific resultset class (by default called -C). - -=head1 AUTHORS - -David Kamholz - -=head1 LICENSE - -You may distribute this code under the same terms as Perl itself. - -=cut