Skip to content

Commit a18fab4

Browse files
authored
Merge pull request #31 from CircleOfNice/route-annotations
Dependencies
2 parents 46b649a + 00ae31c commit a18fab4

File tree

8 files changed

+64
-132
lines changed

8 files changed

+64
-132
lines changed

Annotations/Loader.php

Lines changed: 0 additions & 45 deletions
This file was deleted.

Driver.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,14 @@ class Driver implements DriverInterface {
3939

4040
/**
4141
* {@inheritdoc}
42+
*
43+
* @SuppressWarnings("PHPMD.StaticAccess")
4244
*/
4345
public function connect(array $params, $username = null, $password = null, array $driverOptions = array()) {
4446
if (!empty($this->connection)) return $this->connection;
4547

46-
$metaDataProvider = new MetaData();
47-
$this->connection = new Connection($params, $this, new RoutingTable($metaDataProvider->getEntityNamespaces()));
48+
$metaData = new MetaData();
49+
$this->connection = new Connection($params, $this, new RoutingTable($metaData->getEntityNamespaces()));
4850
return $this->connection;
4951
}
5052

MetaData.php

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
namespace Circle\DoctrineRestDriver;
2020

2121
use Circle\DoctrineRestDriver\Annotations\Loader;
22-
use Doctrine\ORM\EntityManager;
22+
use Doctrine\Common\Annotations\AnnotationRegistry;
23+
use Doctrine\Common\Persistence\ObjectManager;
2324

2425
/**
2526
* Provider for doctrine meta data
@@ -29,23 +30,17 @@
2930
*/
3031
class MetaData {
3132

32-
/**
33-
* @var EntityManager
34-
*/
35-
private $em;
36-
3733
/**
3834
* MetaDataProvider constructor
3935
*
4036
* @SuppressWarnings("PHPMD.StaticAccess")
4137
*/
4238
public function __construct() {
43-
Loader::load();
44-
45-
$kernel = new \AppKernel('prod', true);
46-
$kernel->boot();
47-
48-
$this->em = $kernel->getContainer()->get('doctrine')->getManager();
39+
AnnotationRegistry::registerFile(__DIR__ . DIRECTORY_SEPARATOR . 'Annotations' . DIRECTORY_SEPARATOR . 'Insert.php');
40+
AnnotationRegistry::registerFile(__DIR__ . DIRECTORY_SEPARATOR . 'Annotations' . DIRECTORY_SEPARATOR . 'Update.php');
41+
AnnotationRegistry::registerFile(__DIR__ . DIRECTORY_SEPARATOR . 'Annotations' . DIRECTORY_SEPARATOR . 'Select.php');
42+
AnnotationRegistry::registerFile(__DIR__ . DIRECTORY_SEPARATOR . 'Annotations' . DIRECTORY_SEPARATOR . 'Fetch.php');
43+
AnnotationRegistry::registerFile(__DIR__ . DIRECTORY_SEPARATOR . 'Annotations' . DIRECTORY_SEPARATOR . 'Delete.php');
4944
}
5045

5146
/**
@@ -54,11 +49,25 @@ public function __construct() {
5449
* @return array
5550
*/
5651
public function getEntityNamespaces() {
57-
$meta = $this->em->getMetadataFactory()->getAllMetadata();
52+
$meta = $this->getMetaData(debug_backtrace());
5853

5954
return array_reduce($meta, function($carry, $item) {
6055
$carry[$item->table['name']] = $item->getName();
6156
return $carry;
6257
}, []);
6358
}
59+
60+
/**
61+
* returns all entity meta data if existing
62+
*
63+
* @param array $traces
64+
* @return array
65+
*/
66+
private function getMetaData(array $traces) {
67+
$em = array_filter($traces, function($trace) {
68+
return isset($trace['object']) && $trace['object'] instanceof ObjectManager;
69+
});
70+
71+
return empty($em) ? [] : array_pop($em)['object']->getMetaDataFactory()->getAllMetaData();
72+
}
6473
}

Tests/DriverTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,15 @@ public function getDatabase() {
8888
*/
8989
public function connect() {
9090
$params = [
91+
'driverClass' => 'Circle\DoctrineRestDriver\Driver',
9192
'driverOptions' => [
9293
'security_strategy' => 'none'
9394
],
9495
'user' => 'user',
9596
'password' => 'password',
9697
'host' => 'localhost'
9798
];
98-
$connection = $this->driver->connect($params);
99+
$connection = $this->driver->connect($params, null, null, $params['driverOptions']);
99100
$this->assertInstanceOf('Circle\DoctrineRestDriver\Connection', $connection);
100101
}
101102
}

Tests/FunctionalTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ public function setUp() {
6969
* @covers Circle\DoctrineRestDriver\Connection
7070
* @covers Circle\DoctrineRestDriver\Statement
7171
* @covers Circle\DoctrineRestDriver\Statement::<private>
72+
* @covers Circle\DoctrineRestDriver\MetaData
73+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
7274
*/
7375
public function find() {
7476
$entity = $this->em->find('Circle\DoctrineRestDriver\Tests\Entity\TestEntity', 1);
@@ -84,6 +86,8 @@ public function find() {
8486
* @covers Circle\DoctrineRestDriver\Connection
8587
* @covers Circle\DoctrineRestDriver\Statement
8688
* @covers Circle\DoctrineRestDriver\Statement::<private>
89+
* @covers Circle\DoctrineRestDriver\MetaData
90+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
8791
* @expectedException \Exception
8892
*/
8993
public function findNonExisting() {
@@ -97,6 +101,8 @@ public function findNonExisting() {
97101
* @covers Circle\DoctrineRestDriver\Connection
98102
* @covers Circle\DoctrineRestDriver\Statement
99103
* @covers Circle\DoctrineRestDriver\Statement::<private>
104+
* @covers Circle\DoctrineRestDriver\MetaData
105+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
100106
*/
101107
public function findOneBy() {
102108
$entity = $this->em->getRepository('Circle\DoctrineRestDriver\Tests\Entity\TestEntity')->findOneBy(['id' => 1]);
@@ -112,6 +118,8 @@ public function findOneBy() {
112118
* @covers Circle\DoctrineRestDriver\Connection
113119
* @covers Circle\DoctrineRestDriver\Statement
114120
* @covers Circle\DoctrineRestDriver\Statement::<private>
121+
* @covers Circle\DoctrineRestDriver\MetaData
122+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
115123
*/
116124
public function findBy() {
117125
$entity = $this->em->getRepository('Circle\DoctrineRestDriver\Tests\Entity\TestEntity')->findBy(['id' => 1]);
@@ -128,6 +136,8 @@ public function findBy() {
128136
* @covers Circle\DoctrineRestDriver\Connection
129137
* @covers Circle\DoctrineRestDriver\Statement
130138
* @covers Circle\DoctrineRestDriver\Statement::<private>
139+
* @covers Circle\DoctrineRestDriver\MetaData
140+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
131141
*/
132142
public function findAll() {
133143
$entity = $this->em->getRepository('Circle\DoctrineRestDriver\Tests\Entity\TestEntity')->findAll();
@@ -149,6 +159,8 @@ public function findAll() {
149159
* @covers Circle\DoctrineRestDriver\Connection
150160
* @covers Circle\DoctrineRestDriver\Statement
151161
* @covers Circle\DoctrineRestDriver\Statement::<private>
162+
* @covers Circle\DoctrineRestDriver\MetaData
163+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
152164
*/
153165
public function persistAndFlush() {
154166
$entity = new TestEntity();
@@ -175,6 +187,8 @@ public function persistAndFlush() {
175187
* @covers Circle\DoctrineRestDriver\Connection
176188
* @covers Circle\DoctrineRestDriver\Statement
177189
* @covers Circle\DoctrineRestDriver\Statement::<private>
190+
* @covers Circle\DoctrineRestDriver\MetaData
191+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
178192
*/
179193
public function updateAndFlush() {
180194
$entity = $this->em->find('Circle\DoctrineRestDriver\Tests\Entity\TestEntity', 1);
@@ -193,6 +207,8 @@ public function updateAndFlush() {
193207
* @covers Circle\DoctrineRestDriver\Connection
194208
* @covers Circle\DoctrineRestDriver\Statement
195209
* @covers Circle\DoctrineRestDriver\Statement::<private>
210+
* @covers Circle\DoctrineRestDriver\MetaData
211+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
196212
*/
197213
public function remove() {
198214
$entity = $this->em->find('Circle\DoctrineRestDriver\Tests\Entity\TestEntity', 1);
@@ -207,6 +223,8 @@ public function remove() {
207223
* @covers Circle\DoctrineRestDriver\Connection
208224
* @covers Circle\DoctrineRestDriver\Statement
209225
* @covers Circle\DoctrineRestDriver\Statement::<private>
226+
* @covers Circle\DoctrineRestDriver\MetaData
227+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
210228
*/
211229
public function dql() {
212230
$entity = $this->em
@@ -225,6 +243,8 @@ public function dql() {
225243
* @covers Circle\DoctrineRestDriver\Connection
226244
* @covers Circle\DoctrineRestDriver\Statement
227245
* @covers Circle\DoctrineRestDriver\Statement::<private>
246+
* @covers Circle\DoctrineRestDriver\MetaData
247+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
228248
*/
229249
public function nativeQuery() {
230250
$mapping = new ResultSetMapping();
@@ -249,6 +269,8 @@ public function nativeQuery() {
249269
* @covers Circle\DoctrineRestDriver\Connection
250270
* @covers Circle\DoctrineRestDriver\Statement
251271
* @covers Circle\DoctrineRestDriver\Statement::<private>
272+
* @covers Circle\DoctrineRestDriver\MetaData
273+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
252274
*/
253275
public function dqlWithOrderBy() {
254276
$entity = $this->em
@@ -271,6 +293,8 @@ public function dqlWithOrderBy() {
271293
* @covers Circle\DoctrineRestDriver\Connection
272294
* @covers Circle\DoctrineRestDriver\Statement
273295
* @covers Circle\DoctrineRestDriver\Statement::<private>
296+
* @covers Circle\DoctrineRestDriver\MetaData
297+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
274298
*/
275299
public function dqlWithObjectParameter() {
276300
$entity = $this->em
@@ -288,6 +312,8 @@ public function dqlWithObjectParameter() {
288312
* @covers Circle\DoctrineRestDriver\Connection
289313
* @covers Circle\DoctrineRestDriver\Statement
290314
* @covers Circle\DoctrineRestDriver\Statement::<private>
315+
* @covers Circle\DoctrineRestDriver\MetaData
316+
* @covers Circle\DoctrineRestDriver\MetaData::<private>
291317
* @expectedException \Exception
292318
*/
293319
public function nonImplementedEntity() {

Tests/MetaDataTest.php

Lines changed: 0 additions & 60 deletions
This file was deleted.

Tests/app/config/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ doctrine:
4141
charset: UTF8
4242
options:
4343
authenticator_class: "HttpAuthentication"
44-
CURLOPT_MAXREDIRS: 25
45-
CURLOPT_HTTPHEADER: "Content-Type: application/json"
44+
CURLOPT_MAXREDIRS: 25
45+
CURLOPT_HTTPHEADER: "Content-Type: application/json"
4646
# if using pdo_sqlite as your database driver:
4747
# 1. add the path in parameters.yml
4848
# e.g. database_path: "%kernel.root_dir%/data/data.db3"

composer.json

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,17 @@
1717
"require-dev": {
1818
"symfony/expression-language": "^3.0",
1919
"phpmd/phpmd" : "@stable",
20-
"phpunit/phpunit" : "@stable"
20+
"phpunit/phpunit" : "@stable",
21+
"symfony/yaml": "3.*",
22+
"sensio/framework-extra-bundle": "3.*",
23+
"symfony/framework-bundle": "3.*",
24+
"doctrine/doctrine-bundle": "^1.6",
25+
"symfony/validator": "3.*"
2126
},
2227
"autoload": {
2328
"psr-0": {
2429
"Circle\\DoctrineRestDriver": ""
25-
},
26-
"files": ["Tests/app/AppKernel.php"]
30+
}
2731
},
2832
"target-dir": "Circle/DoctrineRestDriver",
2933
"extra": {
@@ -36,11 +40,6 @@
3640
"doctrine/dbal": "2.*",
3741
"greenlion/php-sql-parser": "^4.0",
3842
"doctrine/orm": "2.*",
39-
"ci/restclientbundle": "^1.0",
40-
"symfony/yaml": "3.*",
41-
"sensio/framework-extra-bundle": "3.*",
42-
"symfony/framework-bundle": "3.*",
43-
"doctrine/doctrine-bundle": "^1.6",
44-
"symfony/validator": "3.*"
43+
"ci/restclientbundle": "^1.0"
4544
}
4645
}

0 commit comments

Comments
 (0)