Skip to content

Commit

Permalink
improve is_status_class method in Mojo::Message::Response to be able …
Browse files Browse the repository at this point in the history
…to check for multiple classes at once
  • Loading branch information
kraih committed Dec 20, 2016
1 parent 1a19e9d commit 3d81cd1
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 7 deletions.
4 changes: 3 additions & 1 deletion Changes
@@ -1,5 +1,7 @@

7.13 2016-12-20
7.13 2016-12-21
- Improved is_status_class method in Mojo::Message::Response to be able to
check for multiple classes at once.

7.12 2016-12-18
- Added button_to and csrf_button_to helpers to
Expand Down
8 changes: 6 additions & 2 deletions lib/Mojo/Message/Response.pm
Expand Up @@ -126,9 +126,9 @@ sub is_empty {
}

sub is_status_class {
my ($self, $class) = @_;
my ($self, @classes) = @_;
return undef unless my $code = $self->code;
return $code >= $class && $code < ($class + 100);
return !!grep { $code >= $_ && $code < ($_ + 100) } @classes;
}

sub start_line_size { length shift->_start_line->{start_buffer} }
Expand Down Expand Up @@ -254,16 +254,20 @@ Check if this response has a C<1xx>, C<204> or C<304> status code.
=head2 is_status_class
my $bool = $res->is_status_class(200);
my $bool = $res->is_status_class(400, 500);
Check response status class.
# True
Mojo::Message::Response->new->code(304)->is_status_class(300);
Mojo::Message::Response->new->code(404)->is_status_class(400);
Mojo::Message::Response->new->code(404)->is_status_class(400, 500);
Mojo::Message::Response->new->code(502)->is_status_class(400, 500);
# False
Mojo::Message::Response->new->code(404)->is_status_class(300);
Mojo::Message::Response->new->code(404)->is_status_class(200);
Mojo::Message::Response->new->code(200)->is_status_class(400, 500);
=head2 start_line_size
Expand Down
11 changes: 7 additions & 4 deletions t/mojo/response.t
Expand Up @@ -88,10 +88,13 @@ ok $res->code(200)->is_status_class(200), 'is in range';
ok $res->code(201)->is_status_class(200), 'is in range';
ok $res->code(299)->is_status_class(200), 'is in range';
ok $res->code(302)->is_status_class(300), 'is in range';
ok !$res->code(199)->is_status_class(200), 'not in range';
ok !$res->code(300)->is_status_class(200), 'not in range';
ok !$res->code(200)->is_status_class(100), 'not in range';
ok !$res->code(200)->is_status_class(300), 'not in range';
ok $res->code(302)->is_status_class(200, 300), 'is in range';
ok $res->code(302)->is_status_class(300, 400), 'is in range';
ok !$res->code(199)->is_status_class(200), 'not in range';
ok !$res->code(300)->is_status_class(200), 'not in range';
ok !$res->code(200)->is_status_class(100), 'not in range';
ok !$res->code(200)->is_status_class(300), 'not in range';
ok !$res->code(200)->is_status_class(300, 400), 'not in range';
ok !$res->code(undef)->is_status_class(200), 'no range';

# Status code and message
Expand Down

0 comments on commit 3d81cd1

Please sign in to comment.