.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Mojolicious::Plugin::JSONConfig 3pm" .TH Mojolicious::Plugin::JSONConfig 3pm 2024-05-15 "perl v5.38.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME Mojolicious::Plugin::JSONConfig \- JSON configuration plugin .SH SYNOPSIS .IX Header "SYNOPSIS" .Vb 4 \& # myapp.json (it\*(Aqs just JSON with embedded Perl) \& { \& %# Just a value \& "foo": "bar", \& \& %# Nested data structures are fine too \& "baz": ["♥"], \& \& %# You have full access to the application \& "music_dir": "<%= app\->home\->child(\*(Aqmusic\*(Aq) %>" \& } \& \& # Mojolicious \& my $config = $app\->plugin(\*(AqJSONConfig\*(Aq); \& say $config\->{foo}; \& \& # Mojolicious::Lite \& my $config = plugin \*(AqJSONConfig\*(Aq; \& say $config\->{foo}; \& \& # foo.html.ep \& %= config\->{foo} \& \& # The configuration is available application\-wide \& my $config = app\->config; \& say $config\->{foo}; \& \& # Everything can be customized with options \& my $config = plugin JSONConfig => {file => \*(Aq/etc/myapp.conf\*(Aq}; .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" Mojolicious::Plugin::JSONConfig is a JSON configuration plugin that preprocesses its input with Mojo::Template. .PP The application object can be accessed via \f(CW$app\fR or the \f(CW\*(C`app\*(C'\fR function. A default configuration filename in the application home directory will be generated from the value of "moniker" in Mojolicious (\f(CW\*(C`$moniker.json\*(C'\fR). You can extend the normal configuration file \f(CW\*(C`$moniker.json\*(C'\fR with \f(CW\*(C`mode\*(C'\fR specific ones like \f(CW\*(C`$moniker.$mode.json\*(C'\fR, which will be detected automatically. .PP These configuration values are currently reserved: .ie n .IP """config_override""" 2 .el .IP \f(CWconfig_override\fR 2 .IX Item "config_override" If this configuration value has been set in "config" in Mojolicious when this plugin is loaded, it will not do anything besides loading deployment specific plugins. .ie n .IP """plugins""" 2 .el .IP \f(CWplugins\fR 2 .IX Item "plugins" .Vb 1 \& "plugins": [{"SetUserGroup": {"user": "sri", "group": "staff"}}] .Ve .Sp One or more deployment specific plugins that should be loaded right after this plugin has been loaded. .PP The code of this plugin is a good example for learning to build new plugins, you're welcome to fork it. .PP See "PLUGINS" in Mojolicious::Plugins for a list of plugins that are available by default. .SH OPTIONS .IX Header "OPTIONS" Mojolicious::Plugin::JSONConfig inherits all options from Mojolicious::Plugin::Config and supports the following new ones. .SS template .IX Subsection "template" .Vb 2 \& # Mojolicious::Lite \& plugin JSONConfig => {template => {line_start => \*(Aq.\*(Aq}}; .Ve .PP Attribute values passed to Mojo::Template object used to preprocess configuration files. .SH METHODS .IX Header "METHODS" Mojolicious::Plugin::JSONConfig inherits all methods from Mojolicious::Plugin::Config and implements the following new ones. .SS parse .IX Subsection "parse" .Vb 1 \& $plugin\->parse($content, $file, $conf, $app); .Ve .PP Process content with "render" and parse it with Mojo::JSON. .PP .Vb 6 \& sub parse ($self, $content, $file, $conf, $app) { \& ... \& $content = $self\->render($content, $file, $conf, $app); \& ... \& return $hash; \& } .Ve .SS register .IX Subsection "register" .Vb 2 \& my $config = $plugin\->register(Mojolicious\->new); \& my $config = $plugin\->register(Mojolicious\->new, {file => \*(Aq/etc/foo.conf\*(Aq}); .Ve .PP Register plugin in Mojolicious application and merge configuration. .SS render .IX Subsection "render" .Vb 1 \& $plugin\->render($content, $file, $conf, $app); .Ve .PP Process configuration file with Mojo::Template. .PP .Vb 4 \& sub render ($self, $content, $file, $conf, $app) { \& ... \& return $content; \& } .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" Mojolicious, Mojolicious::Guides, .