Skip to content

Commit

Permalink
removed list context support from header method in Mojo::Headers
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed May 29, 2014
1 parent a891cd1 commit 90fac4b
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 36 deletions.
3 changes: 2 additions & 1 deletion Changes
@@ -1,5 +1,5 @@

5.0 2014-05-28
5.0 2014-05-29
- Code name "Tiger Face", this is a major release.
- Changed heuristics for number detection in Mojo::JSON to better line up
with user expectations.
Expand All @@ -8,6 +8,7 @@
- Changed return value of path_for method in Mojolicious::Routes::Match.
- Removed deprecated support for "X-Forwarded-HTTPS".
- Removed return values from wait method in Mojo::IOLoop::Delay.
- Removed list context support from header method in Mojo::Headers.
- Removed generate_port method from Mojo::IOLoop.
- Removed check_file method from Mojo::Server::Morbo.
- Replaced reserved stash value partial with render_to_string method.
Expand Down
34 changes: 11 additions & 23 deletions lib/Mojo/Headers.pm
Expand Up @@ -19,7 +19,7 @@ my %NORMALCASE = map { lc($_) => $_ } (
for my $header (values %NORMALCASE) {
my $name = lc $header;
$name =~ y/-/_/;
monkey_patch __PACKAGE__, $name, sub { scalar shift->header($header => @_) };
monkey_patch __PACKAGE__, $name, sub { shift->header($header => @_) };
}

sub add {
Expand Down Expand Up @@ -62,12 +62,8 @@ sub header {
# Replace
return $self->remove($name)->add($name, @_) if @_;

# String
return unless my $headers = $self->{headers}{lc $name};
return join ', ', map { join ', ', @$_ } @$headers unless wantarray;

# Array
return @$headers;
return undef unless my $headers = $self->{headers}{lc $name};
return join ', ', map { join ', ', @$_ } @$headers;
}

sub is_finished { (shift->{state} // '') eq 'finished' }
Expand Down Expand Up @@ -118,7 +114,7 @@ sub parse {
return $self;
}

sub referrer { scalar shift->header(Referer => @_) }
sub referrer { shift->header(Referer => @_) }

sub remove {
my ($self, $name) = @_;
Expand All @@ -128,7 +124,7 @@ sub remove {

sub to_hash {
my ($self, $multi) = @_;
return {map { $_ => $multi ? [$self->header($_)] : scalar $self->header($_) }
return {map { $_ => $multi ? $self->{headers}{lc $_} : $self->header($_) }
@{$self->names}};
}

Expand All @@ -138,7 +134,8 @@ sub to_string {
# Make sure multiline values are formatted correctly
my @headers;
for my $name (@{$self->names}) {
push @headers, "$name: " . join("\x0d\x0a ", @$_) for $self->header($name);
push @headers, "$name: " . join("\x0d\x0a ", @$_)
for @{$self->{headers}{lc $name}};
}

return join "\x0d\x0a", @headers;
Expand Down Expand Up @@ -373,22 +370,13 @@ Parse headers from a hash reference, an empty hash removes all headers.
=head2 header
my $value = $headers->header('Foo');
my @values = $headers->header('Foo');
$headers = $headers->header(Foo => 'one value');
$headers = $headers->header(Foo => 'first value', 'second value');
$headers = $headers->header(Foo => ['first line', 'second line']);
my $value = $headers->header('Foo');
$headers = $headers->header(Foo => 'one value');
$headers = $headers->header(Foo => 'first value', 'second value');
$headers = $headers->header(Foo => ['first line', 'second line']);
Get or replace the current header values.
# Multiple headers with the same name
for my $header ($headers->header('Set-Cookie')) {
say 'Set-Cookie:';
# Multiple lines per header
say for @$header;
}
=head2 host
my $host = $headers->host;
Expand Down
7 changes: 4 additions & 3 deletions lib/Mojo/Server/PSGI.pm
Expand Up @@ -22,10 +22,11 @@ sub run {

# Response headers
my $res = $tx->res->fix_headers;
my $headers = $res->content->headers;
my $headers = $res->headers;
my @headers;
for my $name (@{$headers->names}) {
push @headers, $name => $_ for map {@$_} $headers->header($name);
my $hash = $headers->to_hash(1);
for my $name (keys %$hash) {
push @headers, map { $name => $_ } map {@$_} @{$hash->{$name}};
}

# PSGI response
Expand Down
14 changes: 6 additions & 8 deletions t/mojo/headers.t
Expand Up @@ -123,14 +123,11 @@ is $headers->to_string,
"X-Test: 23\x0d\x0a 24\x0d\x0a"
. "X-Test: single line\x0d\x0a"
. "X-Test: 25\x0d\x0a 26", 'right format';
my @array = $headers->header('X-Test');
is_deeply \@array, [[23, 24], ['single line'], [25, 26]], 'right structure';
is_deeply $headers->to_hash(1),
{'X-Test' => [[23, 24], ['single line'], [25, 26]]}, 'right structure';
is_deeply $headers->to_hash, {'X-Test' => '23, 24, single line, 25, 26'},
'right structure';
my $str = $headers->header('X-Test');
is $str, "23, 24, single line, 25, 26", 'right format';
is $headers->header('X-Test'), "23, 24, single line, 25, 26", 'right format';

# Parse headers
$headers = Mojo::Headers->new;
Expand Down Expand Up @@ -160,11 +157,12 @@ Foo: first again
EOF
ok $headers->is_finished, 'parser is finished';
my $multi = [['first', 'second', 'third'], ['first again', 'second ":again"']];
$hash = {'Content-Type' => [['text/plain']], Foo => $multi,
'Foo Bar' => [['baz']]};
$hash = {
'Content-Type' => [['text/plain']],
Foo => [['first', 'second', 'third'], ['first again', 'second ":again"']],
'Foo Bar' => [['baz']]
};
is_deeply $headers->to_hash(1), $hash, 'right structure';
is_deeply [$headers->header('Foo')], $multi, 'right structure';
is scalar $headers->header('Foo'),
'first, second, third, first again, second ":again"', 'right value';
$headers = Mojo::Headers->new->parse($headers->to_string . "\x0d\x0a\x0d\x0a");
Expand Down
2 changes: 1 addition & 1 deletion t/mojo/websocket_proxy_tls.t
Expand Up @@ -24,7 +24,7 @@ app->log->level('fatal');
get '/' => sub {
my $self = shift;
$self->res->headers->header('X-Works',
$self->req->headers->header('X-Works'));
$self->req->headers->header('X-Works') // '');
my $rel = $self->req->url;
my $abs = $rel->to_abs;
$self->render(text => "Hello World! $rel $abs");
Expand Down

0 comments on commit 90fac4b

Please sign in to comment.