all files / common/models/refresh-rule/ refresh-rule.js

84.85% Statements 56/66
79.41% Branches 27/34
85.71% Functions 12/14
84.85% Lines 56/66
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 101 102 103  48× 48×     48× 48× 48×   48×   72×           40×     40× 30×   40×   40×             43×     43× 37×   43×   43×       65×           16×       19×                        
"use strict";
var immutable_class_1 = require('immutable-class');
var chronoshift_1 = require('chronoshift');
var check;
var RefreshRule = (function () {
    function RefreshRule(parameters) {
        var rule = parameters.rule;
        Iif (rule !== RefreshRule.FIXED && rule !== RefreshRule.QUERY && rule !== RefreshRule.REALTIME) {
            throw new Error("rule must be on of: " + RefreshRule.FIXED + ", " + RefreshRule.QUERY + ", or " + RefreshRule.REALTIME);
        }
        this.rule = rule;
        this.refresh = parameters.refresh;
        if (this.rule !== RefreshRule.FIXED && !this.refresh) {
            this.refresh = RefreshRule.DEFAULT_QUERY_REFRESH;
        }
        this.time = parameters.time;
    }
    RefreshRule.isRefreshRule = function (candidate) {
        return immutable_class_1.isInstanceOf(candidate, RefreshRule);
    };
    RefreshRule.query = function (refresh) {
        return new RefreshRule({
            rule: RefreshRule.QUERY,
            refresh: refresh
        });
    };
    RefreshRule.fromJS = function (parameters) {
        var value = {
            rule: parameters.rule
        };
        if (parameters.refresh) {
            value.refresh = chronoshift_1.Duration.fromJS(parameters.refresh);
        }
        if (parameters.time) {
            value.time = new Date(parameters.time);
        }
        return new RefreshRule(value);
    };
    RefreshRule.prototype.valueOf = function () {
        var value = {
            rule: this.rule
        };
        if (this.refresh) {
            value.refresh = this.refresh;
        }
        if (this.time) {
            value.time = this.time;
        }
        return value;
    };
    RefreshRule.prototype.toJS = function () {
        var js = {
            rule: this.rule
        };
        if (this.refresh) {
            js.refresh = this.refresh.toJS();
        }
        if (this.time) {
            js.time = this.time;
        }
        return js;
    };
    RefreshRule.prototype.toJSON = function () {
        return this.toJS();
    };
    RefreshRule.prototype.toString = function () {
        return "[RefreshRule: " + this.rule + "]";
    };
    RefreshRule.prototype.equals = function (other) {
        return RefreshRule.isRefreshRule(other) &&
            this.rule === other.rule &&
            Boolean(this.refresh) === Boolean(other.refresh) &&
            (!this.refresh || this.refresh.equals(other.refresh)) &&
            (!this.time || this.time.valueOf() === other.time.valueOf());
    };
    RefreshRule.prototype.isFixed = function () {
        return this.rule === RefreshRule.FIXED;
    };
    RefreshRule.prototype.isQuery = function () {
        return this.rule === RefreshRule.QUERY;
    };
    RefreshRule.prototype.isRealtime = function () {
        return this.rule === RefreshRule.REALTIME;
    };
    RefreshRule.prototype.shouldUpdate = function (maxTime) {
        if (this.isFixed())
            return false;
        if (!maxTime)
            return true;
        var refresh = this.refresh;
        if (!refresh)
            return false;
        return Date.now() - maxTime.updated.valueOf() > refresh.getCanonicalLength();
    };
    RefreshRule.FIXED = 'fixed';
    RefreshRule.QUERY = 'query';
    RefreshRule.REALTIME = 'realtime';
    RefreshRule.DEFAULT_QUERY_REFRESH = chronoshift_1.Duration.fromJS('PT1M');
    return RefreshRule;
}());
exports.RefreshRule = RefreshRule;
check = RefreshRule;