[Dbix-class] Question about dynamic class generation (DBIx::Class::Schema::Loader)

Brandon Black blblack at gmail.com
Wed Feb 15 16:18:35 CET 2006


On 2/15/06, Matt S Trout <dbix-class at trout.me.uk> wrote:
> On Wed, Feb 15, 2006 at 02:43:49PM +0000, Dave Howorth wrote:
> > Matt S Trout wrote:
> > >On Wed, Feb 15, 2006 at 11:02:55AM +0000, Dave Howorth wrote:
> > >>castaway at desert-island.demon.co.uk wrote:
> > >>>IMO (and I may be off base), it should be possible to use Loader, which
> > >>>will have a standard set of predictable results (which should be
> > >>>detailed in the docs), and then only write your own classes for the
> > >>>parts you need to change / expand. Some flag should possibly set whether
> > >>>the user-created classes replace or extend the Loader ones .. ?
> > >>FWIW, that's what I do in my home-grown CDBI/Maypole loader. It works
> > >>well for me. I haven't needed to replace any automatically-generated
> > >>classes; I just override individual methods. For example, I define an
> > >>alternate semantics for find_or_create in my base class and override the
> > >>method in those classes where it's appropriate (some classes have
> > >>special change-logging built in that alters how the find part of
> > >>find_or_create needs to work).
> > >>
> > >>It would be nice when I get around to migrating to find that DBIC
> > >>already has the mechanism :)
> > >
> > >left_base_classes and additional_base_classes should already do the trick
> > >for this in all Loaders (including the CDBI one)
> >
> > I'm not sure I understand you. We're talking about a mechanism that
> > dynamically generates appropriate packages for all tables and then goes
> > and automatically loads any modules it finds for those packages too. At
> > any rate that's what I'm talking about. I'm not sure how
> > left_base_classes and additional_base_classes help?
>
> Well the Loader handles the "dynamically generates" bits. As for the
> automatically loads, just running
>
> foreach my $moniker ($schema->sources) {
>   $schema->class($moniker)->require;
> }
>
> should do the trick (assuming UNIVERSAL::require is loaded)
>

Perhaps Schema::Loader should just do this anyways and ignore "not
found" errors but bomb out on any other error from the require (and
perhaps still give a not found message under debug => 1)?

-- Brandon



More information about the Dbix-class mailing list