void PropertiesBinding::SetList(const ValueList& args, KValueRef result) { if (args.size() >= 2 && args.at(0)->IsString() && args.at(1)->IsList()) { std::string property = args.at(0)->ToString(); KListRef list = args.at(1)->ToList(); std::string value = ""; for (unsigned int i = 0; i < list->Size(); i++) { KValueRef arg = list->At(i); if (arg->IsString()) { value += list->At(i)->ToString(); if (i < list->Size() - 1) { value += ","; } } else { std::cerr << "skipping object: " << arg->GetType() << std::endl; } } config->setString(property, value); if (file_path.size() > 0) { config->save(file_path); } } }
void KObject::SetNS(const char *name, KValueRef value) { std::vector<std::string> tokens; FileUtils::Tokenize(std::string(name), tokens, "."); KObject *scope = this; for (size_t i = 0; i < tokens.size() - 1; i++) { const char* token = tokens[i].c_str(); StaticBoundObject *next; KValueRef next_val = scope->Get(token); if (next_val->IsUndefined()) { next = new StaticBoundObject(); KObjectRef so = next; next_val = Value::NewObject(so); scope->Set(token, next_val); scope = next; } else if (!next_val->IsObject() && !next_val->IsMethod() && !next_val->IsList()) { std::cerr << "invalid namespace for " << name << ", token: " << token << " was " << next_val->GetType() << std::endl; throw Value::NewString("Invalid namespace on setNS"); } else { scope = next_val->ToObject().get(); } } const char *prop_name = tokens[tokens.size()-1].c_str(); scope->Set(prop_name, value); #ifdef DEBUG_BINDING std::cout << "BOUND: " << value->GetType() << " to: " << name << std::endl; #endif }
void convert (Statement &select, KValueRef arg) { if (arg->IsString()) { std::string *s = new std::string(arg->ToString()); select , use(*s); strings.push_back(s); } else if (arg->IsInt()) { int *i = new int(arg->ToInt()); select , use(*i); ints.push_back(i); } else if (arg->IsDouble()) { double *d = new double(arg->ToDouble()); select , use(*d); doubles.push_back(d); } else if (arg->IsBool()) { bool *b = new bool(arg->ToBool()); select , use(*b); bools.push_back(b); } else if (arg->IsNull() || arg->IsUndefined()) { // in this case, we bind a null string (dequoted) std::string *s = new std::string("null"); select , use(s); strings.push_back(s); } else { throw ValueException::FromFormat("Unsupport type for argument: %s", arg->GetType().c_str()); } }