[Dbix-class] Schema Components

Dave Cross dave at dave.org.uk
Fri Sep 16 16:08:14 GMT 2016


In the documentation of DBIx::Class::Schema::Loader::Base there is a  
reference to adding "schema components"[1] to the generated classes.  
But I can't find any documentation on how you might write such a  
component - or any clearly-labelled examples of a schema component.

I think I have an example of something that I'd like to write as a  
schema component. Please either tell me that I'm wrong, or gently  
nudge me in the right direction.

Here's what I want to do. Recently I've found myself adding a useful  
"get_schema()" method to many of my schema classes. It looks something  
like this:

sub get_schema {
   my @errs;

   foreach (qw[XXX_DB XXX_DB_USER XXX_DB_PASS XXX_DB_HOST]) {
     push @errs, $_ unless defined $ENV{$_};
   }
   if (@errs) {
     croak "You need to set the following environment variables: @errs\n";
   }

   return __PACKAGE__->connect(
     "dbi:mysql:database=$ENV{XXX_DB};host=$ENV{XXX_DB_HOST}",
     $ENV{XXX_DB_USER}, $ENV{XXX_DB_PASS},
     { mysql_enable_utf8 => 1 }
   );
}

The "XXX" is a placeholder for some prefix that is meaningful to  
whatever schema I'm working with and it will change with each project  
(as will, potentially, the DBD name and the options hash).

I've been copying the code into my schema classes, but we all know  
what a Bad Idea that is. And a schema component seemed a  
likely-looking approach for getting round that. I thought I could  
write DBIx::Class::Component::GetSchema which adds the method to any  
schema class that loads it.

But, as I said above, I can't find any explanations or examples of  
schema components that I can steal from.

Does anyone have any suggestions?

Cheers,

Dave...

[1]  
https://metacpan.org/pod/DBIx::Class::Schema::Loader::Base#schema_components





More information about the DBIx-Class mailing list