NAME
HTTP::Headers::Fancy - Fancy naming schema of HTTP headers
VERSION
version 1.001
SYNOPSIS
my %fancy = decode_hash('content-type' => ..., 'x-foo-bar-baf-baz' => ...);
my $content_type = $fancy{ContentType};
my $x_foo_bar_baf_baz = $fancy{-FooBarBafBaz};
my %headers = encode_hash(ContentType => ..., -foo_bar => ...);
# %headers = ('content-type' => ..., 'x-foo-bar' => ...);
DESCRIPTION
This module provides method for renaming HTTP header keys to a lightier, easier-to-use format.
METHODS
new
Creates a new instance of ourself. No options are supported.
my $fancy = HTTP::Headers::Fancy->new;
encode
Wrapper for "encode_hash" or "encode_key", depending on what is given.
$fancy->encode(%hash) # encode_hash(%hash);
$fancy->encode($hashref) # encode_hash($hashref);
$fancy->encode($scalar) # encode_key($scalar);
decode
Wrapper for "decode_hash" or "decode_key", depending on what is given
$fancy->decode(%hash) # decode_hash(%hash);
$fancy->decode($hashref) # decode_hash($hashref);
$fancy->decode($scalar) # decode_key($scalar);
split
Wrapper for "split_field_list" or "split_field_hash", depending on what is given
$fancy->split(q{"a", "b", "c"}) # split_field_list(...)
$fancy->split(q{W/"a", ...}) # split_field_list(...)
$fancy->split(q{no-cache}) # split_field_hash(...)
Or deflate a HashRef directly:
$headers = $fancy->decode(...);
$fancy->split($headers, qw(CacheControl Etag));
$headers->{CacheControl}->{NoCache};
$headers->{Etag}->[0];
build
Wrapper for "build_field_hash" or "build_field_list"
$fancy->build(NoCache => undef) # build_field_hash(...)
$fancy->build({ ... }) # build_field_hash(...)
$fancy->build([ ... ]) # build_field_list(...)
etags
Wrapper for "build_field_list"
$fancy->build('a', \'b', 'c') # build_field_list(...)
FUNCTIONS
decode_key
Decode original HTTP header name
my $new = decode_key($old);
The header field name will be separated by the dash ('-') sign into pieces. Every piece will be lowercased and the first character uppercased. The pieces will be concatenated.
# Original -> Fancy
# Accept Accept
# accept Accept
# aCCEPT Accept
# Acc-Ept AccEpt
# Content-Type ContentType
# a-b-c ABC
# abc Abc
# a-bc ABc
# ab-c AbC
Experimental headers starting with X-
will be accessable by a preleading dash sign:
# Original -> Fancy
# x-abc -Abc
decode_hash
Decode a hash (or HashRef) of HTTP headers and rename the keys
my %new_hash = decode_hash(%old_hash);
my $new_hashref = decode_hash($old_hashref);
encode_key
Encode fancy key name to a valid HTTP header key name
my $new = encode_key($old);
Any uppercase (if not at beginning) will be prepended with a dash sign. Underscores will be replaced by a dash-sign too. The result will be lowercased.
# Fancy -> Original
# FooBar foo-bar
# foo_bar foo-bar
# FoOoOoF fo-oo-oo-f
Experimental headers starting with X-
are also createable with a preleading dash sign:
# Fancy -> Original
# -foo x-foo
encode_hash
Encode a hash (or HashRef) of HTTP headers and rename the keys
Removes also a keypair if a value in undefined.
my %new_hash = encode_hash(%old_hash);
my $new_hashref = encode_hash($old_hashref);
prettify_key
Reformats a key with all lowercase and each part uppercase first.
my $pretty_key = prettify_key('foo-bar');
Examples:
# Unpretty -> Pretty
# foo-bar Foo-Bar
# x-fooof X-Fooof
# ABC-DEF Abc-Def
Since a HTTP header parser ignores the case, this is just for a nice human-readable output.
split_field_hash
Split a HTTP header field into a hash with decoding of keys
my %cc = split_field('no-cache, s-maxage=5');
# %cc = (NoCache => undef, SMaxage => 5);
Or deflate fields in a hashref directly:
# First, get a fancy hashref of header fields;
my $headers = decode_hash(...);
# Second deflate the CacheControl field
split_field_hash($headers, qw( CacheControl ));
# Then access the fancy way
$headers->{CacheControl}->{SMaxage};
The first argument has to be a hashref, all other argument a list of fields to be deflated by split_field_hash
split_field_list
Split a field into pieces
my @list = split_field('"a", "b", "c"');
# @list = qw( a b c );
Weak values are stored as ScalarRef
my @list = split_field('"a", W/"b"', W/"c"');
# @list = ('a', \'b', \'c');
Or deflate fields in a hashref directly:
# First, get a fancy hashref of header fields;
my $headers = decode_hash(...);
# Second deflate the Etag field
split_field_list($headers, qw( Etag ));
# Then access the fancy way
$headers->{Etag}->[0];
The first argument has to be a hashref, all other argument a list of fields to be deflated by split_field_list
build_field_hash
The opposite method of "split_field_hash" with encoding of keys.
my $field_value = build_field_hash(NoCache => undef, MaxAge => 3600);
# $field_value = 'no-cache,maxage=3600'
An HashRef as first argument is interpreted as hash
build_field_hash({ NoCache => undef })
build_field_list
Build a list from pieces
my $field_value = build_field_list(qw( a b c ));
# $field_value = '"a", "b", "c"'
ScalarRefs evaluates to a weak value
my $field_value = build_field_list('a', \'b', \'c');
# $field_value = '"a", W/"b", W/"c"';
An ArrayRef as first argument is interpreted as list
build_field_list([ 'a', 'b', ... ])
BUGS
Please report any bugs or feature requests on the bugtracker website https://github.com/zurborg/libhttp-headers-fancy-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