Browse Source

Add ini.stringify functionality, a test, and some TODOs in ini.js

v0.7.4-release
isaacs 15 years ago
committed by Ryan Dahl
parent
commit
4befe93a4b
  1. 37
      lib/ini.js
  2. 33
      test/simple/test-ini.js

37
lib/ini.js

@ -1,3 +1,13 @@
// TODO:
// 1. Handle quoted strings, including line breaks, so that this:
// foo = "bar
// baz"
// parses to {foo:"bar\n baz"}
// 2. Escape with \, so that this:
// foo = bar\
// \"baz
// parses to {foo:"bar\n \"baz"}
exports.parse = function(d) {
var ini = {'-':{}};
@ -26,4 +36,31 @@ exports.parse = function(d) {
}
return ini;
};
function safe (val) {
return (val+"").replace(/[\n\r]+/g, " ");
}
exports.stringify = function (obj) {
// if the obj has a "-" section, then do that first.
var ini = "";
if ("-" in obj) {
for (var key in obj["-"]) {
ini += safe(key)+" = "+safe(obj["-"][key])+"\n";
}
}
for (var section in obj) if (section !== "-") {
ini += "[" + safe(section) + "]\n";
for (var key in obj[section]) {
ini += safe(key) + ((obj[section][key] === true)
? "\n"
: " = "+safe(obj[section][key])+"\n");
}
}
return ini;
};
exports.encode = exports.stringify;
exports.decode = exports.parse;

33
test/simple/test-ini.js

@ -1,6 +1,7 @@
require("../common");
var path = require('path');
var fs = require("fs");
var path = require('path'),
fs = require("fs"),
ini = require("ini"),
parse = require("ini").parse;
debug("load fixtures/fixture.ini");
@ -15,8 +16,7 @@ fs.readFile(p,function(err, data) {
var iniContents = parse(data);
assert.equal(typeof iniContents, 'object');
var expect =
{ "-" :
var expect = { "-" :
{ "root" : "something"
, "url" : "http://example.com/?foo=bar"
}
@ -34,13 +34,26 @@ fs.readFile(p,function(err, data) {
{ "something else" : "blah"
, "remove" : "whitespace"
}
};
},
expectStr = "root = something\n"+
"url = http://example.com/?foo=bar\n"+
"[the section with whitespace]\n"+
"this has whitespace = yep\n"+
"just a flag, no value.\n"+
"[section]\n"+
"one = two\n"+
"Foo = Bar\n"+
"this = Your Mother!\n"+
"blank = \n"+
"[Section Two]\n"+
"something else = blah\n"+
"remove = whitespace\n";
assert.deepEqual(iniContents, expect,
"actual: \n"+inspect(iniContents) +"\n≠\nexpected:\n"+inspect(expect))
assert.equal(iniContents['-']['root'],'something');
assert.equal(iniContents['section']['blank'],'');
assert.equal(iniContents['Section Two']['remove'],'whitespace');
"actual: \n"+inspect(iniContents) +"\n≠\nexpected:\n"+inspect(expect));
assert.equal(ini.stringify(iniContents), expectStr,
"actual: \n"+inspect(ini.stringify(iniContents)) +"\n≠\nexpected:\n"+inspect(expectStr));
});

Loading…
Cancel
Save