Skip to content

Commit 69d557f

Browse files
authored
Merge pull request #251 from arangodb/feature/issue-243
Feature/issue 243
2 parents 4551ed2 + c83f0ec commit 69d557f

13 files changed

+252
-121
lines changed

lib/ArangoDBClient/Batch.php

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@
1414
/**
1515
* Provides batching functionality
1616
*
17-
* <br>
18-
*
1917
* @package ArangoDBClient
2018
* @since 1.1
2119
*/
2220
class Batch
2321
{
22+
/**
23+
* Import $_documentClass functionality
24+
*/
25+
use DocumentClassable;
26+
2427
/**
2528
* Batch Response Object
2629
*
@@ -560,22 +563,6 @@ public function getConnection()
560563
return $this->_connection;
561564
}
562565

563-
/**
564-
* @var string Document class to use
565-
*/
566-
protected $_documentClass = '\ArangoDBClient\Document';
567-
568-
/**
569-
* Sets the document class to use
570-
*
571-
* @param string $class Document class to use
572-
* @return Batch
573-
*/
574-
public function setDocumentClass($class)
575-
{
576-
$this->_documentClass = $class;
577-
return $this;
578-
}
579566
}
580567

581568
class_alias(Batch::class, '\triagens\ArangoDb\Batch');

lib/ArangoDBClient/BatchPart.php

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,17 @@
1414
/**
1515
* Provides batch part functionality
1616
*
17-
* <br>
18-
*
1917
* @package ArangoDBClient
2018
* @since 1.1
2119
*/
2220

2321

2422
class BatchPart
2523
{
24+
/**
25+
* Import $_documentClass functionality
26+
*/
27+
use DocumentClassable;
2628

2729

2830
/**
@@ -243,6 +245,7 @@ public function getHttpCode()
243245
public function getProcessedResponse()
244246
{
245247
$_documentClass = $this->_documentClass;
248+
$_edgeClass = $this->_edgeClass;
246249

247250
$response = $this->getResponse();
248251
switch ($this->_type) {
@@ -273,7 +276,7 @@ public function getProcessedResponse()
273276
$json = $response->getJson();
274277
$options = $this->getCursorOptions();
275278
$options['_isNew'] = false;
276-
$response = Edge::createFromArray($json, $options);
279+
$response = $_edgeClass::createFromArray($json, $options);
277280
break;
278281
case 'edge':
279282
$json = $response->getJson();
@@ -288,7 +291,7 @@ public function getProcessedResponse()
288291
$options['_isNew'] = false;
289292
$response = [];
290293
foreach ($json[EdgeHandler::ENTRY_EDGES] as $data) {
291-
$response[] = Edge::createFromArray($data, $options);
294+
$response[] = $_edgeClass::createFromArray($data, $options);
292295
}
293296
break;
294297
case 'getcollection':
@@ -338,22 +341,6 @@ private function getCursorOptions()
338341
return $this->_cursorOptions;
339342
}
340343

341-
/**
342-
* @var string Document class to use
343-
*/
344-
protected $_documentClass = '\ArangoDBClient\Document';
345-
346-
/**
347-
* Sets the document class to use
348-
*
349-
* @param string $class Document class to use
350-
* @return BatchPart
351-
*/
352-
public function setDocumentClass($class)
353-
{
354-
$this->_documentClass = $class;
355-
return $this;
356-
}
357344
}
358345

359346
class_alias(BatchPart::class, '\triagens\ArangoDb\BatchPart');

lib/ArangoDBClient/Collection.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -489,8 +489,6 @@ public function getName()
489489
*/
490490
public function setType($type)
491491
{
492-
assert(is_int($type));
493-
494492
if ($type === 'document') {
495493
$type = self::TYPE_DOCUMENT;
496494
} else if ($type === 'edge') {
@@ -505,6 +503,7 @@ public function setType($type)
505503
throw new ClientException('Invalid type used for collection');
506504
}
507505

506+
assert(is_int($type));
508507
$this->_type = $type;
509508
}
510509

