NAME
Dancer2::Plugin::Negotiate - Content negotiation plugin for Dancer2
VERSION
version 0.002
SYNOPSIS
get
'...'
=>
sub
{
choose_variant(
var1
=> {
Quality
=> 1.000,
Type
=>
'text/html'
,
Charset
=>
'iso-8859-1'
,
Language
=>
'en'
,
Size
=> 3000
},
var2
=> {
Quality
=> 0.950,
Type
=>
'text/plain'
,
Charset
=>
'us-ascii'
,
Language
=>
'no'
,
Size
=> 400
},
var3
=> {
Quality
=> 0.3,
Type
=>
'image/gif'
,
Size
=> 43555
}
);
# returns 'var1' or 'var2' or 'var3' or undef
}
DESCRIPTION
This module is a wrapper for HTTP::Negotiate.
METHODS
choose_variant(%variants)
%options
is a hash like this:
%variants
= (
$identifier
=> \
%options
)
The key $identifier
is a string that will be returned by choose_variant()
.
Valid keywords of hashref \%options
:
- Quality
-
A float point value between 0.000 and 1.000, describing the source quality (defaults to 1)
- Type
-
A MIME media type (with no charset attributes, but other attributes like version)
- Encoding
-
An encoding like gzip or compress
- Charset
-
An encoding like utf-8 or iso-8859-1
- Language
-
A language tag conforming to RFC 3066
- Size
-
Number of bytes used to represent
Returns undef
if no variant matched.
See HTTP::Negotiate for more information.
apply_variant(%options)
This method behaves like choose_variant
but sets the according response headers if a variant matched.
negotiate($template_name)
This method returns $template_name
with a suffixed language tag. The file needs to exist. This method behaves similiary to mod_negotiate of apache httpd.
Language tags must be specified in plugin settings and ordered by priority:
plugins:
Negotiate:
languages:
- en
- de
- fr
The result of this method can be propagated to template()
in order to render a localized version of the file.
get
'/index'
=>
sub
{
return
template negotiate
'index'
;
};
# renders index.de.tt or index.en.tt or index.fr.tt or index.tt
Falls back to $template_name
if negotiaten fails.
Hint: additional arguments applies to template()
:
template negotiate
index
=> {
foo
=>
'bar'
};
# is the same as
template(negotiate(
'index'
), {
foo
=>
'bar'
});
BUGS
Please report any bugs or feature requests on the bugtracker website https://github.com/zurborg/libdancer2-plugin-negotiate-perl/issues
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
AUTHOR
David Zurborg <zurborg@cpan.org>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2015 by David Zurborg.
This is free software, licensed under:
The ISC License