summaryrefslogtreecommitdiffstats
path: root/lib/models/file.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/models/file.js')
-rw-r--r--lib/models/file.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/models/file.js b/lib/models/file.js
new file mode 100644
index 0000000..ebfe629
--- /dev/null
+++ b/lib/models/file.js
@@ -0,0 +1,55 @@
+var path = require('path');
+var Immutable = require('immutable');
+
+var parsers = require('../parsers');
+
+var File = Immutable.Record({
+ // Path of the file, relative to the FS
+ path: String(),
+
+ // Time when file data last modified
+ mtime: Date()
+});
+
+File.prototype.getPath = function() {
+ return this.get('path');
+};
+
+File.prototype.getMTime = function() {
+ return this.get('mtime');
+};
+
+/**
+ Return extension of this file (lowercased)
+
+ @return {String}
+*/
+File.prototype.getExtension = function() {
+ return path.extname(this.getPath()).toLowerCase();
+};
+
+/**
+ Return parser for this file
+
+ @return {Parser}
+*/
+File.prototype.getParser = function() {
+ return parsers.getByExt(this.getExtension());
+};
+
+/**
+ Create a file from stats informations
+
+ @param {String} filepath
+ @param {Object|fs.Stats} stat
+ @return {File}
+*/
+File.createFromStat = function createFromStat(filepath, stat) {
+ return new File({
+ path: filepath,
+ mtime: stat.mtime
+ });
+};
+
+
+module.exports = File;