lib/ArangoDBClient/Cursor.php

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
*/
2525
class Cursor implements \Iterator
2626
{
27+
/**
28+
* Import $_documentClass functionality
29+
*/
30+
use DocumentClassable;
31+
2732
/**
2833
* The connection object
2934
*
@@ -476,6 +481,7 @@ private function addDocumentsFromArray(array $data)
476481
private function addPathsFromArray(array $data)
477482
{
478483
$_documentClass = $this->_documentClass;
484+
$_edgeClass = $this->_edgeClass;
479485

480486
$entry = [
481487
'vertices' => [],
@@ -487,7 +493,7 @@ private function addPathsFromArray(array $data)
487493
$entry['vertices'][] = $_documentClass::createFromArray($v, $this->_options);
488494
}
489495
foreach ($data['edges'] as $v) {
490-
$entry['edges'][] = Edge::createFromArray($v, $this->_options);
496+
$entry['edges'][] = $_edgeClass::createFromArray($v, $this->_options);
491497
}
492498
$this->_result[] = $entry;
493499
}
@@ -503,6 +509,7 @@ private function addPathsFromArray(array $data)
503509
private function addShortestPathFromArray(array $data)
504510
{
505511
$_documentClass = $this->_documentClass;
512+
$_edgeClass = $this->_edgeClass;
506513

507514
if (!isset($data['vertices'])) {
508515
return;
@@ -528,7 +535,7 @@ private function addShortestPathFromArray(array $data)
528535
$path['vertices'][] = $v;
529536
}
530537
foreach ($data['edges'] as $v) {
531-
$path['edges'][] = Edge::createFromArray($v, $this->_options);
538+
$path['edges'][] = $_edgeClass::createFromArray($v, $this->_options);
532539
}
533540
$entry['paths'][] = $path;
534541

@@ -621,7 +628,9 @@ private function addFigureFromArray(array $data)
621628
*/
622629
private function addEdgesFromArray(array $data)
623630
{
624-
$this->_result[] = Edge::createFromArray($data, $this->_options);
631+
$_edgeClass = $this->_edgeClass;
632+
633+
$this->_result[] = $_edgeClass::createFromArray($data, $this->_options);
625634
}
626635

627636

@@ -635,7 +644,9 @@ private function addEdgesFromArray(array $data)
635644
*/
636645
private function addVerticesFromArray(array $data)
637646
{
638-
$this->_result[] = Vertex::createFromArray($data, $this->_options);
647+
$_documentClass = $this->_documentClass;
648+
649+
$this->_result[] = $_documentClass::createFromArray($data, $this->_options);
639650
}
640651

641652

@@ -842,23 +853,6 @@ public function getId()
842853
{
843854
return $this->_id;
844855
}
845-
846-
/**
847-
* @var string Document class to use
848-
*/
849-
protected $_documentClass = '\ArangoDBClient\Document';
850-
851-
/**
852-
* Sets the document class to use
853-
*
854-
* @param string $class Document class to use
855-
* @return Cursor
856-
*/
857-
public function setDocumentClass($class)
858-
{
859-
$this->_documentClass = $class;
860-
return $this;
861-
}
862856
}
863857

864858
class_alias(Cursor::class, '\triagens\ArangoDb\Cursor');
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
3+
/**
4+
* ArangoDB PHP client: mixin for $_documentClass functionality
5+
*
6+
* @package ArangoDBClient
7+
* @author Jan Steemann
8+
* @copyright Copyright 2018, triagens GmbH, Cologne, Germany
9+
*/
10+
11+
namespace ArangoDBClient;
12+
13+
/**
14+
* Add functionality for $_documentClass
15+
*
16+
* @package ArangoDBClient
17+
* @since 3.4
18+
*/
19+
trait DocumentClassable
20+
{
21+
/**
22+
* @var string Document class to use
23+
*/
24+
protected $_documentClass = '\ArangoDBClient\Document';
25+
26+
/**
27+
* @var string Edge class to use
28+
*/
29+
protected $_edgeClass = '\ArangoDBClient\Edge';
30+
31+
/**
32+
* Sets the document class to use
33+
*
34+
* @param string $class Document class to use
35+
* @return DocumentClassable
36+
*/
37+
public function setDocumentClass($class)
38+
{
39+
$this->_documentClass = $class;
40+
return $this;
41+
}
42+
43+
/**
44+
* Sets the edge class to use
45+
*
46+
* @param string $class Edge class to use
47+
* @return DocumentClassable
48+
*/
49+
public function setEdgeClass($class)
50+
{
51+
$this->_edgeClass = $class;
52+
return $this;
53+
}
54+
55+
}

lib/ArangoDBClient/EdgeHandler.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,19 @@ class EdgeHandler extends DocumentHandler
6363
*/
6464
const OPTION_DIRECTION = 'direction';
6565

66+
/**
67+
* Construct a new handler
68+
*
69+
* @param Connection $connection - connection to be used
70+
*
71+
*/
72+
public function __construct(Connection $connection)
73+
{
74+
parent::__construct($connection);
75+
76+
$this->setDocumentClass('\ArangoDBClient\Edge');
77+
}
78+
6679
/**
6780
* Intermediate function to call the createFromArray function from the right context
6881
*
@@ -74,7 +87,9 @@ class EdgeHandler extends DocumentHandler
7487
*/
7588
public function createFromArrayWithContext($data, $options)
7689
{
77-
return Edge::createFromArray($data, $options);
90+
$_edgeClass = $this->_edgeClass;
91+
92+
return $_edgeClass::createFromArray($data, $options);
7893
}
7994

8095

@@ -127,7 +142,8 @@ public function saveEdge($collection, $from, $to, $document, array $options = []
127142
$collection = $this->makeCollection($collection);
128143

129144
if (is_array($document)) {
130-
$document = Edge::createFromArray($document);
145+
$_edgeClass = $this->_edgeClass;
146+
$document = $_edgeClass::createFromArray($document);
131147
}
132148
$document->setFrom($from);
133149
$document->setTo($to);

lib/ArangoDBClient/Export.php

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
*/
1919
class Export
2020
{
21+
/**
22+
* Import $_documentClass functionality
23+
*/
24+
use DocumentClassable;
25+
2126
/**
2227
* The connection object
2328
*
@@ -264,23 +269,6 @@ private function getCursorOptions()
264269

265270
return $result;
266271
}
267-
268-
/**
269-
* @var string Document class to use
270-
*/
271-
protected $_documentClass = '\ArangoDBClient\Document';
272-
273-
/**
274-
* Sets the document class to use
275-
*
276-
* @param string $class Document class to use
277-
* @return Export
278-
*/
279-
public function setDocumentClass($class)
280-
{
281-
$this->_documentClass = $class;
282-
return $this;
283-
}
284272
}
285273

286274
class_alias(Export::class, '\triagens\ArangoDb\Export');

0 commit comments

Comments
 (0)