NAME
Dancer::Plugin::Params::Normalization - A plugin for normalizing query parameters in Dancer
VERSION
version 0.52
DESCRIPTION
This plugin helps you normalize the query parameters in Dancer.
SYNOPSYS
In configuration file :
plugins:
Params::Normalization:
method: lowercase
In your Dancer App :
package MyWebService;
use Dancer;
use Dancer::Plugin::Params::Normalization;
get '/hello' => sub {
'Hello ' . params->{name};
};
Requests
# This will work, as NAME will be lowercased to name
curl http://mywebservice/test?NAME=John
CONFIGURATION
The behaviour of this plugin is primarily setup in the configuration file, in your main config.yml or environment config file.
# Example 1 : always lowercase all parameters
plugins:
Params::Normalization:
method: lowercase
# Example 2 : always uppercase all parameters
plugins:
Params::Normalization:
method: uppercase
# Example 3 : on-demand uppercase parameters that starts with 'a'
plugins:
Params::Normalization:
general_rule: ondemand
method: uppercase
params_filter: ^[aA]
Here is a list of configuration fields:
general_rule
This field specifies if the normalization should always happen, or on demand.
Value can be of:
- always
-
Parameters will be normalized behind the scene, automatically.
- ondemand
-
Parameters are not normalized by default. The code in the route definition needs to call normalize_params to have the parameters normalized
Default value: always
method
This field specifies what kind of normalization to do.
Value can be of:
- lowercase
-
parameters names are lowercased
- uppercase
-
parameters names are uppercased
- ucfirst
-
parameters names are ucfirst'ed
- Custom::Class::Name
-
Used to execute a custom normalization method.
The given class should inherit Dancer::Plugin::Params::Normalization::Abstract and implement the method
normalize
. this method takes in argument a hashref of the parameters, and returns a hashrefs of the normalized parameters. It can have aninit
method if it requires initialization.As an example, see
Dancer::Plugin::Params::Normalization::Trim
, contributed by Sam Batschelet, and part of this distribution.Using a custom normalization is incompatible with
params_filter
(see below). - passthrough
-
Doesn't do any normalization. Useful to disable the normalization without to change the code
Default value: passthrough
params_types
Optional, used to specify on which parameters types the normalization should apply. The value is an array, that can contain any combination of these strings:
- query
-
If present in the array, the parameters from the query string will be normalized
- body
-
If present in the array, the parameters from the request's body will be normalized
- route
-
If present in the array, the parameters from the route definition will be normalized
Default value: [ 'query', 'body']
params_filter
Optional, used to filters which parameters the normalization should apply to.
The value is a regexp string that will be evaluated against the parameter names.
no_conflict_warn
Optional, if set to a true value, the plugin won't issue a warning when parameters name conflict happens. See "PARAMETERS NAMES CONFLICT".
KEYWORDS
normalize
The general usage of this plugin is to enable normalization automatically in the configuration.
However, If the configuration field general_rule
is set to ondemand
, then the normalization doesn't happen automatically. The normalize
keyword can then be used to normalize the parameters on demand.
All you have to do is add
normalize;
to your route code
PARAMETERS NAMES CONFLICT
if two normalized parameters names clash, a warning is issued. Example, if while lowercasing parameters the route receives two params : param
and Param
, they will be both normalized to param
, which leads to a conflict. You can avoid the warning being issued by adding the configuration key no_conflict_warn
to a true value.
SEE ALSO
AUTHOR
Damien "dams" Krotkine
COPYRIGHT AND LICENSE
This software is copyright (c) 2011 by Damien "dams" Krotkine.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.