NAME
Dancer2::Plugin::Negotiate - Content negotiation plugin for Dancer2
VERSION
version 0.002
SYNOPSIS
    use Dancer2::Plugin::Negotiate;
	
	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