rewriteVariablesToFile = function(configFileName, myVariables, callback){ var my_doc; var combinedDictionary = {} my_doc = fsutil.readYAMLSync(path.normalize(configFileName)); if( (! my_doc) || (! my_doc.variables)) { my_doc = {}; } if ( ! myVariables ) { myVariables = {}; } var variableArray = []; if (! Array.isArray(myVariables)) { console.log('not an array, pushing'); variableArray.push(myVariables); } else { variableArray = myVariables; } for ( var m_varArrayIndex = 0; m_varArrayIndex < variableArray.length; m_varArrayIndex++) { var variables = variableArray[m_varArrayIndex] || [{}]; //variables is an array of variable arrays for ( var m_varIndex = 0; m_varIndex < variables.length; m_varIndex++ ) { // now variables[m_varIndex] is a hash // iterate over the hash keys now for (m_var in variables[m_varIndex] ) { // we need to operate on the actual key if (! combinedDictionary[m_var]) { combinedDictionary[m_var] = variables[m_varIndex][m_var]; } else { var mergedDictionary = mergeOptions(combinedDictionary[m_var], variables[m_varIndex]); combinedDictionary[m_var] = mergedDictionary; } } }; if ( ! my_doc['variables'] ) {continue;} for ( var m_varIndex = 0; m_varIndex < my_doc['variables'].length; m_varIndex++ ) { var m_var = my_doc['variables'][m_varIndex]; var obj = {}; if (! combinedDictionary[m_var]) { obj = my_doc['variables'][m_var]; combinedDictionary[m_var] = obj; } else { var mergedDictionary = mergeOptions(combinedDictionary[m_var], my_doc['variables'][m_var]); combinedDictionary[m_var] = mergedDictionary; } }; } for(m_var in combinedDictionary){ delete combinedDictionary[m_var]['namespace'] } combinedDictionary = {variables: combinedDictionary}; var conf = yaml.dump(combinedDictionary, {indent: 4, sortKeys: true}); fs.writeFile(configFileName, conf, function(err) { if(err) { return callback(err, null); } else { return callback(null, true); } }); };
module.exports.validateRequiredVariables = function(file, done){ my_doc = fsutil.readYAMLSync(path.normalize(file)); if(!my_doc['variables']) { return true; } var missingRequiredVaribles = []; for(var key in my_doc['variables']){ var myVar = my_doc['variables'][key]; // if this is required, we need to have a default or value set var missingValue = variableIsMissingValue(myVar); var isRequired = variableIsRequired(myVar); var isMissing = ( Object.keys(myVar).length === 0 ); var notExcludable = variableIsNotExcludable(myVar); if ( ((isMissing) || (missingValue && isRequired)) && notExcludable) { missingRequiredVaribles.push({key: myVar}); console.log("ERROR: " + key + " is missing and required - please add a default value"); } } if(missingRequiredVaribles.length > 0) { err = new Error("Missing and required variables"); return done(err, null); } else { return done(null, true); } };