@@ -33,6 +33,7 @@ my %args = (
test_files => ((-d '.git' || $ENV{RELEASE_TESTING}) && -d 'xt') ? 't/ xt/' : 't/',
recursive_test_files => 1,
+
);
if (-d 'share') {
@@ -1,5 +1,9 @@
Revision history for Perl extension Cookie-Baker
+0.03 2014-02-26T14:04:28Z
+
+ - use Cookie::Baker::XS if available
+
0.02 2013-10-25T00:08:34Z
- fix a document bug
@@ -4,7 +4,7 @@
"Masahiro Nagano <kazeburo@gmail.com>"
],
"dynamic_config" : 0,
- "generated_by" : "Minilla/v0.8.0",
+ "generated_by" : "Minilla/v0.11.0",
"license" : [
"perl_5"
],
@@ -46,6 +46,9 @@
"Exporter" : "0",
"URI::Escape" : "0",
"perl" : "5.008005"
+ },
+ "suggests" : {
+ "Cookie::Baker::XS" : "0"
}
},
"test" : {
@@ -58,7 +61,7 @@
"provides" : {
"Cookie::Baker" : {
"file" : "lib/Cookie/Baker.pm",
- "version" : "0.02"
+ "version" : "0.03"
}
},
"release_status" : "stable",
@@ -72,5 +75,5 @@
"web" : "https://github.com/kazeburo/Cookie-Baker"
}
},
- "version" : "0.02"
+ "version" : "0.03"
}
@@ -10,7 +10,7 @@ configure_requires:
CPAN::Meta::Prereqs: 0
Module::Build: 0.38
dynamic_config: 0
-generated_by: 'Minilla/v0.8.0, CPAN::Meta::Converter version 2.130880'
+generated_by: 'Minilla/v0.11.0, CPAN::Meta::Converter version 2.132830'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -29,7 +29,7 @@ no_index:
provides:
Cookie::Baker:
file: lib/Cookie/Baker.pm
- version: 0.02
+ version: 0.03
requires:
Exporter: 0
URI::Escape: 0
@@ -38,4 +38,4 @@ resources:
bugtracker: https://github.com/kazeburo/Cookie-Baker/issues
homepage: https://github.com/kazeburo/Cookie-Baker
repository: git://github.com/kazeburo/Cookie-Baker.git
-version: 0.02
+version: 0.03
@@ -14,6 +14,13 @@ Cookie::Baker - Cookie string generator / parser
Cookie::Baker provides simple cookie string generator and parser.
+# XS IMPLEMENTATION
+
+This module try to use [Cookie::Baker::XS](http://search.cpan.org/perldoc?Cookie::Baker::XS)'s crush\_cookie by default
+and fail to it, use Cookie::Baker's pure-perl crush\_cookie.
+
+There is no XS implementation of bake\_cookie yet.
+
# FUNCTION
- bake\_cookie
@@ -1,6 +1,7 @@
requires 'perl', '5.008001';
requires 'URI::Escape';
requires 'Exporter';
+suggests 'Cookie::Baker::XS';
on 'test' => sub {
requires 'Test::More', '0.98';
@@ -6,16 +6,31 @@ use warnings;
use base qw/Exporter/;
use URI::Escape;
-our $VERSION = "0.02";
-our @EXPORT = qw/bake_cookie crush_cookie/;
+BEGIN {
+ our $VERSION = "0.03";
+ our @EXPORT = qw/bake_cookie crush_cookie/;
+ my $use_pp = $ENV{COOKIE_BAKER_PP};
+ if (!$use_pp) {
+ eval {
+ require Cookie::Baker::XS;
+ };
+ $use_pp = !!$@;
+ }
+ if ($use_pp) {
+ *crush_cookie = \&pp_crush_cookie;
+ }
+ else {
+ *crush_cookie = \&Cookie::Baker::XS::crush_cookie;
+ }
+}
sub bake_cookie {
my ($name,$val) = @_;
return '' unless defined $val;
my %args = ref $val ? %{$val} : (value => $val);
-
- my $cookie = URI::Escape::uri_escape($name) . "=" . URI::Escape::uri_escape($args{value}) . '; ';
+ $name = URI::Escape::uri_escape($name) if $name =~ m![^a-zA-Z\-\._~]!;
+ my $cookie = "$name=" . URI::Escape::uri_escape($args{value}) . '; ';
$cookie .= 'domain=' . $args{domain} . '; ' if $args{domain};
$cookie .= 'path='. $args{path} . '; ' if $args{path};
$cookie .= 'expires=' . _date($args{expires}) . '; ' if $args{expires};
@@ -64,7 +79,7 @@ sub _date {
$WDAY[$wday], $mday, $MON[$mon], $year, $hour, $min, $sec);
}
-sub crush_cookie {
+sub pp_crush_cookie {
my $cookie_string = shift;
return {} unless $cookie_string;
my %results;
@@ -102,6 +117,13 @@ Cookie::Baker - Cookie string generator / parser
Cookie::Baker provides simple cookie string generator and parser.
+=head1 XS IMPLEMENTATION
+
+This module try to use L<Cookie::Baker::XS>'s crush_cookie by default
+and fail to it, use Cookie::Baker's pure-perl crush_cookie.
+
+There is no XS implementation of bake_cookie yet.
+
=head1 FUNCTION
=over 4
@@ -2,14 +2,28 @@ use strict;
use Test::More;
use Cookie::Baker;
+my $longkey = 'x'x1024;
+
my @tests = (
[ 'Foo=Bar; Bar=Baz; XXX=Foo%20Bar; YYY=0; YYY=3', { Foo => 'Bar', Bar => 'Baz', XXX => 'Foo Bar', YYY => 0 }],
+ [ 'Foo=Bar; Bar=Baz; XXX=Foo%20Bar; YYY=0; YYY=3;', { Foo => 'Bar', Bar => 'Baz', XXX => 'Foo Bar', YYY => 0 }],
+ [ 'Foo=Bar; Bar=Baz; XXX=Foo%20Bar ; YYY=0; YYY=3;', { Foo => 'Bar', Bar => 'Baz', XXX => 'Foo Bar', YYY => 0 }],
+ [ 'Foo=Bar; Bar=Baz; XXX=Foo%20Bar ; YYY=0; YYY=3; ', { Foo => 'Bar', Bar => 'Baz', XXX => 'Foo Bar', YYY => 0 }],
+ [ 'Foo=Bar; Bar=Baz; XXX=Foo%20Bar ; YYY', { Foo => 'Bar', Bar => 'Baz', XXX => 'Foo Bar' }],
+ [ 'Foo=Bar; Bar=Baz; XXX=Foo%20Bar ; YYY;', { Foo => 'Bar', Bar => 'Baz', XXX => 'Foo Bar' }],
+ [ 'Foo=Bar; Bar=Baz; XXX=Foo%20Bar ; YYY; ', { Foo => 'Bar', Bar => 'Baz', XXX => 'Foo Bar' }],
+ [ 'Foo=Bar; Bar=Baz; XXX=Foo%20Bar ; YYY=', { Foo => 'Bar', Bar => 'Baz', XXX => 'Foo Bar', YYY=>"" }],
+ [ 'Foo=Bar; Bar=Baz; XXX=Foo%20Bar ; YYY=;', { Foo => 'Bar', Bar => 'Baz', XXX => 'Foo Bar', YYY=>"" }],
+ [ 'Foo=Bar; Bar=Baz; XXX=Foo%20Bar ; YYY=; ', { Foo => 'Bar', Bar => 'Baz', XXX => 'Foo Bar',YYY=>"" }],
+ [ "Foo=Bar; $longkey=Bar", { Foo => 'Bar', $longkey => 'Bar'}],
+ [ "Foo=Bar; $longkey=Bar; Bar=Baz", { Foo => 'Bar', $longkey => 'Bar', 'Bar'=>'Baz'}],
[ '', {} ],
[ undef, {} ],
);
for my $test (@tests) {
is_deeply( crush_cookie($test->[0]), $test->[1] );
+ is_deeply( Cookie::Baker::pp_crush_cookie($test->[0]), $test->[1] );
}
done_testing;