public static function init()
{
// If requirements are not empty then we have already initialised requirements
if (static::$_initialised) {
return;
}
// Custom validators
static::storeRequirement('Validator:Array', new Shanty_Mongo_Validate_Array());
static::storeRequirement('Validator:MongoId', new Shanty_Mongo_Validate_Class('MongoId'));
static::storeRequirement('Validator:MongoDate', new Shanty_Mongo_Validate_Class('MongoDate'));
static::storeRequirement('Document', new Shanty_Mongo_Validate_Class('Shanty_Mongo_Document'));
static::storeRequirement('DocumentSet', new Shanty_Mongo_Validate_Class('Shanty_Mongo_DocumentSet'));
// Stubs
static::storeRequirement('Required', new Shanty_Mongo_Validate_StubTrue());
static::storeRequirement('AsReference', new Shanty_Mongo_Validate_StubTrue());
static::storeRequirement('Ignore', new Shanty_Mongo_Validate_StubTrue());
// Requirement creator for validators
static::storeRequirementCreator('/^Validator:([A-Za-z]+[\\w\\-:]*)$/', function ($data, $options = null) {
$instanceClass = $data[1];
if (!class_exists($instanceClass)) {
$instanceClass = 'Zend_Validate_' . $instanceClass;
if (!class_exists($instanceClass)) {
return null;
}
}
if (!is_null($options)) {
$validator = new $instanceClass($options);
} else {
$validator = new $instanceClass();
}
if (!$validator instanceof Zend_Validate_Interface) {
return null;
}
return $validator;
});
// Requirement creator for filters
static::storeRequirementCreator('/^Filter:([A-Za-z]+[\\w\\-:]*)$/', function ($data, $options = null) {
$instanceClass = $data[1];
if (!class_exists($instanceClass)) {
$instanceClass = 'Zend_Filter_' . $instanceClass;
if (!class_exists($instanceClass)) {
return null;
}
}
if (!is_null($options)) {
$validator = new $instanceClass($options);
} else {
$validator = new $instanceClass();
}
if (!$validator instanceof Zend_Filter_Interface) {
return null;
}
return $validator;
});
// Creates requirements to match classes
$classValidator = function ($data) {
if (!class_exists($data[1])) {
return null;
}
return new Shanty_Mongo_Validate_Class($data[1]);
};
static::storeRequirementCreator('/^Document:([A-Za-z]+[\\w\\-]*)$/', $classValidator);
static::storeRequirementCreator('/^DocumentSet:([A-Za-z]+[\\w\\-]*)$/', $classValidator);
static::$_initialised = true;
}