trainingproject
Version:
A module to teach you how to module.
59 lines (53 loc) • 1.27 kB
JavaScript
;
var path = require("path"),
makeFlat = require("../lib/makeFlat");
module.exports = function (folder, strategy) {
// need to load here, because it needs a mock for testing.
var fs = require("fs"),
getRaw = function getRaw(file) {
try {
return fs.readFileSync(file, "utf8");
} catch (e) {}
return null;
},
exists = function exists(file) {
var exists = false;
try {
exists = fs.existsSync(file);
} catch(e) {}
return exists;
};
if (!strategy) {
strategy = require("./folder/json.js");
}
return Object.create({
cache: {},
folder: folder,
strategy: strategy,
get: function get(key) {
var keyParts = /^([^\.]*)(\.(.*))?$/m.exec(key),
prefix = keyParts[1],
property = keyParts[3] || "",
file = this.strategy.getFile(path.resolve(this.folder, prefix)),
keyStorage = this.cache[file],
raw;
if (!keyStorage) {
keyStorage = {
data: {},
file: file
};
if (exists(file)) {
raw = getRaw(file);
if (raw) {
try {
keyStorage.data = makeFlat(this.strategy.load(raw) || {}, {});
} catch(e) {}
}
}
keyStorage.time = Date.now();
this.cache[file] = keyStorage;
}
return keyStorage.data[property];
}
});
};