I am trying to create a plugin for Dancer2, and set the options in the config.yml file. My config.yml file looks like this:
plugins:
Test:
foo: 1
bar: 2
baz: 3
I am trying to read these values via plugin_setting(), without success. In the line:
my $settings = plugin_setting();
$settings gets no value. I expect to get foo: 1, bar: 2, baz: 3.
My code is the following:
package Dancer2::Plugin::Test;
use Dancer2::Plugin;
use Data::Dumper;
our $VERSION = 0.01;
my $settings = plugin_setting();
register foo => sub {
return my $settings = _get_settings();
};
register_plugin for_versions => [ 2 ] ;
sub _get_settings {
my $args = {};
for (qw/foo bar baz/) {
if (exists $settings->{$_}) {
open A, q[>], 'settings.txt';
$args->{$_} = $settings->{$_};
}
}
print A Dumper $args;close A;
return $args;
}
1;
Anyone could help me?
Dancer has done a complete overhaul with their plugins, please see their Dancer2::Plugin documentation.
Here I show you a simple example:
package Dancer2::Plugin::Test;
use strict;
use warnings;
use Dancer2::Plugin;
has dictionary => (
is => 'ro',
from_config => 'dict',
plugin_keyword => 'foo',
);
1;
and inside the config.yml
:
plugins:
Test:
dict:
foo: 1
bar: 2
baz: 3
This way, you can use 'plugin top-level' configuration, from which I would assume you 'know' the keys; a config from which you do not know what keys are there would be a bit difficult to parse. In that top-level I created a dictionary key dict
, which on its turn can hold an unknown list of key-value pairs.
Inside your plugin, you can use $plugin->dictionary
to access the (internal) hash.
Inside a Dancer route, you can simply use foo()
, as you have declared is to be a keyword.
I think the developers have done well, making the plugins look very clean!