Command pattern in JS

by bhupendra negi

JavaScript

var repo = {
  tasks :{},
  commands:[],
  get: function(id) {
   console.log("getting task witrh " + id);
  },
  save: function(task) {
   //console.log(task);
    this.tasks[task.id] = task;
    console.log("saving " + task.name + " to DB");
  },
  replay:function()
  {
  //console.log(repo.commands);
   for (var i=0;i<repo.commands.length;i++) {
    var command = repo.commands[i];
    repo.executeNoLog(command.name,command.obj);
   }
  }
}

repo.execute = function(name) {
  var args = Array.prototype.slice.call(arguments, 1);
  repo.commands.push({name:name,obj:args[0]});
  console.log(args);
  if (repo[name]) {
    return repo[name].apply(this, args)
  } else return false;
}

repo.executeNoLog = function(name) {
  var args = Array.prototype.slice.call(arguments, 1);
    if (repo[name]) {
    return repo[name].apply(this, args)
  } else return false;
}

repo.execute('save', {
  name: "sample 1",
  id:'task 1'
})

repo.execute('save', {
  name: "sample 2",
  id:'task 2'
})

repo.execute('save', {
  name: "sample 3",
  id:'task 3'
});


repo.tasks = {};
repo.replay();