From 4907ba92c57d920a9024774e724193381a9ad84a Mon Sep 17 00:00:00 2001 From: Fred Cox Date: Tue, 8 Aug 2017 17:52:25 +0300 Subject: [PATCH] Make a trait that implements ModelManagerInterface This makes it easy to implement other ModelMangers in memory --- src/Model/AccessTokenManager.php | 65 +--------------------------- src/Model/ModelManagerTrait.php | 74 ++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 64 deletions(-) create mode 100644 src/Model/ModelManagerTrait.php diff --git a/src/Model/AccessTokenManager.php b/src/Model/AccessTokenManager.php index 02cfa0af..5637cd7a 100644 --- a/src/Model/AccessTokenManager.php +++ b/src/Model/AccessTokenManager.php @@ -18,73 +18,10 @@ */ class AccessTokenManager implements AccessTokenManagerInterface { - protected $models; + use ModelManagerTrait; public function getClassName() { return 'AuthBucket\\OAuth2\\Model\\AccessToken'; } - - public function createModel(ModelInterface $model) - { - $this->models[$model->getId()] = $model; - - return $model; - } - - public function readModelAll() - { - return $this->models; - } - - public function readModelBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) - { - $models = []; - - foreach ($this->models as $model) { - foreach ($criteria as $key => $value) { - $getter = 'get'.ucfirst($key); - - if (method_exists($model, $getter) && $model->$getter() === $value) { - $models[$model->getId()] = $model; - } - } - } - - // For simplified implementation, we only order by first key/value pair here. - if ($orderBy !== null && is_array($orderBy)) { - usort($models, function ($a, $b) { - $getter = 'get'.ucfirst(key($orderBy)); - - return strtolower(reset($orderBy)) !== 'asc' - ? strcmp($b->$getter(), $a->$getter()) - : strcmp($a->$getter(), $b->$getter()); - }); - } - - $models = array_slice($models, $offset, $limit); - - return $models ?: null; - } - - public function readModelOneBy(array $criteria, array $orderBy = null) - { - $models = $this->readModelBy($criteria, $orderBy, 1, 0); - - return is_array($models) ? reset($models) : $models; - } - - public function updateModel(ModelInterface $model) - { - $this->models[$model->getId()] = $model; - - return $model; - } - - public function deleteModel(ModelInterface $model) - { - $this->models[$model->getId()] = null; - - return $model; - } } diff --git a/src/Model/ModelManagerTrait.php b/src/Model/ModelManagerTrait.php new file mode 100644 index 00000000..aae22895 --- /dev/null +++ b/src/Model/ModelManagerTrait.php @@ -0,0 +1,74 @@ +models[$model->getId()] = $model; + + return $model; + } + + public function readModelAll() + { + return $this->models; + } + + public function readModelBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + { + $models = []; + + foreach ($this->models as $model) { + foreach ($criteria as $key => $value) { + $getter = 'get'.ucfirst($key); + + if (method_exists($model, $getter) && $model->$getter() === $value) { + $models[$model->getId()] = $model; + } + } + } + + // For simplified implementation, we only order by first key/value pair here. + if ($orderBy !== null && is_array($orderBy)) { + usort( + $models, + function ($a, $b) { + $getter = 'get'.ucfirst(key($orderBy)); + + return strtolower(reset($orderBy)) !== 'asc' + ? strcmp($b->$getter(), $a->$getter()) + : strcmp($a->$getter(), $b->$getter()); + } + ); + } + + $models = array_slice($models, $offset, $limit); + + return $models ?: null; + } + + public function readModelOneBy(array $criteria, array $orderBy = null) + { + $models = $this->readModelBy($criteria, $orderBy, 1, 0); + + return is_array($models) ? reset($models) : $models; + } + + public function updateModel(ModelInterface $model) + { + $this->models[$model->getId()] = $model; + + return $model; + } + + public function deleteModel(ModelInterface $model) + { + $this->models[$model->getId()] = null; + + return $model; + } +}