[CACHE][WRAPPER] Fix cache wrapper

This commit is contained in:
Hugo Sales 2020-07-10 13:13:53 +00:00 committed by Hugo Sales
parent 288f8363ae
commit aaba304ca8
1 changed files with 21 additions and 9 deletions

View File

@ -17,7 +17,7 @@
// along with GNU social. If not, see <http://www.gnu.org/licenses/>. // along with GNU social. If not, see <http://www.gnu.org/licenses/>.
// }}} // }}}
namespace App\Core\Cache; namespace App\Core;
use Functional as F; use Functional as F;
use Symfony\Component\Cache\Adapter\AbstractAdapter; use Symfony\Component\Cache\Adapter\AbstractAdapter;
@ -26,7 +26,7 @@ use Symfony\Component\Cache\Adapter\ChainAdapter;
abstract class Cache abstract class Cache
{ {
protected static AbstractAdapter $pool; protected static AbstractAdapter $pool;
private const ENV_VAR = 'SOCIAL_CACHE_ADAPTER'; private static string $ENV_VAR = 'SOCIAL_CACHE_ADAPTER';
/** /**
* Configure a cache pool, with adapters taken from `ENV_VAR`. * Configure a cache pool, with adapters taken from `ENV_VAR`.
@ -35,11 +35,11 @@ abstract class Cache
*/ */
public static function setPool() public static function setPool()
{ {
if (!isset($_ENV[ENV_VAR])) { if (!isset($_ENV[self::$ENV_VAR])) {
return; return;
} }
$adapters = F\map(explode(':', strtolower($_ENV[ENV_VAR])), $adapters = F\map(explode(':', strtolower($_ENV[self::$ENV_VAR])),
function (string $a) { function (string $a) {
return 'Adapter\\' . ucfirst($a) . 'Adapter'; return 'Adapter\\' . ucfirst($a) . 'Adapter';
}); });
@ -51,11 +51,23 @@ abstract class Cache
} }
} }
/** public static function get(string $key, callable $calculate, float $beta = 1.0)
* Forward calls to the configured $pool
*/
public static function __callStatic(string $name, array $args)
{ {
return self::$pool->{$name}(...$args); return self::$pool->get($key, $calculate, $beta);
}
public static function delete(string $key)
{
return self::$pool->delete($key);
}
public static function getList(string $key, callable $calculate, int $max_count = 0, float $beta = 1.0)
{
// Get the current keys associated with a list. If the cache
// is not primed, the function is called and returns an empty
// list
$keys = self::get($key, function (ItemInterface $i) { return []; }, $beta);
if ($max_count == 0) {
}
} }
} }