public function __construct(Database $model) { /* CLI case */ if (!defined('APPLICATION_ENV')) { define('APPLICATION_ENV', 'production'); } $this->model = $model; $ageChange = $model->cache()->get(sha1($model->dir)); $ageDb = $model->cache()->get(sha1($model->dir) . '_ageDb'); $dbFile = Config::get('directory.store', STORAGE_PATH) . DS . $model->db . '_' . APPLICATION_ENV . '.db'; $this->db = new PDO('sqlite:' . $dbFile); umask(00); chmod($dbFile, 0777); $populate = true; if (strlen($ageDb) && strlen($ageChange)) { if ($ageDb > $ageChange) { $populate = false; } else { $model->cache()->del(sha1($model->dir) . '_ageDb'); } } if ($populate) { $this->populate(); } }
public static function make($name, Database $model, $overAge = false) { $name = Inflector::urlize($name, '.'); $ageChange = $model->cache()->get(sha1($model->dir)); $ageChange = strlen($ageChange) ? $ageChange : 0; $hash = "dbjson::cachedQueries::{$model->db}::{$model->table}"; $cachedAge = "dbjson::cachedQueries::{$model->db}::{$model->table}::{$name}::age"; $ageCached = $model->cache()->get($cachedAge); $ageCached = strlen($ageCached) ? $ageCached : 0; $cached = $model->cache()->hget($hash, $name); if (strlen($cached)) { if ($ageCached < $ageChange) { if ($overAge) { return new Cachedresults($cached); } else { $model->cache()->hdel($hash, $name); $model->cache()->del($cachedAge); } } else { return new Cachedresults($cached); } } Event::listen("{$model->db}.{$model->table}.put.in.cache", function ($collection) use($model, $cachedAge, $hash, $name) { $model->cache()->hset($hash, $name, serialize($collection)); $model->cache()->set($cachedAge, time()); }); return $model; }