'use strict';

Object.isUndefined = Object.isUndefined || function(v) {
    return typeof v === typeof undefined;
}

Object.isDefined = Object.isDefined || function(v) {
    return !Object.isUndefined(v);
}

Object.isBoolean = Object.isBoolean || function(v) {
    return Object.isDefined(v) && typeof v === 'boolean';
}

Object.merge = Object.merge || function(left_most, right_most) {
    let d = {};
    var left_keys = Object.keys(left_most);
    for(var i = 0 ; i < left_keys.length; i++) {
        var k = left_keys[i];
        if(typeof right_most[k] !== typeof undefined) continue;
        d[k] = left_most[k];
    }

    var right_keys = Object.keys(right_most);
    for(var i = 0; i < right_keys.length; i++) {
        var k = right_keys[i];
        d[k] = right_most[k];
    }

    return d;
}

Object.extendClass = Object.extendClass || function(super_class,new_methods) {
    return Object.assign(Object.assign({}, super_class), new_methods);
}

module.exports = Object;