From 4befe93a4b4373cf2c3171d94e60a99bac854ee8 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 22 Mar 2010 15:25:12 -0700 Subject: [PATCH] Add ini.stringify functionality, a test, and some TODOs in ini.js --- lib/ini.js | 37 ++++++++++++++++++++++++++ test/simple/test-ini.js | 71 +++++++++++++++++++++++++++++-------------------- 2 files changed, 79 insertions(+), 29 deletions(-) diff --git a/lib/ini.js b/lib/ini.js index bc19387..3a59457 100644 --- a/lib/ini.js +++ b/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; diff --git a/test/simple/test-ini.js b/test/simple/test-ini.js index 9b072f2..489950d 100644 --- a/test/simple/test-ini.js +++ b/test/simple/test-ini.js @@ -1,7 +1,8 @@ require("../common"); -var path = require('path'); -var fs = require("fs"); -parse = require("ini").parse; +var path = require('path'), + fs = require("fs"), + ini = require("ini"), + parse = require("ini").parse; debug("load fixtures/fixture.ini"); @@ -15,32 +16,44 @@ fs.readFile(p,function(err, data) { var iniContents = parse(data); assert.equal(typeof iniContents, 'object'); - var expect = - { "-" : - { "root" : "something" - , "url" : "http://example.com/?foo=bar" - } - , "the section with whitespace" : - { "this has whitespace" : "yep" - , "just a flag, no value." : true - } - , "section" : - { "one" : "two" - , "Foo" : "Bar" - , "this" : "Your Mother!" - , "blank" : "" - } - , "Section Two" : - { "something else" : "blah" - , "remove" : "whitespace" - } - }; - - assert.deepEqual(iniContents, expect, - "actual: \n"+inspect(iniContents) +"\n≠\nexpected:\n"+inspect(expect)) + var expect = { "-" : + { "root" : "something" + , "url" : "http://example.com/?foo=bar" + } + , "the section with whitespace" : + { "this has whitespace" : "yep" + , "just a flag, no value." : true + } + , "section" : + { "one" : "two" + , "Foo" : "Bar" + , "this" : "Your Mother!" + , "blank" : "" + } + , "Section Two" : + { "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.equal(iniContents['-']['root'],'something'); - assert.equal(iniContents['section']['blank'],''); - assert.equal(iniContents['Section Two']['remove'],'whitespace'); + assert.deepEqual(iniContents, expect, + "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)); }); + + -- 2.7.4