DRY up the open, write, read, and close methods on the File prototype.
authorTim Caswell <tim@creationix.com>
Wed, 28 Oct 2009 16:49:22 +0000 (11:49 -0500)
committerRyan Dahl <ry@tinyclouds.org>
Wed, 28 Oct 2009 18:17:02 +0000 (19:17 +0100)
lib/file.js

index 1ac89a8..dd34278 100644 (file)
@@ -108,17 +108,16 @@ proto._maybeDispatch = function () {
   debugObject(self.currentAction);
 
   args = self.currentAction.args || [];
+  method = self.currentAction.method;
+
 
-  if (self.currentAction.method !== "open") {
+  if (method !== "open") {
     args.unshift(self.fd);
   }
 
-  method = self.currentAction.method;
-
   if (!args[3] && (method === "read" || method === "write")) {
     args[3] = self.encoding;
   }
-
   promise = node.fs[method].apply(self, args);
 
   userPromise = self.currentAction.promise;
@@ -144,21 +143,10 @@ proto._queueAction = function (method, args) {
   return userPromise;
 };
 
-// FIXME the following can probably be DRY'd up with some fancy getter
-// stuff.
 
-proto.open = function (filename, flags, mode) {
-  return this._queueAction("open", [filename, flags, mode]);
-};
+(["open", "write", "read", "close"]).forEach(function (name) {
+  proto[name] = function () {
+    return this._queueAction(name, Array.prototype.slice.call(arguments, 0));
+  };
+});
 
-proto.write = function (data, pos, encoding) {
-  return this._queueAction("write", [data, pos, encoding]);
-};
-
-proto.read = function (length, pos, encoding) {
-  return this._queueAction("read", [length, pos, encoding]);
-};
-
-proto.close = function () {
-  return this._queueAction("close");
-};