X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController%2FDBIC%2FAPI.pm;h=568b7fbb8993dbeb580cfaad20d32348bd866959;hb=e2f6c772e3ab169b87b44d7834c35e4449bb534c;hp=de143e68864f6b9bbe9bd2c7fe46ad0fcabc94ef;hpb=71c17090d68f61e915d6c56c12b7d49e5dac4ca4;p=catagits%2FCatalyst-Controller-DBIC-API.git diff --git a/lib/Catalyst/Controller/DBIC/API.pm b/lib/Catalyst/Controller/DBIC/API.pm index de143e6..568b7fb 100644 --- a/lib/Catalyst/Controller/DBIC/API.pm +++ b/lib/Catalyst/Controller/DBIC/API.pm @@ -867,34 +867,32 @@ sub end :Private { my ($self, $c) = @_; - # check for errors - my $default_status; + # don't change the http status code if already set elsewhere + unless ($c->res->status && $c->res->status != 200) { + if ($self->has_errors($c)) { + $c->res->status(400); + } + else { + $c->res->status(200); + } + } - # Check for errors caught elsewhere - if ( $c->res->status and $c->res->status != 200 ) { - $default_status = $c->res->status; - $c->stash->{$self->stash_key}->{success} = $self->use_json_boolean ? JSON::false : 'false'; - } elsif ($self->get_errors($c)) { - $c->stash->{$self->stash_key}->{messages} = $self->get_errors($c); - $c->stash->{$self->stash_key}->{success} = $self->use_json_boolean ? JSON::false : 'false'; - $default_status = 400; - } else { + if ($c->res->status == 200) { $c->stash->{$self->stash_key}->{success} = $self->use_json_boolean ? JSON::true : 'true'; - $default_status = 200; + if($self->return_object && $c->req->has_objects) { + my $returned_objects = []; + push(@$returned_objects, $self->each_object_inflate($c, $_)) for map { $_->[0] } $c->req->all_objects; + $c->stash->{$self->stash_key}->{$self->data_root} = scalar(@$returned_objects) > 1 ? $returned_objects : $returned_objects->[0]; + } } - - unless ($default_status == 200) - { + else { + $c->stash->{$self->stash_key}->{success} = $self->use_json_boolean ? JSON::false : 'false'; + $c->stash->{$self->stash_key}->{messages} = $self->get_errors($c) + if $self->has_errors($c); + # don't return data for error responses delete $c->stash->{$self->stash_key}->{$self->data_root}; } - elsif($self->return_object && $c->req->has_objects) - { - my $returned_objects = []; - push(@$returned_objects, $self->each_object_inflate($c, $_)) for map { $_->[0] } $c->req->all_objects; - $c->stash->{$self->stash_key}->{$self->data_root} = scalar(@$returned_objects) > 1 ? $returned_objects : $returned_objects->[0]; - } - $c->res->status( $default_status || 200 ); $c->forward('serialize'); } @@ -932,6 +930,8 @@ push_error stores an error message into the stash to be later retrieved by L{message}) { $error = $params->{message}; @@ -951,6 +951,8 @@ get_errors returns all of the errors stored in the stash sub get_errors { my ( $self, $c ) = @_; + die 'Catalyst app object missing' + unless defined $c; return $c->stash->{_dbic_crud_errors}; }