<commit_before>meerkat-slot
============

Slot-cache module for MeerkatCMF<commit_msg>fixed<commit_after>Slot-cache module for MeerkatCMF
============

Слот - это не просто ячейка памяти в кэше, это некая прослойка, умеющая при запросе по ключу либо взять значение из кэша или в случае его отсутствия 
произвести вычисления, отдать значение и положить в его кэш.
Для создания слота необходимо наследовать Meerkat\Slot\Slot и переопределить метод load, который как раз и вычисляет (например, получает значение из БД)
~~~
namespace Meerkat\Slot;

use Meerkat\Slot\Slot;
use Meerkat\Core\Theme;
use \Kohana as Kohana;
use \Profiler as Profiler;

class Slot_PathTemplate extends Slot {

    protected $_lifetime = 1;

    function load() {
        $token = Profiler::start(__CLASS__, $this->_id);
        $themes_dirs = array();
        if ($theme = Theme::instance()->get()) {
            $themes_dirs['user'] = Theme::instance()->get();
        }
        $themes_dirs['default'] = '!';
        $path = false;
        foreach ($themes_dirs as $themes_dir) {
            $tpl_dir = 'tpl' . '/' . $themes_dir;
            $path = Kohana::find_file($tpl_dir, $this->_id, 'html');
        }
        if (!$path) {
            //print $tpl_dir. $this->_id. 'html';exit;
            throw new \Exception('Template ' . $this->_id . ' not found');
        }
        Profiler::stop($token);
        return $path;
    }

}
~~~
{'fraction_non_alphanumeric': 0.141643059490085, 'fraction_numerical': 0.000708215297450425, 'mean_word_length': 2.8925619834710745, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '691352', 'n_tokens_mistral': 497, 'n_tokens_neox': 517, 'n_words': 125}