all files / documents/database/ internal-document-factory.js

100% Statements 29/29
100% Branches 8/8
100% Functions 6/6
100% Lines 27/27
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59                66× 66× 66× 66× 66×         50× 50× 50×       16× 16× 16× 16×       25× 25× 25× 17×   17× 16×     25×                      
import Ember from 'ember';
 
const {
  assign
} = Ember;
 
export default Ember.Mixin.create({
 
  _createInternalDocument(values, state, type) {
    let internal = this.get('store')._createInternalDocument(this);
    return internal.withPropertyChanges(changed => {
      internal.deserialize(values, type, changed);
      internal.state.set(state, changed);
      return internal;
    }, false);
  },
 
  _createNewInternalDocument(values, type) {
    let internal = this._createInternalDocument(values, { isNew: true, isDirty: false }, type);
    this._storeNewInternalDocument(internal);
    return internal;
  },
 
  _createExistingInternalDocument(id) {
    let values = { _id: id };
    let internal = this._createInternalDocument(values, { isNew: false, isDirty: false }, 'document');
    this._storeSavedInternalDocument(internal);
    return internal;
  },
 
  _existingInternalDocument(id, opts) {
    let { create, deleted } = assign({ create: false, deleted: false }, opts);
    let internal = this._internalDocumentWithId(id, deleted);
    if(!internal && create) {
      if(!deleted) {
        internal = this._internalDocumentWithId(id, true);
      }
      if(!internal) {
        internal = this._createExistingInternalDocument(id);
      }
    }
    return internal;
  },
 
  _createInternalArray(values, type) {
    let internal = this.get('store')._createInternalArray(null);
    internal.withPropertyChanges(changed => internal.deserialize(values, type, changed), false);
    return internal;
  },
 
  _createInternalObject(values, type) {
    let internal = this.get('store')._createInternalObject(null);
    internal.withPropertyChanges(changed => internal.deserialize(values, type, changed), false);
    return internal;
  }
 
});