Source: Versionizable/Transaction.js

define('Versionizable/Transaction',[
  './namespace','./Version','./History'
],function (Versionizable,Version,History) {
  /**
   * @constructor Transaction
   * @memberOf BeautifulProperties.Versionizable
   *
   * @param {object} object
   * @param {string} key
   *
   * @property {object} object
   * @property {string} key
   */
  function Transaction(object,key){
    Object.defineProperties(this,{
      object:{
        value:object,
        writable:false,
        configurable:false
      },
      key:{
        value:key,
        writable:false,
        configurable:false
      }
    })
  }
  /**
   * @function insert
   * @memberOf BeautifulProperties.Versionizable.Transaction#
   *
   * @param {number} index
   * @param {*} value
   * @param {{timestamp:number=}=} options
   */
  Transaction.prototype.insert = function insert(index,value,options) {
    var history = History.retrieve(this.object,this.key);
    var version = new Version;
    version.value = value;
    version.timestamp = (options && options.timestamp) || Date.now();
    history.splice(index,0,version);
  };
  /**
   * @function remove
   * @memberOf BeautifulProperties.Versionizable.Transaction#
   *
   * @param {BeautifulProperties.Versionizable.Version} version
   */
  Transaction.prototype.remove = function remove(version) {
    var history = History.retrieve(this.object,this.key);
    var index = history.indexOf(version);
    if (index === -1) {
      return;
    }
    history.splice(index,1);
  };
  Versionizable.Transaction = Transaction;
  return Transaction;
});