On Sat, 2015-05-02 at 12:50 +1000, Matthew Mallard wrote:
I’m getting a bit confused with plugins. I’m sure that I was able to use the DBIC Plugin at one point from one of my plugins, but I can’t seem to get it to work in 0.159002 or 0.160000. DBIC seems to be okay outside of plugins.
Firstly, there is change going on in the world of plugins, which I suspect will fix this, but I haven't read up on the full details myself:
http://lists.preshweb.co.uk/pipermail/dancer-users/2015-April/004512.html
* how do I get DBIC to print the SQL it’s executing so I can double check it’s what I’m expecting? * am I doing something else wrong in the way I’m trying to use DBIC?
This is a bit more tricky. With the current plugin architecture, "schema" is not available in the DSL when you call it from another plugin as you are doing. You can workaround this by capturing it during plugin initialisation, as long as you load the DBIC plugin before yours. See Plugin::Auth::Extensible::Provider::DBIC for an example:
So do I create a sub in my custom plugin along these lines: sub new { my ($class, $dsl) = @_;
# Grab a handle to the Plugin::DBIC schema die "No schema method in app. Did you load DBIC::Plugin::DBIC before My::Custom::Module?" unless $dsl->can('schema'); my $schema = $dsl->schema;
Yes, similar to that, but using on_plugin_import. See this example: https://github.com/PerlDancer/Dancer2-Plugin-Auth-Extensible/blob/de84a4a5ba...
my $self = { dsl_local => $dsl, schema => $schema, }; return bless $self => $class;
I don't think you need to bless your class, as it's already blessed. You just need to store the schema in a global in your module, a bit like $settings here: https://github.com/PerlDancer/Dancer2-Plugin-Auth-Extensible/blob/de84a4a5ba...
Then in my routes module I call plugins in this order: use Dancer2::Plugin::DBIC use My::Custom::Module
Yes.
How does 'new' get called and what do I use to reference the schema in my custom plugin.
See above.
Let me know if there is some other background reading I should be doing for how this work,
To be honest, it's a dirty hack, so you won't find any documentation on it. You might be better waiting for the new plugin architecture if you can. Andy