infrajs / mark
Installs: 2 035
Dependents: 4
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- infrajs/each: ~1
- infrajs/load: ~1
- infrajs/path: ~1
- infrajs/sequence: ~1
README
Установка через composer
{
"require":{
"infrajs/mark":"~1"
}
}
Использование
$mark = new Mark('~auto/.mymarks/'); $mark->add('name',$fndef, $fncheck) $mark->setVal('ds'); //Попытка восстановить данные по метке. в папке mymarks будет искатсья файл ds.json $mark->getData(); //Если файл указанной метки не найден, то вернутся данные по умолчанию определённые с помощью $fndef; $mark->setData($data); //Данные можно установить вручную. Для ключи будут проверены с помощью $fncheck и если проверка не пройдена будет установлено значение от функции $fndef; $mark->getVal(); //Получить текущую метку. В этот момент метка будет сгенерирована и сохранена в папке автоматически.
Изменение данных
Имя метки может содержать и указания по изменению данных, которые по этой метки будут восстановлены.
Изменения указываются после двоеточия ключ и значения разделяются знаком =. Изменения может быть несколько, отделённые друг от друга двоеточием.
mark = 'xxx:keya=vala:keyb=valb:keyc=valc'
Применятся или нет изменения зависит от установленного для параметров check-функций, таким образом можно дать возможность пользователю устанавливать значения и гарантировать их корректность к моменту, где их нужно использовать.
Разберём указанный пример. Допустим по метке xxx
были восстановлены данные
{ "keya":123, "keyd":"opa", }
После применения указанных в метке изменнеий получатся данные
{ "keya":"vala", "keyb":"valb", "keyc":"valc", "keyd":"opa", }
Но параметр keyc никак не зарегистрирован черзе функцию add и будет удалён. А новое значение параметра keya не пройдёт проверку и будет сброшено на значение по умолчанию 0. В итоге получится:
{ "keya":"0", "keyb":"valb", "keyd":"opa" }
В коде это будет записано следующем образом:
$mark = new Mark('~auto/.test/'); $mark->add('keya', function(){ return '0'; }, function($newval){ if (!preg_match("/^\d+$")) return false; return true; }); $mark->add('keyb', function(){ return 'bla'; }, function($newval){ return true; }); $mark->add('keyd', function(){ return 'bla'; }, function($newval){ return true; }); $mark->setVal('xxx:keya=vala:keyb=valb'); //Метка ~auto/.test/xxx.json уже должна существовать $data = $mark->getData(); //Новые данные с изменениям и удовлетворяющие проверкам $str = $mark->getVal(); //Будет сгенерировано новая метка для данных и сохранена в папке.