Skip to content

Commit 9b2b485

Browse files
committed
Stop making extra server calls. Fixes #6
1 parent 3b24ec4 commit 9b2b485

File tree

4 files changed

+19
-25
lines changed

4 files changed

+19
-25
lines changed

src/PHPCouchDB/Database.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,10 @@ public function create($doc)
118118
try {
119119
$response = $this->client->request($verb, $endpoint, ['json' => $doc]);
120120
if ($response->getStatusCode() == 201 && $response_data = json_decode($response->getBody(), true)) {
121-
$id = $response_data['id'];
122-
// all good. Let's fetch the doc and return it
123-
$fetched_data = json_decode($this->client->get('/' . $this->db_name . '/' . $id)->getBody(), true);
124-
return new Document($this, $fetched_data);
121+
$newdoc = new Document($this, $doc);
122+
$newdoc->id = $response_data['id'];
123+
$newdoc->rev = $response_data['rev'];
124+
return $newdoc;
125125
}
126126
} catch (\GuzzleHttp\Exception\ConnectException $e) {
127127
throw new Exception\ServerException(

src/PHPCouchDB/Document.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,12 @@ public function update() : Document
7979

8080
try {
8181
$response = $this->client->request('PUT', $endpoint, ["json" => $doc]);
82-
// get a brand new version and return it as a brand new object
83-
$newrev = $this->database->getDocById($this->id);
84-
return $newrev;
82+
if ($response->getStatusCode() == 201 && $response_data = json_decode($response->getBody(), true)) {
83+
$newdoc = new Document($this->database, $doc);
84+
$newdoc->id = $response_data['id'];
85+
$newdoc->rev = $response_data['rev'];
86+
return $newdoc;
87+
}
8588
} catch (\GuzzleHTTP\Exception\ClientException $e) {
8689
// is it a conflict? Or something else?
8790
if ($e->getResponse()->getStatusCode() == 409) {

tests/PHPCouchDB/DatabaseTest.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,8 @@ public function testGetAllDocsWithNoDocs() {
6161
public function testCreateWithID() {
6262
$create = '{"ok":true,"id":"abcde12345","rev":"1-928ec193918889e122e7ad45cfd88e47"}';
6363
$create_response = new Response(201, [], $create);
64-
$fetch = '{"_id":"abcde12345","_rev":"1-928ec193918889e122e7ad45cfd88e47","noise":"howl"}';
65-
$fetch_response = new Response(200, [], $fetch);
6664

67-
$mock = new MockHandler([ $this->use_response, $create_response, $fetch_response ]);
65+
$mock = new MockHandler([ $this->use_response, $create_response ]);
6866
$handler = HandlerStack::create($mock);
6967
$client = new Client(['handler' => $handler]);
7068

@@ -81,10 +79,8 @@ public function testCreateWithID() {
8179
public function testCreateWithoutID() {
8280
$create = '{"ok":true,"id":"95613816b3a7490727388ebb47002c0f","rev":"1-928ec193918889e122e7ad45cfd88e47"}';
8381
$create_response = new Response(201, [], $create);
84-
$fetch = '{"_id":"95613816b3a7490727388ebb47002c0f","_rev":"1-928ec193918889e122e7ad45cfd88e47","noise":"howl"}';
85-
$fetch_response = new Response(200, [], $fetch);
8682

87-
$mock = new MockHandler([ $this->use_response, $create_response, $fetch_response ]);
83+
$mock = new MockHandler([ $this->use_response, $create_response ]);
8884
$handler = HandlerStack::create($mock);
8985
$client = new Client(['handler' => $handler]);
9086

tests/PHPCouchDB/DocumentTest.php

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,13 @@ public function setUp() {
1818

1919
$create = '{"ok":true,"id":"abcde12345","rev":"1-928ec193918889e122e7ad45cfd88e47"}';
2020
$this->create_response = new Response(201, [], $create);
21-
$fetch = '{"_id":"abcde12345","_rev":"1-928ec193918889e122e7ad45cfd88e47","noise":"howl"}';
22-
$this->fetch_response = new Response(200, [], $fetch);
2321
}
2422

2523
public function testUpdate() {
2624
$update = '{"ok":true,"id":"abcde12345","rev":"2-74a0465bd6e3ea40a1a3752b93916762"}';
27-
$update_response = new Response(200, [], $update);
25+
$update_response = new Response(201, [], $update);
2826

29-
$fetch2 = '{"_id":"abcde12345","_rev":"1-928ec193918889e122e7ad45cfd88e47","noise":"howl"}';
30-
$fetch_response2 = new Response(200, [], $fetch2);
31-
32-
$mock = new MockHandler([ $this->use_response, $this->create_response, $this->fetch_response, $update_response, $fetch_response2 ]);
27+
$mock = new MockHandler([ $this->use_response, $this->create_response, $update_response ]);
3328
$handler = HandlerStack::create($mock);
3429
$client = new Client(['handler' => $handler]);
3530

@@ -54,7 +49,7 @@ public function testUpdateConflict() {
5449
$update = '{"error":"conflict","reason":"Document update conflict."}';;
5550
$update_response = new Response(409, [], $update);
5651

57-
$mock = new MockHandler([ $this->use_response, $this->create_response, $this->fetch_response, $update_response ]);
52+
$mock = new MockHandler([ $this->use_response, $this->create_response, $update_response ]);
5853
$handler = HandlerStack::create($mock);
5954
$client = new Client(['handler' => $handler]);
6055

@@ -71,10 +66,10 @@ public function testDelete() {
7166
$delete = '{"ok":true,"id":"abcde12345","rev":"2-74a0465bd6e3ea40a1a3752b93916762"}';
7267
$delete_response = new Response(200, [], $delete);
7368

74-
$fetch3 = '{"error":"not_found","reason":"deleted"}';
75-
$fetch_response3 = new Response(404, [], $fetch3);
69+
$delete2 = '{"error":"not_found","reason":"deleted"}';
70+
$delete_response2 = new Response(404, [], $delete2);
7671

77-
$mock = new MockHandler([ $this->use_response, $this->create_response, $this->fetch_response, $delete_response, $fetch_response3 ]);
72+
$mock = new MockHandler([ $this->use_response, $this->create_response, $delete_response, $delete_response2 ]);
7873
$handler = HandlerStack::create($mock);
7974
$client = new Client(['handler' => $handler]);
8075

@@ -99,7 +94,7 @@ public function testDeleteConflict() {
9994
$delete = '{"error":"conflict","reason":"Document update conflict."}';
10095
$delete_response = new Response(409, [], $delete);
10196

102-
$mock = new MockHandler([ $this->use_response, $this->create_response, $this->fetch_response, $delete_response ]);
97+
$mock = new MockHandler([ $this->use_response, $this->create_response, $delete_response ]);
10398
$handler = HandlerStack::create($mock);
10499
$client = new Client(['handler' => $handler]);
105100

0 commit comments

Comments
 (0)