void ConfigType::ValidateDictionary(const Dictionary::Ptr& dictionary, const std::vector<TypeRuleList::Ptr>& ruleLists, std::vector<String>& locations) { BOOST_FOREACH(const TypeRuleList::Ptr& ruleList, ruleLists) { BOOST_FOREACH(const String& require, ruleList->GetRequires()) { locations.push_back("Attribute '" + require + "'"); Value value = dictionary->Get(require); if (value.IsEmpty()) { ConfigCompilerContext::GetInstance()->AddMessage(true, "Required attribute is missing: " + LocationToString(locations)); } locations.pop_back(); } String validator = ruleList->GetValidator(); if (!validator.IsEmpty()) { ScriptFunction::Ptr func = ScriptFunctionRegistry::GetInstance()->GetItem(validator); if (!func) BOOST_THROW_EXCEPTION(std::invalid_argument("Validator function '" + validator + "' does not exist.")); std::vector<Value> arguments; arguments.push_back(LocationToString(locations)); arguments.push_back(dictionary); func->Invoke(arguments); } }
Value DynamicObject::InvokeMethod(const String& method, const std::vector<Value>& arguments) { Dictionary::Ptr methods; methods = GetMethods(); if (!methods) BOOST_THROW_EXCEPTION(std::invalid_argument("Method '" + method + "' does not exist.")); Value funcName = methods->Get(method); if (funcName.IsEmpty()) BOOST_THROW_EXCEPTION(std::invalid_argument("Method '" + method + "' does not exist.")); ScriptFunction::Ptr func; if (funcName.IsObjectType<ScriptFunction>()) { func = funcName; } else { func = ScriptFunction::GetByName(funcName); if (!func) BOOST_THROW_EXCEPTION(std::invalid_argument("Function '" + String(funcName) + "' does not exist.")); } return func->Invoke(arguments); }
Value DynamicObject::InvokeMethod(const String& method, const std::vector<Value>& arguments) { Dictionary::Ptr methods; methods = m_Methods; if (!methods) BOOST_THROW_EXCEPTION(std::invalid_argument("Method '" + method + "' does not exist.")); String funcName = methods->Get(method); if (funcName.IsEmpty()) BOOST_THROW_EXCEPTION(std::invalid_argument("Method '" + method + "' does not exist.")); ScriptFunction::Ptr func = ScriptFunctionRegistry::GetInstance()->GetItem(funcName); if (!func) BOOST_THROW_EXCEPTION(std::invalid_argument("Function '" + funcName + "' does not exist.")); return func->Invoke(arguments); }