diff options
-rw-r--r-- | db/entity.php | 70 | ||||
-rw-r--r-- | db/item.php | 57 | ||||
-rw-r--r-- | tests/db/EntityTest.php | 24 |
3 files changed, 84 insertions, 67 deletions
diff --git a/db/entity.php b/db/entity.php index 58c42cca7..1adf9b518 100644 --- a/db/entity.php +++ b/db/entity.php @@ -27,11 +27,9 @@ namespace OCA\News\Db; abstract class Entity { - public $id; - + public $id; private $updatedFields; - public function __construct(){ $this->updatedFields = array(); } @@ -44,10 +42,61 @@ abstract class Entity { * getter method */ public function __call($methodName, $args){ - if(startsWith($methodName, 'set')){ - $setterPart = substr($methodName, 2); - array_push($this->updatedFields, $setterPart); + if(strpos($methodName, 'set') === 0){ + $setterPart = substr($methodName, 3); + $attr = lcfirst($setterPart); + + // mark as accessed + array_push($this->updatedFields, $attr); + $this->$attr = $args[0]; + + } elseif(strpos($methodName, 'get') === 0) { + $getterPart = substr($methodName, 3); + $attr = lcfirst($getterPart); + return $this->$attr; + } + } + + + /** + * 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; } @@ -70,13 +119,4 @@ abstract class Entity { } - public function setId($id){ - $this->id = $id; - } - - - public function getId(){ - return $this->id; - } - }
\ No newline at end of file diff --git a/db/item.php b/db/item.php index ee25ab122..ad245d486 100644 --- a/db/item.php +++ b/db/item.php @@ -16,61 +16,14 @@ namespace OCA\News\Db; class Item extends Entity { public $url; - public $feed_id; + public $title; public $guid; + public $body; public $status; - public $title; + public $author; + public $date; public $feedTitle; - - - public function setUrl($url) { - $this->url = $url; - } - - public function getUrl() { - return $this->url; - } - - public function setFeedId($feed_id) { - $this->feed_id = $feed_id; - } - - public function getFeedId() { - return $this->feed_id; - } - - public function setGUID($guid) { - $this->guid = $guid; - } - - public function getGUID() { - return $this->guid; - } - - public function setStatus($status) { - $this->status = $status; - } - - public function getStatus() { - return $this->status; - } - - public function getTitle() { - return $this->title; - } - - public function setTitle($title) { - $this->title = $title; - } - - public function getFeedTitle() { - return $this->feedTitle; - } - - public function setFeedTitle($feedtitle) { - $this->feedTitle = $feedtitle; - } - + public $enclosure; } diff --git a/tests/db/EntityTest.php b/tests/db/EntityTest.php index 3e778d4fe..44f288a04 100644 --- a/tests/db/EntityTest.php +++ b/tests/db/EntityTest.php @@ -64,6 +64,30 @@ class EntityTest extends \PHPUnit_Framework_TestCase { } + public function testColumnToPropertyNoReplacement(){ + $column = 'my'; + $entity = new TestEntity(); + $this->assertEquals('my', + $entity->columnToProperty($column)); + } + + + public function testColumnToProperty(){ + $column = 'my_attribute'; + $entity = new TestEntity(); + $this->assertEquals('myAttribute', + $entity->columnToProperty($column)); + } + + + public function testPropertyToColumnNoReplacement(){ + $property = 'my'; + $entity = new TestEntity(); + $this->assertEquals('my', + $entity->propertyToColumn($property)); + } + + public function testSetterMarksFieldUpdated(){ $id = 3; $entity = new TestEntity(); |