From: Wallace Reis Date: Sat, 30 Jun 2012 12:43:33 +0000 (+0200) Subject: Extend get_allowed_methods to include HEAD X-Git-Tag: 1.05~3 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Action-REST.git;a=commitdiff_plain;h=a08d447bc7896570e721648271c819bd5c438541 Extend get_allowed_methods to include HEAD --- diff --git a/lib/Catalyst/Action/REST.pm b/lib/Catalyst/Action/REST.pm index be267c1..9c5c86a 100644 --- a/lib/Catalyst/Action/REST.pm +++ b/lib/Catalyst/Action/REST.pm @@ -152,8 +152,12 @@ sub _dispatch_rest_method { sub get_allowed_methods { my ( $self, $controller, $c, $name ) = @_; my $class = ref($controller) ? ref($controller) : $controller; - my $methods = Class::Inspector->methods($class); - return map { /^$name\_(.+)$/ } @$methods; + my $methods = { + map { /^$name\_(.+)$/ ? ( $1 => 1 ) : () } + @{ Class::Inspector->methods($class) } + }; + $methods->{'HEAD'} = 1 if $methods->{'GET'}; + return keys %$methods; }; sub _return_options { diff --git a/t/catalyst-action-rest.t b/t/catalyst-action-rest.t index 6bfadd9..96452e9 100644 --- a/t/catalyst-action-rest.t +++ b/t/catalyst-action-rest.t @@ -44,17 +44,17 @@ ok($head_res->code == 405, 'HEAD request succeeded') my $fail_res = request( $t->delete( url => '/notreally' ) ); is( $fail_res->code, 405, "Request to bad method gets 405 Not Implemented" ); -is( $fail_res->header('allow'), "GET", "405 allow header properly set." ); +is( $fail_res->header('allow'), "GET, HEAD", "405 allow header properly set." ); my $options_res = request( $t->options( url => '/notreally' ) ); is( $options_res->code, 200, "OPTIONS request handler succeeded" ); is( $options_res->header('allow'), - "GET", "OPTIONS request allow header properly set." ); + "GET, HEAD", "OPTIONS request allow header properly set." ); my $opts_res = request( $t->options( url => '/rest/opts' ) ); is( $opts_res->code, 200, "OPTIONS request handler succeeded" ); is( $opts_res->header('allow'), - "GET", "OPTIONS request allow header properly set." ); + "GET, HEAD", "OPTIONS request allow header properly set." ); is($opts_res->content, q{}, 'should have no body'); $opts_res = request( @@ -65,7 +65,7 @@ $opts_res = request( ); is( $opts_res->code, 200, "OPTIONS request handler succeeded" ); is( $opts_res->header('allow'), - "GET", "OPTIONS request allow header properly set." ); + "GET, HEAD", "OPTIONS request allow header properly set." ); is($opts_res->content, q{}, 'should have no body'); my $modified_res = request( $t->get( url => '/not_modified' ) );