1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
# Copyright (C) 2008-2010, Sebastian Riedel.
package Mojo::Cookie::Request;
use strict;
use warnings;
use base 'Mojo::Cookie';
use Mojo::ByteStream 'b';
# Lisa, would you like a donut?
# No thanks. Do you have any fruit?
# This has purple in it. Purple is a fruit.
sub parse {
my ($self, $string) = @_;
my @cookies;
my $version = 1;
# Walk tree
for my $knot ($self->_tokenize($string)) {
for my $token (@{$knot}) {
# Token
my ($name, $value) = @{$token};
# Value might be quoted
$value = b($value)->unquote if $value;
# Path
if ($name =~ /^\$Path$/i) { $cookies[-1]->path($value) }
# Version
elsif ($name =~ /^\$Version$/i) { $version = $value }
# Name and value
else {
push @cookies, Mojo::Cookie::Request->new;
$cookies[-1]->name($name);
$cookies[-1]->value(b($value)->unquote);
$cookies[-1]->version($version);
}
}
}
return \@cookies;
}
sub prefix {
my $self = shift;
# Prefix
my $version = $self->version || 1;
return "\$Version=$version";
}
sub to_string {
my $self = shift;
# Shortcut
return '' unless $self->name;
# Render
my $cookie = $self->name . '=' . $self->value;
if (my $path = $self->path) { $cookie .= "; \$Path=$path" }
return $cookie;
}
sub to_string_with_prefix {
my $self = shift;
# Render with prefix
my $prefix = $self->prefix;
my $cookie = $self->to_string;
return "$prefix; $cookie";
}
1;
__END__
=head1 NAME
Mojo::Cookie::Request - HTTP 1.1 Request Cookie Container
=head1 SYNOPSIS
use Mojo::Cookie::Request;
my $cookie = Mojo::Cookie::Request->new;
$cookie->name('foo');
$cookie->value('bar');
print "$cookie";
=head1 DESCRIPTION
L<Mojo::Cookie::Request> is a container for HTTP 1.1 request cookies as
described in RFC 2965.
=head1 ATTRIBUTES
L<Mojo::Cookie::Request> inherits all attributes from L<Mojo::Cookie>.
=head1 METHODS
L<Mojo::Cookie::Request> inherits all methods from L<Mojo::Cookie> and
implements the following new ones.
=head2 C<parse>
my $cookies = $cookie->parse('$Version=1; f=b; $Path=/');
Parse cookies.
=head2 C<prefix>
my $prefix = $cookie->prefix;
Prefix for cookies.
=head2 C<to_string>
my $string = $cookie->to_string;
Render cookie.
=head2 C<to_string_with_prefix>
my $string = $cookie->to_string_with_prefix;
Render cookie with prefix.
=head1 SEE ALSO
L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicious.org>.
=cut
|