Merge pull request #90 from midknight41/master
added support for BOM in load() and loadSync(), fixed travis build too.
This commit is contained in:
commit
5f148d5aa5
7 changed files with 105 additions and 6 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -3,6 +3,8 @@ config.json
|
||||||
test/fixtures/*.json
|
test/fixtures/*.json
|
||||||
!test/fixtures/complete.json
|
!test/fixtures/complete.json
|
||||||
!test/fixtures/malformed.json
|
!test/fixtures/malformed.json
|
||||||
|
!test/fixtures/bom.json
|
||||||
|
!test/fixtures/no-bom.json
|
||||||
node_modules/
|
node_modules/
|
||||||
node_modules/*
|
node_modules/*
|
||||||
npm-debug.log
|
npm-debug.log
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
language: node_js
|
language: node_js
|
||||||
node_js:
|
node_js:
|
||||||
- 0.4
|
|
||||||
- 0.6
|
- 0.6
|
||||||
- 0.8
|
- 0.8
|
||||||
- 0.9
|
- 0.10
|
||||||
|
- 0.11
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
|
|
|
@ -97,7 +97,12 @@ File.prototype.load = function (callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
self.store = self.format.parse(data.toString());
|
//deals with string that include BOM
|
||||||
|
var stringData = data.toString();
|
||||||
|
|
||||||
|
if (stringData.charAt(0) === '\uFEFF') stringData = stringData.substr(1);
|
||||||
|
self.store = self.format.parse(stringData);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
return callback(new Error("Error parsing your JSON configuration file: [" + self.file + '].'));
|
return callback(new Error("Error parsing your JSON configuration file: [" + self.file + '].'));
|
||||||
|
@ -125,7 +130,11 @@ File.prototype.loadSync = function () {
|
||||||
// Else, the path exists, read it from disk
|
// Else, the path exists, read it from disk
|
||||||
//
|
//
|
||||||
try {
|
try {
|
||||||
data = this.format.parse(fs.readFileSync(this.file, 'utf8'));
|
//deals with file that include BOM
|
||||||
|
var fileData = fs.readFileSync(this.file, 'utf8');
|
||||||
|
if (fileData.charAt(0) === '\uFEFF') fileData = fileData.substr(1);
|
||||||
|
|
||||||
|
data = this.format.parse(fileData);
|
||||||
this.store = data;
|
this.store = data;
|
||||||
}
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
"pkginfo": "0.2.x"
|
"pkginfo": "0.2.x"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"vows": "0.6.x"
|
"vows": "0.7.x"
|
||||||
},
|
},
|
||||||
"main": "./lib/nconf",
|
"main": "./lib/nconf",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
19
test/fixtures/bom.json
vendored
Normal file
19
test/fixtures/bom.json
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"I've seen things": {
|
||||||
|
"like": [
|
||||||
|
"carrots",
|
||||||
|
"handbags",
|
||||||
|
"cheese",
|
||||||
|
"toilets",
|
||||||
|
"russians",
|
||||||
|
"planets",
|
||||||
|
"hampsters",
|
||||||
|
"weddings",
|
||||||
|
"poets",
|
||||||
|
"stalin",
|
||||||
|
"kuala lumpur"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"host": "weebls-stuff.com",
|
||||||
|
"port": 78304
|
||||||
|
}
|
19
test/fixtures/no-bom.json
vendored
Normal file
19
test/fixtures/no-bom.json
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"I've seen things": {
|
||||||
|
"like": [
|
||||||
|
"carrots",
|
||||||
|
"handbags",
|
||||||
|
"cheese",
|
||||||
|
"toilets",
|
||||||
|
"russians",
|
||||||
|
"planets",
|
||||||
|
"hampsters",
|
||||||
|
"weddings",
|
||||||
|
"poets",
|
||||||
|
"stalin",
|
||||||
|
"kuala lumpur"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"host": "weebls-stuff.com",
|
||||||
|
"port": 78304
|
||||||
|
}
|
|
@ -47,6 +47,56 @@ vows.describe('nconf/stores/file').addBatch({
|
||||||
assert.match(err, /malformed\.json/);
|
assert.match(err, /malformed\.json/);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"with a valid UTF8 JSON file that contains a BOM": {
|
||||||
|
topic: function () {
|
||||||
|
var filePath = path.join(__dirname, '..', 'fixtures', 'bom.json');
|
||||||
|
this.store = store = new nconf.File({ file: filePath });
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
"the load() method": {
|
||||||
|
topic: function () {
|
||||||
|
this.store.load(this.callback);
|
||||||
|
},
|
||||||
|
"should load the data correctly": function (err, data) {
|
||||||
|
assert.isNull(err);
|
||||||
|
assert.deepEqual(data, this.store.store);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"the loadSync() method": {
|
||||||
|
topic: function () {
|
||||||
|
var data = this.store.loadSync();
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
"should load the data correctly": function (result) {
|
||||||
|
assert.deepEqual(result, this.store.store);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"with a valid UTF8 JSON file that contains no BOM": {
|
||||||
|
topic: function () {
|
||||||
|
var filePath = path.join(__dirname, '..', 'fixtures', 'no-bom.json');
|
||||||
|
this.store = store = new nconf.File({ file: filePath });
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
"the load() method": {
|
||||||
|
topic: function () {
|
||||||
|
this.store.load(this.callback);
|
||||||
|
},
|
||||||
|
"should load the data correctly": function (err, data) {
|
||||||
|
assert.isNull(err);
|
||||||
|
assert.deepEqual(data, this.store.store);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"the loadSync() method": {
|
||||||
|
topic: function () {
|
||||||
|
var data = this.store.loadSync();
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
"should load the data correctly": function (result) {
|
||||||
|
assert.deepEqual(result, this.store.store);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).addBatch({
|
}).addBatch({
|
||||||
|
|
Loading…
Reference in a new issue