X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader.pm;h=5a273eded194ce7db53351d3eaf1bdac1576af0a;hb=3bb5544fe304b62db827672ddab3435ebda14d7a;hp=78b05077065de95daa98a75b9b326e6805525589;hpb=cc15b78ff04f40dad669e62bdba95865d246ad11;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader.pm b/lib/DBIx/Class/Schema/Loader.pm index 78b0507..5a273ed 100644 --- a/lib/DBIx/Class/Schema/Loader.pm +++ b/lib/DBIx/Class/Schema/Loader.pm @@ -218,7 +218,8 @@ as soon as the connection information is defined. =cut sub connection { - my $self = shift; + my $self = shift; + my $class = ref $self || $self; if($_[-1] && ref $_[-1] eq 'HASH') { for my $option (qw/loader_class loader_options/) { @@ -233,7 +234,10 @@ sub connection { # before connecting. require DBIx::Class::Schema::Loader::Base; my $temp_loader = DBIx::Class::Schema::Loader::Base->new( - %{ $self->_loader_args } + %{ $self->_loader_args }, + schema => $self, + naming => 'current', + use_namespaces => 1, ); if ($temp_loader->schema_base_class || $temp_loader->schema_components) { @@ -243,11 +247,10 @@ sub connection { push @components, ('+'.$temp_loader->schema_base_class) if $temp_loader->schema_base_class; - $self->load_components(@components); - } + $class->load_components(@components); - # This hack is necessary if we changed @ISA of $self through ->load_components. - { + # This hack is necessary because we changed @ISA of $self through + # ->load_components and we are now in a different place in the mro. no warnings 'redefine'; local *connection = subname __PACKAGE__.'::connection' => sub { @@ -255,10 +258,22 @@ sub connection { $self->next::method(@_); }; - $self = $self->connection(@_); + my @linear_isa = @{ mro::get_linear_isa($class) }; + + my $next_method; + + foreach my $i (1..$#linear_isa) { + no strict 'refs'; + $next_method = *{$linear_isa[$i].'::connection'}{CODE}; + last if $next_method; + } + + $self = $self->$next_method(@_); + } + else { + $self = $self->next::method(@_); } - my $class = ref $self || $self; if(!$class->_loader_invoked) { $self->_invoke_loader } @@ -554,7 +569,7 @@ spb: Stephen Bennett Matias E. Fernandez -Al Newkirk +alnewkirk: Al Newkirk ... and lots of other folks. If we forgot you, please write the current maintainer or RT.