X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSetManager.pm;h=c2af0f23e68b4ad727eff17ef9a99c1c12b1abd9;hb=1c258fc1b3bc48e162b6b05e325625d6a75cb217;hp=8bfe4ed8d65f6303bcb1657b06b084e9194dc7f6;hpb=f0750722cda0ea1e7a6588075c6518642d1e48fc;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/ResultSetManager.pm b/lib/DBIx/Class/ResultSetManager.pm index 8bfe4ed..c2af0f2 100644 --- a/lib/DBIx/Class/ResultSetManager.pm +++ b/lib/DBIx/Class/ResultSetManager.pm @@ -9,9 +9,12 @@ __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,15 +25,17 @@ sub load_resultset_components { sub _register_attributes { my $self = shift; + return unless $self->can('_attr_cache'); + my $cache = $self->_attr_cache; foreach my $meth (@{Class::Inspector->methods($self) || []}) { my $attrs = $cache->{$self->can($meth)}; next unless $attrs; - if ($attrs->[0] eq 'resultset') { + 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}; } } } @@ -56,4 +61,37 @@ sub _register_resultset_class { } } -1; \ No newline at end of file +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