[Dbix-class] How to inject more then one ResultSetClass in one
ResultSet?
Jonas Alves
jonas.alves at gmail.com
Wed Oct 31 11:33:12 GMT 2007
On 31/10/2007, Matt S Trout <dbix-class at trout.me.uk> wrote:
> On Tue, Oct 30, 2007 at 03:15:03PM +0000, Jonas Alves wrote:
> > On 30/10/2007, Jonathan Rockway <jon at jrock.us> wrote:
> > > Jonas Alves wrote:
> > > > Hi,
> > > >
> > > > I want my dbic components to be able to extend the ResultSet by adding
> > > > base classes when they are loaded.
> > >
> > > How about:
> > >
> > > package MyApp::ResultSet::FooAndBar
> > > use base qw/MyApp::ResultSet::Foo MyApp::ResultSet::Bar/;
> > > 1;
> > >
> > > If you want something more dynamic:
> > >
> > > package MyApp::RS::Base;
> > > use Moose;
> > > extends 'DBIx::Class::ResultSet';
> > > 1;
> > >
> > > package MyApp::RS::Role::Foo;
> > > use Moose::Role;
> > > sub foo { }
> > > 1;
> > >
> > > <same idea for bar>
> > >
> > > Then you can say:
> > >
> > > __PACKAGE__->resultset_class('MyApp::RS::Base');
> > > __PACKAGE__->resultset_class->meta->apply_role('MyApp::RS::Role::Foo');
> > >
> > > Have I tested any of this? No. YMMV.
> > >
> > > (Dynamically building classes at runtime is probably a Bad Idea anyway.
> > > I suggest just going with the inheritance method shown first; just
> > > create a separate RS class for each case where you need one.)
> > >
> > > Regards,
> > > Jonathan Rockway
> > >
> >
> > Hi Jonathan,
> > I really like your Moose approach, but i would like a solution that
> > just require the user to load_component my extensions and with that
> > get the ResultSet methods for free.
>
> I think the idea of his approach was your common class would generate the
> resultset_class invocation.
>
> That's exactly how resultset plugins are going to work once DBIC goes
> Moose.
>
Yes, I understood. :) But DBIx::Class::ResultSet doesn't use Moose
yet, and I don't control the schemas where my extensions will be used.
They might have user defined ResultSets already set and I can't simply
discard them. I can however distribute a ResultSet base class like the
one Jonathan suggests, then at runtime I can inject that base class in
the user defined ResultSets and after that apply my roles to it. Is
this a better approach?
Thanks a lot
--
Jonas
More information about the DBIx-Class
mailing list