version bump, deprecated ResultSetManager
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / ResultSetManager.pm
1 package DBIx::Class::ResultSetManager;
2 use strict;
3 use warnings;
4 use base 'DBIx::Class';
5 use Class::Inspector;
6
7 warn "DBIx::Class::ResultSetManager never left experimental status and
8 has now been DEPRECATED. This module will be deleted in 09000 so please
9 migrate any and all code using it to explicit resultset classes using either
10 __PACKAGE__->resultset_class(...) calls or by switching from using
11 DBIx::Class::Schema->load_classes() to load_namespaces() and creating
12 appropriate My::Schema::ResultSet::* classes for it to pick up.";
13
14 =head1 NAME
15
16 DBIx::Class::ResultSetManager - scheduled for deletion in 09000
17
18 =head1 DESCRIPTION
19
20 DBIx::Class::ResultSetManager never left experimental status and
21 has now been DEPRECATED. This module will be deleted in 09000 so please
22 migrate any and all code using it to explicit resultset classes using either
23 __PACKAGE__->resultset_class(...) calls or by switching from using
24 DBIx::Class::Schema->load_classes() to load_namespaces() and creating
25 appropriate My::Schema::ResultSet::* classes for it to pick up.";
26
27 =cut
28
29 __PACKAGE__->mk_classdata($_)
30   for qw/ base_resultset_class table_resultset_class_suffix /;
31 __PACKAGE__->base_resultset_class('DBIx::Class::ResultSet');
32 __PACKAGE__->table_resultset_class_suffix('::_resultset');
33
34 sub table {
35     my ($self,@rest) = @_;
36     my $ret = $self->next::method(@rest);
37     if (@rest) {
38         $self->_register_attributes;
39         $self->_register_resultset_class;
40     }
41     return $ret;
42 }
43
44 sub load_resultset_components {
45     my ($self,@comp) = @_;
46     my $resultset_class = $self->_setup_resultset_class;
47     $resultset_class->load_components(@comp);
48 }
49
50 sub _register_attributes {
51     my $self = shift;
52     my $cache = $self->_attr_cache;
53     return if keys %$cache == 0;
54
55     foreach my $meth (@{Class::Inspector->methods($self) || []}) {
56         my $attrs = $cache->{$self->can($meth)};
57         next unless $attrs;
58         if ($attrs->[0] eq 'ResultSet') {
59             no strict 'refs';
60             my $resultset_class = $self->_setup_resultset_class;
61             *{"$resultset_class\::$meth"} = $self->can($meth);
62             delete ${"${self}::"}{$meth};
63         }
64     }
65 }
66
67 sub _setup_resultset_class {
68     my $self = shift;
69     my $resultset_class = $self . $self->table_resultset_class_suffix;
70     no strict 'refs';
71     unless (@{"$resultset_class\::ISA"}) {
72         @{"$resultset_class\::ISA"} = ($self->base_resultset_class);
73     }
74     return $resultset_class;
75 }
76
77 sub _register_resultset_class {
78     my $self = shift;
79     my $resultset_class = $self . $self->table_resultset_class_suffix;
80     no strict 'refs';
81     if (@{"$resultset_class\::ISA"}) {
82         $self->result_source_instance->resultset_class($resultset_class);
83     } else {
84         $self->result_source_instance->resultset_class
85           ($self->base_resultset_class);
86     }
87 }
88
89 1;