X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema.pm;h=0c0ceb8b4d24f82da2c6dc6f9da513734f3e6078;hb=8452e496;hp=502ec55d22c9d8ba3a0309ea580aeea1cbb5ffe3;hpb=bfb2bd4fbfd099e2bde591feb786a99e8ec9574c;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Schema.pm b/lib/DBIx/Class/Schema.pm index 502ec55..0c0ceb8 100644 --- a/lib/DBIx/Class/Schema.pm +++ b/lib/DBIx/Class/Schema.pm @@ -67,10 +67,11 @@ compose_connection to create/modify all the existing database classes. =cut sub register_class { - my ($class, $name, $to_register) = @_; - my %reg = %{$class->class_registrations}; + my ($self, $name, $to_register) = @_; + my %reg = %{$self->class_registrations}; $reg{$name} = $to_register; - $class->class_registrations(\%reg); + $self->class_registrations(\%reg); + $to_register->result_source->schema($self); } =head2 registered_classes @@ -98,6 +99,34 @@ sub class { return $self->class_registrations->{$class}; } +=head2 source + + my $source = $schema->source('Foo'); + +Returns the result source object for the registered name + +=cut + +sub source { + my ($self, $class) = @_; + return $self->class_registrations->{$class}->result_source + if $self->class_registrations->{$class}; +} + +=head2 resultset + + my $rs = $schema->resultset('Foo'); + +Returns the resultset for the registered name + +=cut + +sub resultset { + my ($self, $class) = @_; + return $self->class_registrations->{$class}->result_source->resultset; +} + + =head2 load_classes [, (, ), { => []}] Uses L to find all classes under the database class' namespace, @@ -153,6 +182,7 @@ sub load_classes { die $@ unless $@ =~ /Can't locate/; } $class->register_class($comp => $comp_class); + #$class->register_class($comp_class => $comp_class); } } } @@ -182,10 +212,10 @@ you expect. =cut sub compose_connection { - my ($class, $target, @info) = @_; + my ($self, $target, @info) = @_; my $conn_class = "${target}::_db"; - $class->setup_connection_class($conn_class, @info); - my $schema = $class->compose_namespace($target, $conn_class); + $self->setup_connection_class($conn_class, @info); + my $schema = $self->compose_namespace($target, $conn_class); $schema->storage($conn_class->storage); foreach my $class ($schema->registered_classes) { my $source = $class->result_source; @@ -193,6 +223,7 @@ sub compose_connection { $source->schema($schema); $source->result_class($class); $class->mk_classdata(result_source => $source); + $class->mk_classdata(resultset_instance => $source->resultset); } return $schema; } @@ -205,7 +236,7 @@ sub compose_namespace { my $schema = bless({ }, $class); while (my ($comp, $comp_class) = each %reg) { my $target_class = "${target}::${comp}"; - $class->inject_base($target_class, $comp_class, $base); + $class->inject_base($target_class, $comp_class, ($base ? $base : ())); @map{$comp, $comp_class} = ($target_class, $target_class); } $schema->class_registrations(\%map);