diff options
author | Benjamin Nortier <bjnortier@gmail.com> | 2012-09-20 11:01:35 +0100 |
---|---|---|
committer | Jan Lehnardt <jan@apache.org> | 2012-11-02 14:02:48 +0100 |
commit | 0a64f310b43b90176bb59040e7e866978c429c88 (patch) | |
tree | 241888617ea38cf2f8636a5fcefa7dc47d6e871b | |
parent | 1a9143ed1a3d6b8ee99420d7d8f98303908eee09 (diff) | |
download | couchdb-0a64f310b43b90176bb59040e7e866978c429c88.tar.gz |
Document Id and Rev in response headers
-rw-r--r-- | src/couch_mrview/src/couch_mrview_show.erl | 14 | ||||
-rw-r--r-- | src/couchdb/couch_httpd.erl | 13 |
2 files changed, 25 insertions, 2 deletions
diff --git a/src/couch_mrview/src/couch_mrview_show.erl b/src/couch_mrview/src/couch_mrview_show.erl index 3bfa035f7..b2c3a32f9 100644 --- a/src/couch_mrview/src/couch_mrview_show.erl +++ b/src/couch_mrview/src/couch_mrview_show.erl @@ -144,9 +144,21 @@ send_doc_update_response(Req, Db, DDoc, UpdateName, Doc, DocId) -> couch_doc:validate_docid(NewDoc#doc.id), {ok, NewRev} = couch_db:update_doc(Db, NewDoc, Options), NewRevStr = couch_doc:rev_to_str(NewRev), + DocIdHeader = case DocId of + null -> + [{<<"json">>, {Props}}] = JsonResp0, + case lists:keyfind(<<"id">>, 1, Props) of + {_, NewDocId} -> + [{<<"X-Couch-Id">>, NewDocId}]; + false -> + [] + end; + DocId -> + [{<<"X-Couch-Id">>, DocId}] + end, {[ {<<"code">>, 201}, - {<<"headers">>, {[{<<"X-Couch-Update-NewRev">>, NewRevStr}]}} + {<<"headers">>, {[{<<"X-Couch-Update-NewRev">>, NewRevStr}] ++ DocIdHeader}} | JsonResp0]}; [<<"up">>, _Other, {JsonResp0}] -> {[{<<"code">>, 200} | JsonResp0]} diff --git a/src/couchdb/couch_httpd.erl b/src/couchdb/couch_httpd.erl index 45ceebcd1..da47dfcfd 100644 --- a/src/couchdb/couch_httpd.erl +++ b/src/couchdb/couch_httpd.erl @@ -692,8 +692,19 @@ send_json(Req, Code, Headers, Value) -> {"Content-Type", negotiate_content_type(Req)}, {"Cache-Control", "must-revalidate"} ], + IdAndRevHeaders = case Value of + {Props} when is_list(Props) -> + case {lists:keyfind(id, 1, Props), lists:keyfind(rev, 1, Props)} of + {{_, Id}, {_, Rev}} -> + [{"X-Couch-Id", Id}, {"X-Couch-Rev", Rev}]; + _ -> + [] + end; + _ -> + [] + end, Body = [start_jsonp(), ?JSON_ENCODE(Value), end_jsonp(), $\n], - send_response(Req, Code, DefaultHeaders ++ Headers, Body). + send_response(Req, Code, DefaultHeaders ++ IdAndRevHeaders ++ Headers, Body). start_json_response(Req, Code) -> start_json_response(Req, Code, []). |