Cleaned up doctrine removal fix changes

This commit is contained in:
Richard Miller 2012-01-26 09:59:58 +00:00
parent 65be0a415e
commit 1d2887a83b
6 changed files with 16 additions and 27 deletions

View file

@ -317,8 +317,7 @@ class FOQElasticaExtension extends Extension
$listenerDef->replaceArgument(0, new Reference($objectPersisterId)); $listenerDef->replaceArgument(0, new Reference($objectPersisterId));
$listenerDef->replaceArgument(1, $typeConfig['model']); $listenerDef->replaceArgument(1, $typeConfig['model']);
$listenerDef->replaceArgument(3, $typeConfig['identifier']); $listenerDef->replaceArgument(3, $typeConfig['identifier']);
$events = $this->getDoctrineEvents($typeConfig); $listenerDef->replaceArgument(2, $this->getDoctrineEvents($typeConfig));
$listenerDef->replaceArgument(2, $events);
switch ($typeConfig['driver']) { switch ($typeConfig['driver']) {
case 'orm': $listenerDef->addTag('doctrine.event_subscriber'); break; case 'orm': $listenerDef->addTag('doctrine.event_subscriber'); break;
case 'mongodb': $listenerDef->addTag('doctrine.common.event_subscriber'); break; case 'mongodb': $listenerDef->addTag('doctrine.common.event_subscriber'); break;
@ -336,11 +335,13 @@ class FOQElasticaExtension extends Extension
'update' => array('postUpdate'), 'update' => array('postUpdate'),
'delete' => array('postRemove', 'preRemove') 'delete' => array('postRemove', 'preRemove')
); );
foreach ($eventMapping as $event => $doctrineEvents) { foreach ($eventMapping as $event => $doctrineEvents) {
if (isset($typeConfig['listener'][$event]) && $typeConfig['listener'][$event]) { if (isset($typeConfig['listener'][$event]) && $typeConfig['listener'][$event]) {
$events = array_merge($events, $doctrineEvents); $events = array_merge($events, $doctrineEvents);
} }
} }
return $events; return $events;
} }

View file

@ -28,19 +28,19 @@ abstract class AbstractListener
*/ */
protected $events; protected $events;
protected $identifier; protected $esIdentifierField;
protected $scheduledForRemoval; protected $scheduledForRemoval;
/** /**
* Constructor * Constructor
**/ **/
public function __construct(ObjectPersisterInterface $objectPersister, $objectClass, array $events, $identifier = 'id') public function __construct(ObjectPersisterInterface $objectPersister, $objectClass, array $events, $esIdentifierField = 'id')
{ {
$this->objectPersister = $objectPersister; $this->objectPersister = $objectPersister;
$this->objectClass = $objectClass; $this->objectClass = $objectClass;
$this->events = $events; $this->events = $events;
$this->identifier = $identifier; $this->esIdentifierField = $esIdentifierField;
$this->scheduledForRemoval = new \SplObjectStorage(); $this->scheduledForRemoval = array();
} }
/** /**
@ -53,15 +53,16 @@ abstract class AbstractListener
protected function scheduleForRemoval($object) protected function scheduleForRemoval($object)
{ {
$getIdentifierMethod = 'get' . ucfirst($this->identifier); $getEsIdentifierMethod = 'get' . ucfirst($this->esIdentifierField);
$this->scheduledForRemoval[$object] = $object->$getIdentifierMethod(); $this->scheduledForRemoval[spl_object_hash($object)] = $object->$getEsIdentifierMethod();
} }
protected function removeIfScheduled($object) protected function removeIfScheduled($object)
{ {
if (isset($this->scheduledForRemoval[$object])) { $objectHash = spl_object_hash($object);
$this->objectPersister->deleteById($this->scheduledForRemoval[$object]); if (isset($this->scheduledForRemoval[$objectHash])) {
$this->objectPersister->deleteById($this->scheduledForRemoval[$objectHash]);
unset($this->scheduledForRemoval[$objectHash]);
} }
} }
} }

View file

@ -43,5 +43,4 @@ class Listener extends AbstractListener implements EventSubscriber
$this->removeIfScheduled($entity); $this->removeIfScheduled($entity);
} }
} }
} }

View file

@ -61,13 +61,10 @@ class ObjectPersister implements ObjectPersisterInterface
* @param object $object * @param object $object
* @return null * @return null
**/ **/
public function deleteOne($object, $id = null) public function deleteOne($object)
{ {
if (!$id) { $document = $this->transformToElasticaDocument($object);
$document = $this->transformToElasticaDocument($object); $this->type->deleteById($document->getId());
$id = $document->getId();
}
$this->type->deleteById($id);
} }
/** /**
@ -107,5 +104,4 @@ class ObjectPersister implements ObjectPersisterInterface
{ {
return $this->transformer->transform($object, $this->fields); return $this->transformer->transform($object, $this->fields);
} }
} }

View file

@ -6,7 +6,6 @@ use FOQ\ElasticaBundle\Doctrine\MongoDB\Listener;
class Document class Document
{ {
public function getId() public function getId()
{ {
return ListenerTest::DOCUMENT_ID; return ListenerTest::DOCUMENT_ID;
@ -16,7 +15,6 @@ class Document
{ {
return ListenerTest::DOCUMENT_IDENTIFIER; return ListenerTest::DOCUMENT_IDENTIFIER;
} }
} }
/** /**
@ -24,7 +22,6 @@ class Document
*/ */
class ListenerTest extends \PHPUnit_Framework_TestCase class ListenerTest extends \PHPUnit_Framework_TestCase
{ {
const DOCUMENT_ID = 78; const DOCUMENT_ID = 78;
const DOCUMENT_IDENTIFIER = 826; const DOCUMENT_IDENTIFIER = 826;
@ -129,5 +126,4 @@ class ListenerTest extends \PHPUnit_Framework_TestCase
$listener->preRemove($eventArgsMock); $listener->preRemove($eventArgsMock);
$listener->postRemove($eventArgsMock); $listener->postRemove($eventArgsMock);
} }
} }

View file

@ -6,7 +6,6 @@ use FOQ\ElasticaBundle\Doctrine\ORM\Listener;
class Entity class Entity
{ {
public function getId() public function getId()
{ {
return ListenerTest::ENTITY_ID; return ListenerTest::ENTITY_ID;
@ -16,7 +15,6 @@ class Entity
{ {
return ListenerTest::ENTITY_IDENTIFIER; return ListenerTest::ENTITY_IDENTIFIER;
} }
} }
/** /**
@ -24,7 +22,6 @@ class Entity
*/ */
class ListenerTest extends \PHPUnit_Framework_TestCase class ListenerTest extends \PHPUnit_Framework_TestCase
{ {
const ENTITY_ID = 21; const ENTITY_ID = 21;
const ENTITY_IDENTIFIER = 912; const ENTITY_IDENTIFIER = 912;
@ -129,5 +126,4 @@ class ListenerTest extends \PHPUnit_Framework_TestCase
$listener->preRemove($eventArgsMock); $listener->preRemove($eventArgsMock);
$listener->postRemove($eventArgsMock); $listener->postRemove($eventArgsMock);
} }
} }