X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSetManager.pm;h=3ae9502c72382029d3dff5ecd5eaa8dee475156f;hb=2d9a96fd40eb4be24a9a254953e1e3cd8e20ea3a;hp=eb184371063be5d70179d41fe3e5705aa2ef0fff;hpb=24d67825c6b2e604a349ccd5de0df1956c0d98dc;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSetManager.pm b/lib/DBIx/Class/ResultSetManager.pm index eb18437..3ae9502 100644 --- a/lib/DBIx/Class/ResultSetManager.pm +++ b/lib/DBIx/Class/ResultSetManager.pm @@ -1,10 +1,37 @@ package DBIx::Class::ResultSetManager; use strict; +use warnings; use base 'DBIx::Class'; -use Class::Inspector; +use Package::Stash (); -__PACKAGE__->mk_classdata($_) - for qw/ base_resultset_class table_resultset_class_suffix /; +use DBIx::Class::_Util 'set_subname'; +use namespace::clean; + +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_group_accessors(inherited => qw( + base_resultset_class table_resultset_class_suffix +)); __PACKAGE__->base_resultset_class('DBIx::Class::ResultSet'); __PACKAGE__->table_resultset_class_suffix('::_resultset'); @@ -13,7 +40,7 @@ sub table { my $ret = $self->next::method(@rest); if (@rest) { $self->_register_attributes; - $self->_register_resultset_class; + $self->_register_resultset_class; } return $ret; } @@ -28,14 +55,24 @@ sub _register_attributes { my $self = shift; my $cache = $self->_attr_cache; return if keys %$cache == 0; - - foreach my $meth (@{Class::Inspector->methods($self) || []}) { + + foreach my $meth (keys %{ { map + { $_ => 1 } + map + { Package::Stash->new($_)->list_all_symbols("CODE") } + @{ mro::get_linear_isa( ref $self || $self ) } + } } ) { + # *DO NOT* rely on P::S returning crefs in reverse mro order + # but instead ask the mro to redo the lookup + # This codepath is extremely old, miht as well keep it running + # as-is with no room for surprises 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->can($meth); + my $name = join '::',$resultset_class, $meth; + *$name = set_subname $name, $self->can($meth); delete ${"${self}::"}{$meth}; } } @@ -59,54 +96,21 @@ sub _register_resultset_class { $self->result_source_instance->resultset_class($resultset_class); } else { $self->result_source_instance->resultset_class - ($self->base_resultset_class); + ($self->base_resultset_class); } } -1; - -__END__ +=head1 FURTHER QUESTIONS? -=head1 NAME +Check the list of L. - DBIx::Class::ResultSetManager - helpful methods for managing - resultset classes (EXPERIMENTAL) +=head1 COPYRIGHT AND LICENSE -=head1 SYNOPSIS - - # in a table class - __PACKAGE__->load_components(qw/ResultSetManager Core/); # note order! - __PACKAGE__->load_resultset_components(qw/AlwaysRS/); - - # will be removed from the table class and inserted into a - # table-specific resultset class - sub search_by_year_desc : ResultSet { - my $self = shift; - my $cond = shift; - my $attrs = shift || {}; - $attrs->{order_by} = 'year DESC'; - $self->next::method($cond, $attrs); - } - - $rs = $schema->resultset('CD')->search_by_year_desc({ artist => 'Tool' }); - -=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, but configurable via -C). Most of the magic is done when you -call C<< __PACKAGE__->table >>. - -=head1 AUTHORS - -David Kamholz - -=head1 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 + +1;