all files / montage/core/meta/ remote-reference.js

56.52% Statements 13/23
33.33% Branches 2/6
42.86% Functions 3/7
56.52% Lines 13/23
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100             16× 16× 16× 16×                                               16× 16× 16×                                   16× 16×     16×     16×                                                                          
var Montage = require("../core").Montage,
    Promise = require("../promise").Promise,
    logger = require("../logger").logger("objectDescriptor");
 
exports.RemoteReference = Montage.specialize({
 
    constructor: {
        value: function RemoteReference() {
            this._value = null;
            this._reference = null;
            this._promise = null;
            return this;
        }
    },
 
    initWithValue: {
        value: function (value) {
            this._value = value;
            this._reference = null;
            this._promise = null;
            return this;
        }
    },
 
    serializeSelf: {
        value: function (serializer) {
            if (!this._reference) {
                this._reference = this.referenceFromValue(this._value);
            }
            serializer.setProperty("valueReference", this._reference);
        }
    },
 
    deserializeSelf: {
        value: function (deserializer) {
            this._value = null;
            this._reference = deserializer.getProperty("valueReference");
            this._promise = null;
        }
    },
 
    _value: {
        value: null
    },
 
    _reference: {
        value: null
    },
 
    _promise: {
        value: null
    },
 
    promise: {
        value: function (iRequire) {
            Eif (!this._promise) {
                Iif (this._value) {
                    this._promise = Promise.resolve(this._value);
                } else {
                    this._promise = this.valueFromReference(this._reference, iRequire);
                }
            }
            return this._promise;
        }
    },
 
    /**
     * Takes the serialized reference and return a promise for the value.
     *
     * The default implementation does nothing and must be overwritten by subtypes
     *
     * @param references
     * @param {boolean} isRequire
     */
    valueFromReference: {
        value: function (reference, iRequire) {
            return Promise.resolve(null);
        }
    },
 
    /**
     * Take the value and creates a reference string for serialization.
     *
     * The default implementation does nothing and must be overwritten by
     * subtypes.
     */
    referenceFromValue: {
        value: function (value) {
            return {};
        }
    },
 
    objectDescriptorModuleId: require("../core")._objectDescriptorModuleIdDescriptor,
    objectDescriptor: require("../core")._objectDescriptorDescriptor,
 
    blueprintModuleId: require("../core")._objectDescriptorModuleIdDescriptor,
    blueprint: require("../core")._objectDescriptorDescriptor
 
});