X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSetManager.pm;h=d2746e58fdc5b4daf463108baad082d4e51260b8;hb=fcf32d045;hp=754bce2bd6b55d2615c06b8cd7f3c5e9273e5ee1;hpb=db57afbbeb91c8b53368b993a5c0c763cecfd753;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSetManager.pm b/lib/DBIx/Class/ResultSetManager.pm index 754bce2..d2746e5 100644 --- a/lib/DBIx/Class/ResultSetManager.pm +++ b/lib/DBIx/Class/ResultSetManager.pm @@ -1,21 +1,45 @@ package DBIx::Class::ResultSetManager; use strict; +use warnings; use base 'DBIx::Class'; +use Sub::Name (); use Class::Inspector; -__PACKAGE__->mk_classdata($_) for qw/ _attr_cache custom_resultset_class_suffix /; -__PACKAGE__->_attr_cache({}); -__PACKAGE__->custom_resultset_class_suffix('::_rs'); +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."; -sub base_resultset_class { - my ($self,$class) = @_; - $self->result_source_instance->resultset_class($class); -} +=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; + my $ret = $self->next::method(@rest); + if (@rest) { + $self->_register_attributes; + $self->_register_resultset_class; + } + return $ret; } sub load_resultset_components { @@ -24,37 +48,44 @@ sub load_resultset_components { $resultset_class->load_components(@comp); } -sub MODIFY_CODE_ATTRIBUTES { - my ($class,$code,@attrs) = @_; - $class->_attr_cache({ %{$class->_attr_cache}, $code => [@attrs] }); - return (); -} - sub _register_attributes { my $self = shift; 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') { + if ($attrs->[0] eq 'ResultSet') { no strict 'refs'; my $resultset_class = $self->_setup_resultset_class; - *{"$resultset_class\::$meth"} = *{"$self\::$meth"}; - undef *{"$self\::$meth"}; + my $name = join '::',$resultset_class, $meth; + *$name = Sub::Name::subname $name, $self->can($meth); + delete ${"${self}::"}{$meth}; } } - $self->_attr_cache(undef); } sub _setup_resultset_class { my $self = shift; - my $resultset_class = $self . $self->custom_resultset_class_suffix; + my $resultset_class = $self . $self->table_resultset_class_suffix; no strict 'refs'; unless (@{"$resultset_class\::ISA"}) { - @{"$resultset_class\::ISA"} = ($self->result_source_instance->resultset_class); - $self->result_source_instance->resultset_class($resultset_class); + @{"$resultset_class\::ISA"} = ($self->base_resultset_class); } return $resultset_class; } -1; \ No newline at end of file +sub _register_resultset_class { + my $self = shift; + my $resultset_class = $self . $self->table_resultset_class_suffix; + no strict 'refs'; + if (@{"$resultset_class\::ISA"}) { + $self->result_source_instance->resultset_class($resultset_class); + } else { + $self->result_source_instance->resultset_class + ($self->base_resultset_class); + } +} + +1;