Skip to content

Commit 8f4276f

Browse files
committed
Make a trait that implements ModelManagerInterface
This makes it easy to implement other ModelMangers in memory
1 parent d923b94 commit 8f4276f

File tree

2 files changed

+78
-63
lines changed

2 files changed

+78
-63
lines changed

src/Model/AccessTokenManager.php

Lines changed: 1 addition & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -18,73 +18,11 @@
1818
*/
1919
class AccessTokenManager implements AccessTokenManagerInterface
2020
{
21-
protected $models;
21+
use ModelManagerTrait;
2222

2323
public function getClassName()
2424
{
2525
return 'AuthBucket\\OAuth2\\Model\\AccessToken';
2626
}
2727

28-
public function createModel(ModelInterface $model)
29-
{
30-
$this->models[$model->getId()] = $model;
31-
32-
return $model;
33-
}
34-
35-
public function readModelAll()
36-
{
37-
return $this->models;
38-
}
39-
40-
public function readModelBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
41-
{
42-
$models = [];
43-
44-
foreach ($this->models as $model) {
45-
foreach ($criteria as $key => $value) {
46-
$getter = 'get'.ucfirst($key);
47-
48-
if (method_exists($model, $getter) && $model->$getter() === $value) {
49-
$models[$model->getId()] = $model;
50-
}
51-
}
52-
}
53-
54-
// For simplified implementation, we only order by first key/value pair here.
55-
if ($orderBy !== null && is_array($orderBy)) {
56-
usort($models, function ($a, $b) {
57-
$getter = 'get'.ucfirst(key($orderBy));
58-
59-
return strtolower(reset($orderBy)) !== 'asc'
60-
? strcmp($b->$getter(), $a->$getter())
61-
: strcmp($a->$getter(), $b->$getter());
62-
});
63-
}
64-
65-
$models = array_slice($models, $offset, $limit);
66-
67-
return $models ?: null;
68-
}
69-
70-
public function readModelOneBy(array $criteria, array $orderBy = null)
71-
{
72-
$models = $this->readModelBy($criteria, $orderBy, 1, 0);
73-
74-
return is_array($models) ? reset($models) : $models;
75-
}
76-
77-
public function updateModel(ModelInterface $model)
78-
{
79-
$this->models[$model->getId()] = $model;
80-
81-
return $model;
82-
}
83-
84-
public function deleteModel(ModelInterface $model)
85-
{
86-
$this->models[$model->getId()] = null;
87-
88-
return $model;
89-
}
9028
}

src/Model/ModelManagerTrait.php

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
3+
4+
namespace AuthBucket\OAuth2\Model;
5+
6+
7+
trait ModelManagerTrait
8+
{
9+
10+
protected $models;
11+
12+
public function createModel(ModelInterface $model)
13+
{
14+
$this->models[$model->getId()] = $model;
15+
16+
return $model;
17+
}
18+
19+
public function readModelAll()
20+
{
21+
return $this->models;
22+
}
23+
24+
public function readModelBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
25+
{
26+
$models = [];
27+
28+
foreach ($this->models as $model) {
29+
foreach ($criteria as $key => $value) {
30+
$getter = 'get'.ucfirst($key);
31+
32+
if (method_exists($model, $getter) && $model->$getter() === $value) {
33+
$models[$model->getId()] = $model;
34+
}
35+
}
36+
}
37+
38+
// For simplified implementation, we only order by first key/value pair here.
39+
if ($orderBy !== null && is_array($orderBy)) {
40+
usort(
41+
$models,
42+
function ($a, $b) {
43+
$getter = 'get'.ucfirst(key($orderBy));
44+
45+
return strtolower(reset($orderBy)) !== 'asc'
46+
? strcmp($b->$getter(), $a->$getter())
47+
: strcmp($a->$getter(), $b->$getter());
48+
}
49+
);
50+
}
51+
52+
$models = array_slice($models, $offset, $limit);
53+
54+
return $models ?: null;
55+
}
56+
57+
public function readModelOneBy(array $criteria, array $orderBy = null)
58+
{
59+
$models = $this->readModelBy($criteria, $orderBy, 1, 0);
60+
61+
return is_array($models) ? reset($models) : $models;
62+
}
63+
64+
public function updateModel(ModelInterface $model)
65+
{
66+
$this->models[$model->getId()] = $model;
67+
68+
return $model;
69+
}
70+
71+
public function deleteModel(ModelInterface $model)
72+
{
73+
$this->models[$model->getId()] = null;
74+
75+
return $model;
76+
}
77+
}

0 commit comments

Comments
 (0)