зеркало из https://github.com/nextcloud/news.git
moved entity to the appframework
This commit is contained in:
Родитель
de16ffbec0
Коммит
0f0a7f0c47
159
db/entity.php
159
db/entity.php
|
@ -1,159 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - News
|
||||
*
|
||||
* @author Alessandro Copyright
|
||||
* @author Bernhard Posselt
|
||||
* @copyright 2012 Alessandro Cosentino cosenal@gmail.com
|
||||
* @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\News\Db;
|
||||
|
||||
abstract class Entity {
|
||||
|
||||
public $id;
|
||||
|
||||
private $tableName;
|
||||
private $updatedFields;
|
||||
|
||||
public function __construct($tableName){
|
||||
$this->updatedFields = array();
|
||||
$this->tableName = '*dbprefix*' . $tableName;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Each time a setter is called, push the part after set
|
||||
* into an array: for instance setId will save Id in the
|
||||
* updated fields array so it can be easily used to create the
|
||||
* getter method
|
||||
*/
|
||||
public function __call($methodName, $args){
|
||||
|
||||
// setters
|
||||
if(strpos($methodName, 'set') === 0){
|
||||
$attr = lcfirst( substr($methodName, 3) );
|
||||
|
||||
// setters should only work for existing attributes
|
||||
if(property_exists($this, $attr)){
|
||||
$this->markFieldUpdated($attr);
|
||||
$this->$attr = $args[0];
|
||||
} else {
|
||||
throw new \BadFunctionCallException($attr .
|
||||
' is not a valid attribute');
|
||||
}
|
||||
|
||||
// getters
|
||||
} elseif(strpos($methodName, 'get') === 0) {
|
||||
$attr = lcfirst( substr($methodName, 3) );
|
||||
|
||||
// getters should only work for existing attributes
|
||||
if(property_exists($this, $attr)){
|
||||
return $this->$attr;
|
||||
} else {
|
||||
throw new \BadFunctionCallException($attr .
|
||||
' is not a valid attribute');
|
||||
}
|
||||
} else {
|
||||
throw new \BadFunctionCallException($methodName .
|
||||
' does not exist');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Mark am attribute as updated
|
||||
* @param string $attribute the name of the attribute
|
||||
*/
|
||||
protected function markFieldUpdated($attribute){
|
||||
$this->updatedFields[$attribute] = true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Transform a database columnname to a property
|
||||
* @param string $columnName the name of the column
|
||||
* @return string the property name
|
||||
*/
|
||||
public function columnToProperty($columnName){
|
||||
$parts = explode('_', $columnName);
|
||||
$property = null;
|
||||
|
||||
foreach($parts as $part){
|
||||
if($property === null){
|
||||
$property = $part;
|
||||
} else {
|
||||
$property .= ucfirst($part);
|
||||
}
|
||||
}
|
||||
|
||||
return $property;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Transform a property to a database column name
|
||||
* @param string $property the name of the property
|
||||
* @return string the column name
|
||||
*/
|
||||
public function propertyToColumn($property){
|
||||
$parts = preg_split('/(?=[A-Z])/', $property);
|
||||
$column = null;
|
||||
|
||||
foreach($parts as $part){
|
||||
if($column === null){
|
||||
$column = $part;
|
||||
} else {
|
||||
$column .= '_' . lcfirst($part);
|
||||
}
|
||||
}
|
||||
|
||||
return $column;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return array array of updated fields for update query
|
||||
*/
|
||||
public function getUpdatedFields(){
|
||||
return $this->updatedFields;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Maps the keys of the row array to the attributes
|
||||
* @param array $row the row to map onto the entity
|
||||
*/
|
||||
public function fromRow(array $row){
|
||||
foreach($row as $key => $value){
|
||||
$prop = $this->columnToProperty($key);
|
||||
$this->$prop = $value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return string the table name
|
||||
*/
|
||||
public function getTableName(){
|
||||
return $this->tableName;
|
||||
}
|
||||
|
||||
}
|
|
@ -25,6 +25,8 @@
|
|||
|
||||
namespace OCA\News\Db;
|
||||
|
||||
use \OCA\AppFramework\Db\Entity;
|
||||
|
||||
|
||||
class Item extends Entity {
|
||||
|
||||
|
@ -41,10 +43,6 @@ class Item extends Entity {
|
|||
public $status;
|
||||
public $feedTitle;
|
||||
|
||||
public function __construct(){
|
||||
parent::__construct('news_items');
|
||||
}
|
||||
|
||||
public function setRead() {
|
||||
$this->markFieldUpdated('status');
|
||||
$this->status &= ~StatusFlag::UNREAD;
|
||||
|
|
|
@ -1,135 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - News
|
||||
*
|
||||
* @author Alessandro Copyright
|
||||
* @author Bernhard Posselt
|
||||
* @copyright 2012 Alessandro Cosentino cosenal@gmail.com
|
||||
* @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\News\Db;
|
||||
|
||||
require_once(__DIR__ . "/../classloader.php");
|
||||
|
||||
|
||||
class TestEntity extends Entity {
|
||||
public $name;
|
||||
public $email;
|
||||
|
||||
public function __construct(){
|
||||
parent::__construct('entity');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class EntityTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
private $entity;
|
||||
|
||||
protected function setUp(){
|
||||
$this->entity = new TestEntity();
|
||||
}
|
||||
|
||||
|
||||
public function testFromRow(){
|
||||
$row = array(
|
||||
'pre_name' => 'john',
|
||||
'email' => 'john@something.com'
|
||||
);
|
||||
$this->entity = new TestEntity();
|
||||
|
||||
$this->entity->fromRow($row);
|
||||
|
||||
$this->assertEquals($row['pre_name'], $this->entity->getPreName());
|
||||
$this->assertEquals($row['email'], $this->entity->getEmail());
|
||||
}
|
||||
|
||||
|
||||
public function testGetSetId(){
|
||||
$id = 3;
|
||||
$this->entity->setId(3);
|
||||
|
||||
$this->assertEquals($id, $this->entity->getId());
|
||||
}
|
||||
|
||||
|
||||
public function testColumnToPropertyNoReplacement(){
|
||||
$column = 'my';
|
||||
$this->assertEquals('my',
|
||||
$this->entity->columnToProperty($column));
|
||||
}
|
||||
|
||||
|
||||
public function testColumnToProperty(){
|
||||
$column = 'my_attribute';
|
||||
$this->assertEquals('myAttribute',
|
||||
$this->entity->columnToProperty($column));
|
||||
}
|
||||
|
||||
|
||||
public function testPropertyToColumnNoReplacement(){
|
||||
$property = 'my';
|
||||
$this->assertEquals('my',
|
||||
$this->entity->propertyToColumn($property));
|
||||
}
|
||||
|
||||
|
||||
public function testSetterMarksFieldUpdated(){
|
||||
$id = 3;
|
||||
$this->entity->setId(3);
|
||||
|
||||
$this->assertContains('id', $this->entity->getUpdatedFields());
|
||||
}
|
||||
|
||||
|
||||
public function testCallShouldOnlyWorkForGetterSetter(){
|
||||
$this->setExpectedException('\BadFunctionCallException');
|
||||
|
||||
$this->entity->something();
|
||||
}
|
||||
|
||||
|
||||
public function testGetterShouldFailIfAttributeNotDefined(){
|
||||
$this->setExpectedException('\BadFunctionCallException');
|
||||
|
||||
$this->entity->getTest();
|
||||
}
|
||||
|
||||
|
||||
public function testSetterShouldFailIfAttributeNotDefined(){
|
||||
$this->setExpectedException('\BadFunctionCallException');
|
||||
|
||||
$this->entity->setTest();
|
||||
}
|
||||
|
||||
|
||||
public function testFromRowShouldNotAssignEmptyArray(){
|
||||
$row = array();
|
||||
$entity2 = new TestEntity();
|
||||
|
||||
$this->entity->fromRow($row);
|
||||
$this->assertEquals($entity2, $this->entity);
|
||||
}
|
||||
|
||||
|
||||
public function testEntityShouldSetTableName(){
|
||||
$this->assertEquals('*dbprefix*entity', $this->entity->getTableName());
|
||||
}
|
||||
|
||||
}
|
|
@ -66,8 +66,4 @@ class ItemTest extends \PHPUnit_Framework_TestCase {
|
|||
}
|
||||
|
||||
|
||||
public function testTableName(){
|
||||
$this->assertEquals('*dbprefix*news_items', $this->item->getTableName());
|
||||
}
|
||||
|
||||
}
|
Загрузка…
Ссылка в новой задаче