Skip to content
This repository was archived by the owner on Jul 31, 2018. It is now read-only.

Commit 8ca9de8

Browse files
authored
Merge pull request #127 from algolia/5.4-compatibility
fix(5.4) : make compatible with Laravel 5.4
2 parents 7fc362d + c359a99 commit 8ca9de8

File tree

2 files changed

+88
-2
lines changed

2 files changed

+88
-2
lines changed

src/EloquentSubscriber.php

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace AlgoliaSearch\Laravel;
44

5+
use Illuminate\Database\Eloquent\Model;
6+
57
class EloquentSubscriber
68
{
79
private $modelHelper;
@@ -11,8 +13,10 @@ public function __construct(ModelHelper $modelHelper)
1113
$this->modelHelper = $modelHelper;
1214
}
1315

14-
public function saved($model)
16+
public function saved($eventName, $payload = null)
1517
{
18+
$model = $this->getModelFromParams($eventName, $payload);
19+
1620
if (!$this->modelHelper->isAutoIndex($model)) {
1721
return true;
1822
}
@@ -29,8 +33,10 @@ public function saved($model)
2933
return true;
3034
}
3135

32-
public function deleted($model)
36+
public function deleted($eventName, $payload = null)
3337
{
38+
$model = $this->getModelFromParams($eventName, $payload);
39+
3440
if (!$this->modelHelper->isAutoDelete($model)) {
3541
return true;
3642
}
@@ -43,6 +49,23 @@ public function deleted($model)
4349
return true;
4450
}
4551

52+
/**
53+
* @param string|Model $eventName
54+
* @param array|null $payload
55+
*
56+
* @return Model
57+
*/
58+
private function getModelFromParams($eventName, $payload = null)
59+
{
60+
if($eventName instanceof Model) {
61+
// Laravel < 5.4
62+
return $eventName;
63+
}
64+
65+
// Laravel >= 5.4
66+
return $payload[0];
67+
}
68+
4669
public function subscribe($events)
4770
{
4871
$events->listen('eloquent.saved*', '\AlgoliaSearch\Laravel\EloquentSubscriber@saved');

tests/EloquentSubscriberTest.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
namespace AlgoliaSearch\Tests;
4+
5+
use AlgoliaSearch\Laravel\EloquentSubscriber;
6+
use AlgoliaSearch\Tests\Models\Model1;
7+
8+
9+
class EloquentSubscriberTest extends \PHPUnit_Framework_TestCase
10+
{
11+
/**
12+
* @var \PHPUnit_Framework_MockObject_MockObject
13+
*/
14+
private $modelHelper;
15+
16+
/**
17+
* @var EloquentSubscriber
18+
*/
19+
private $eloquentSubscriber;
20+
21+
protected function setUp()
22+
{
23+
$this->modelHelper = $this->getMockBuilder('AlgoliaSearch\Laravel\ModelHelper')->disableOriginalConstructor()->getMock();
24+
$this->eloquentSubscriber = new EloquentSubscriber($this->modelHelper);
25+
}
26+
27+
/**
28+
* @dataProvider listenerDataProvider
29+
*/
30+
public function testSkipSyncOnSaveIfAutoSyncDisabled($eventName, $payload)
31+
{
32+
$this->modelHelper->expects($this->once())
33+
->method('isAutoIndex')
34+
->with(new Model1())
35+
->willReturn(false);
36+
37+
$this->eloquentSubscriber->saved($eventName, $payload);
38+
}
39+
40+
/**
41+
* @dataProvider listenerDataProvider
42+
*/
43+
public function testSkipSyncOnDeleteIfAutoSyncDisabled($eventName, $payload)
44+
{
45+
$this->modelHelper->expects($this->once())
46+
->method('isAutoDelete')
47+
->with(new Model1())
48+
->willReturn(false);
49+
50+
$this->eloquentSubscriber->deleted($eventName, $payload);
51+
}
52+
53+
public function listenerDataProvider()
54+
{
55+
return [
56+
[new Model1(), null], // Laravel 5.3
57+
['eloquent.event', [new Model1()]], // Laravel 5.4
58+
];
59+
}
60+
61+
62+
63+
}

0 commit comments

Comments
 (0)