| Mojolicious documentation | Contained in the Mojolicious distribution. |
Mojolicious::Plugin::JsonConfig - JSON Configuration Plugin
# myapp.json
{
"foo" : "bar",
"music_dir" : "<%= app->home->rel_dir('music') %>"
}
# Mojolicious
my $config = $self->plugin('json_config');
# Mojolicious::Lite
my $config = plugin 'json_config';
# Reads myapp.json by default and puts the parsed version into the stash
my $config = $self->stash('config');
# Everything can be customized with options
my $config = plugin json_config => {
file => '/etc/myapp.conf',
stash_key => 'conf'
};
Mojolicious::Plugin::JsonConfig is a JSON configuration plugin that
preprocesses it's input with Mojo::Template.
The application object can be accessed via $app or the app helper.
You can extend the normal config file myapp.json with mode specific
ones like myapp.$mode.json.
Mojolicious::Plugin::JsonConfig accepts the same options as Mojolicious::Plugin::Config and the following new ones.
template # Mojolicious::Lite
plugin json_config => {template => {line_start => '.'}};
Template options.
Mojolicious::Plugin::JsonConfig defines the same helpers as Mojolicious::Plugin::Config.
Mojolicious::Plugin::JsonConfig inherits all methods from Mojolicious::Plugin::Config and implements the following new ones.
parse$plugin->parse($content, $file, $conf, $app);
Process content with render and parse it with Mojo::JSON.
sub parse {
my ($self, $content, $file, $conf, $app) = @_;
...
$content = $self->render($content, $file, $conf, $app);
...
return $hash;
}
register$plugin->register;
Register plugin in Mojolicious application.
render$plugin->render($content, $file, $conf, $app);
Process configuration file with Mojo::Template.
sub render {
my ($self, $content, $file, $conf, $app) = @_;
...
return $content;
}
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
| Mojolicious documentation | Contained in the Mojolicious distribution. |
package Mojolicious::Plugin::JsonConfig; use Mojo::Base 'Mojolicious::Plugin::Config'; use Mojo::JSON; use Mojo::Template; # "And so we say goodbye to our beloved pet, Nibbler, who's gone to a place # where I, too, hope one day to go. The toilet." sub parse { my ($self, $content, $file, $conf, $app) = @_; # Render $content = $self->render($content, $file, $conf, $app); # Parse my $json = Mojo::JSON->new; my $config = $json->decode($content); my $error = $json->error; die qq/Couldn't parse config "$file": $error/ if !$config && $error; die qq/Invalid config "$file"./ if !$config || ref $config ne 'HASH'; $config; } sub register { my ($self, $app, $conf) = @_; $conf->{ext} = 'json' unless exists $conf->{ext}; $self->SUPER::register($app, $conf); } sub render { my ($self, $content, $file, $conf, $app) = @_; # Instance my $prepend = 'my $app = shift;'; # Be less strict $prepend .= q/no strict 'refs'; no warnings 'redefine';/; # Helper $prepend .= "sub app; *app = sub { \$app };"; # Be strict again $prepend .= q/use strict; use warnings;/; # Render my $mt = Mojo::Template->new($conf->{template} || {}); $mt->prepend($prepend); $content = $mt->render($content, $app); utf8::encode $content; $content; } 1; __END__