Sha256: f035d19afc2f140a56c00a0f232872b5e34a316e23ecced5cc41f4768d668475

Contents?: true

Size: 1.75 KB

Versions: 12

Compression:

Stored size: 1.75 KB

Contents

!(angular => {
  'use strict';

  function ModelBaseImports($q) {

    return class ModelBase {

      constructor(resource) {
        this._resource = resource;
        this.item = {};
      }

      internalize(item) {
        if (item) {
          this.item = item;
        } else {
          this.item = {};
        }
      }

      // higher order CRUD functions
      initItem(itemId) {
        if(itemId) {
          return this.fetch({ id: itemId });
        } else {
          this.item = this._newItem();
          return $q.when(this.item);
        }
      }

      save(params) {
        return this.isPersisted() ? this.update(_.merge(this.item, params)) : this.create(_.merge(this.item, params));
      }

      // fundemental CRUD functions
      destroy() {
        return this._resource.destroy({ id: this.item.id }).$promise.then(item => item);
      }

      fetch(params) {
        return this._resource.show(params).$promise.then(i => {
          this.item = i;
          return this.item;
        });
      }

      update(params) {
        return this._resource.update(params).$promise.then(i => {
          this.item = i;
          return this.item;
        });
      }

      create(params) {
        return this._resource.create(params).$promise.then(i => {
          this.item = i;
          return this.item;
        });
      }

      isPersisted() {
        return _.exists(this.item.id);
      }

      isNew() {
        return JSON.stringify(this.item) === JSON.stringify(this._newItem());
      }

      // protected methods

      _newItem() {
        throw '#_newItem must be implemented in subclasses!';
      }
    };
  }

  ModelBaseImports.$inject = ['$q'];
  angular.module('models.modelBase', []).service('ModelBase', ModelBaseImports);

}(angular));

Version data entries

12 entries across 6 versions & 1 rubygems

Version Path
aleph_analytics-0.0.5 public/assets/angular/services/model/model_base.js-9fd807dfdf4f26afe60d8e282ca08e6c.es6
aleph_analytics-0.0.5 app/assets/javascripts/angular/services/model/model_base.js.es6
aleph_analytics-0.0.4 app/assets/javascripts/angular/services/model/model_base.js.es6
aleph_analytics-0.0.4 public/assets/angular/services/model/model_base.js-9fd807dfdf4f26afe60d8e282ca08e6c.es6
aleph_analytics-0.0.3 app/assets/javascripts/angular/services/model/model_base.js.es6
aleph_analytics-0.0.3 public/assets/angular/services/model/model_base.js-9fd807dfdf4f26afe60d8e282ca08e6c.es6
aleph_analytics-0.0.2 app/assets/javascripts/angular/services/model/model_base.js.es6
aleph_analytics-0.0.2 public/assets/angular/services/model/model_base.js-9fd807dfdf4f26afe60d8e282ca08e6c.es6
aleph_analytics-0.0.1.alpha public/assets/angular/services/model/model_base.js-9fd807dfdf4f26afe60d8e282ca08e6c.es6
aleph_analytics-0.0.1.alpha app/assets/javascripts/angular/services/model/model_base.js.es6
aleph_analytics-0.0.0.alpha app/assets/javascripts/angular/services/model/model_base.js.es6
aleph_analytics-0.0.0.alpha public/assets/angular/services/model/model_base.js-9fd807dfdf4f26afe60d8e282ca08e6c.es6