Skip to content

Commit c034906

Browse files
authored
Merge pull request #31 from UseMuffin/fallback-webservice-class
Fix generating fallback webservice class for plugin without vendor namespace.
2 parents 11bd04e + 73fd7a0 commit c034906

File tree

8 files changed

+116
-10
lines changed

8 files changed

+116
-10
lines changed

src/AbstractDriver.php

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ abstract class AbstractDriver implements LoggerAwareInterface
4444
public function __construct($config = [])
4545
{
4646
if (!empty($config)) {
47-
$this->config($config);
47+
$this->config($config);
4848
}
49-
49+
5050
$this->initialize();
5151
}
5252

@@ -200,16 +200,19 @@ public function __debugInfo()
200200
*/
201201
protected function _createWebservice($className, array $options = [])
202202
{
203-
$namespaceParts = explode('\\', get_class($this));
204-
205-
$pluginName = implode('/', array_reverse(array_slice(array_reverse($namespaceParts), -2)));
206-
207203
$webservice = App::className($className, 'Webservice', 'Webservice');
208204
if ($webservice) {
209205
return new $webservice($options);
210206
}
211207

212-
$fallbackWebserviceClass = $pluginName . '.' . end($namespaceParts);
208+
$namespaceParts = explode('\\', get_class($this));
209+
$fallbackWebserviceClass = end($namespaceParts);
210+
211+
list($pluginName) = pluginSplit($className);
212+
if ($pluginName) {
213+
$fallbackWebserviceClass = $pluginName . '.' . $fallbackWebserviceClass;
214+
}
215+
213216
$fallbackWebservice = App::className($fallbackWebserviceClass, 'Webservice', 'Webservice');
214217
if ($fallbackWebservice) {
215218
return new $fallbackWebservice($options);

src/Model/Endpoint.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -849,9 +849,7 @@ public function save(EntityInterface $resource, $options = [])
849849
if ($resource->isNew()) {
850850
$query = $this->query()->create();
851851
} else {
852-
$query = $this->query()->update()->where([
853-
$resource->extract((array)$this->primaryKey())
854-
]);
852+
$query = $this->query()->update()->where($resource->extract($primaryColumns));
855853
}
856854
$query->set($data);
857855

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
namespace Muffin\Webservice\Test\TestCase\Model;
3+
4+
use Cake\TestSuite\TestCase;
5+
use SomeVendor\SomePlugin\Webservice\Driver\SomePlugin;
6+
use TestPlugin\Webservice\Driver\TestPlugin;
7+
8+
class AbstractDriverTest extends TestCase
9+
{
10+
public function testWebserviceWithoutVendor()
11+
{
12+
$driver = new TestPlugin;
13+
14+
$webservice = $driver->webservice('test_plugin');
15+
$this->assertInstanceOf('TestPlugin\Webservice\TestPluginWebservice', $webservice);
16+
17+
$webservice = $driver->webservice('foo');
18+
$this->assertInstanceOf('TestPlugin\Webservice\TestPluginWebservice', $webservice);
19+
}
20+
21+
public function testWebserviceWithVendor()
22+
{
23+
$driver = new SomePlugin;
24+
25+
$webservice = $driver->webservice('some_plugin');
26+
$this->assertInstanceOf('SomeVendor\SomePlugin\Webservice\SomePluginWebservice', $webservice);
27+
28+
$webservice = $driver->webservice('foo');
29+
$this->assertInstanceOf('SomeVendor\SomePlugin\Webservice\SomePluginWebservice', $webservice);
30+
}
31+
}

tests/bootstrap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
$loader->addNamespace('TestApp', APP);
4141
$loader->addNamespace('SomeVendor\SomePlugin', APP . 'plugins' . DS . 'SomeVendor' . DS . 'SomePlugin' . DS . 'src');
42+
$loader->addNamespace('TestPlugin', APP . 'plugins' . DS . 'TestPlugin' . DS . 'src');
4243

4344
require_once CORE_PATH . 'config/bootstrap.php';
4445

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
namespace SomeVendor\SomePlugin\Webservice\Driver;
3+
4+
use Muffin\Webservice\AbstractDriver;
5+
6+
class SomePlugin extends AbstractDriver
7+
{
8+
9+
/**
10+
* Initialize is used to easily extend the constructor.
11+
*
12+
* @return void
13+
*/
14+
public function initialize()
15+
{
16+
}
17+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
namespace SomeVendor\SomePlugin\Webservice;
3+
4+
use Muffin\Webservice\Model\Endpoint;
5+
use Muffin\Webservice\Webservice\Webservice;
6+
7+
class SomePluginWebservice extends Webservice
8+
{
9+
10+
public function createResource($resourceClass, array $properties = [])
11+
{
12+
return $this->_createResource($resourceClass, $properties);
13+
}
14+
15+
public function transformResults(Endpoint $endpoint, array $results)
16+
{
17+
return $this->_transformResults($endpoint, $results);
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace TestPlugin\Webservice\Driver;
4+
5+
use Muffin\Webservice\AbstractDriver;
6+
7+
class TestPlugin extends AbstractDriver
8+
{
9+
10+
/**
11+
* Initialize is used to easily extend the constructor.
12+
*
13+
* @return void
14+
*/
15+
public function initialize()
16+
{
17+
}
18+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
namespace TestPlugin\Webservice;
3+
4+
use Muffin\Webservice\Model\Endpoint;
5+
use Muffin\Webservice\Webservice\Webservice;
6+
7+
class TestPluginWebservice extends Webservice
8+
{
9+
10+
public function createResource($resourceClass, array $properties = [])
11+
{
12+
return $this->_createResource($resourceClass, $properties);
13+
}
14+
15+
public function transformResults(Endpoint $endpoint, array $results)
16+
{
17+
return $this->_transformResults($endpoint, $results);
18+
}
19+
}

0 commit comments

Comments
 (0)