Perl6-Pugs/ext/libwww-perl/lib/HTTP/Request.pm
use v6-alpha;
use HTTP::Message;
class HTTP::Request-0.1[?::URI_CLASS = URI] {
is HTTP::Message;
has $.method is rw;
has $!uri is rw;
submethod BUILD (Str $.method, $.uri) { }
method parse (Str $str is copy) {
my $request_line;
if ($str ~~ s/^(.*)\n//) {
$request_line = $0;
} else {
$request_line = $str;
$str = "";
}
my $self = self.SUPER::parse($str);
given ($self) {
my ($method, $uri, $protocol) = $request_line.split(' ');
.method($method) if $method.defined;
.uri($uri) if $method.defined;
.protocol($protocol) if $protocol.defined;
}
$self;
}
multi method uri (Str $new) is rw {
my $old = $!uri;
return Proxy.new(
FETCH => { $old; },
STORE => { $!uri = $HTTP::URI_CLASS.new($^new); $old; }
);
}
multi method uri (URI $new) is rw {
my $old = $!uri;
return Proxy.new(
FETCH => { $old; },
STORE => { $!uri = $^new; $old; }
);;
}
multi method uri () {
$!uri;
}
our &url ::= &uri;
method as_string (Str $newline = "\n") {
my $req_line = $.method // "-";
my $uri = ($.uri().defined) ?? $.uri().as_string() !! "-";
$req_line ~= $uri;
my $proto = $.protocol;
$req_line ~= $protocol if $proto.defined;
return ($req_line, self.SUPER::as_string($newline)).join($newline);
}
}