# all files / packages/web3-core-subscriptions/src/ index.js

87.5% Statements 21/24
37.5% Branches 3/8
100% Functions 5/5
87.5% Lines 21/24

    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

    1×

    1×
    548×
    548×
    548×
    548×

    1×
    548×

    1×
    548×
    548×
    548×
    548×

    548×

    1×
    548×

    548×
    43×

    43×

    43×

    1×

     /*
        This file is part of web3.js.

        web3.js is free software: you can redistribute it and/or modify
        it under the terms of the GNU Lesser General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        web3.js is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU Lesser General Public License for more details.

        You should have received a copy of the GNU Lesser General Public License
        along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
    */
    /**
     * @file index.js
     * @author Fabian Vogelsteller <fabian@ethereum.org>
     * @date 2017
     */

    "use strict";

    var Subscription = require('./subscription.js');

    var Subscriptions = function Subscriptions(options) {
        this.name = options.name;
        this.type = options.type;
        this.subscriptions = options.subscriptions || {};
        this.requestManager = null;
    };

    Subscriptions.prototype.setRequestManager = function (rm) {
        this.requestManager = rm;
    };

    Subscriptions.prototype.attachToObject = function (obj) {
        var func = this.buildCall();
        func.call = this.call; // TODO!!! that's ugly. filter.js uses it
        var name = this.name.split('.');
        Iif (name.length > 1) {
            obj[name[0]] = obj[name[0]] || {};
            obj[name[0]][name[1]] = func;
        } else {
            obj[name[0]] = func;
        }
    };

    Subscriptions.prototype.buildCall = function() {
        var _this = this;

        return function(){
            Iif(!_this.subscriptions[arguments[0]]) {
                console.warn('Subscription '+ JSON.stringify(arguments[0]) +' doesn\'t exist. Subscribing anyway.');
            }

            var subscription = new Subscription({
                subscription: _this.subscriptions[arguments[0]],
                requestManager: _this.requestManager,
                type: _this.type
            });

            return subscription.subscribe.apply(subscription, arguments);
        };
    };

    module.exports = {
        subscriptions: Subscriptions,
        subscription: Subscription
    };