busy-web/ember-date-time

View on GitHub
addon/--private/manager.js

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * @module Core
 *
 */
import EmberObject, { get } from '@ember/object';
import eachType from './utils/each-type';
import handler from './computed/handler';
import DateHandler from './handlers/date';
import UIHandler from './handlers/user-interface';
import ClockHandler from './handlers/clock';
import FormatHandler from './handlers/format';

const NOT_FOUND = '--NOT_FOUND--';

function getFromHandler(target, key) {
    let proto = target.__proto__;
    if (proto[key]) {
        return get(target, key);
    } else {
        return NOT_FOUND;
    }
}

export default EmberObject.extend({
    uiHandler: handler(UIHandler),
    dateHandler: handler(DateHandler),
    clockHandler: handler(ClockHandler),
    formatHandler: handler(FormatHandler),

    get(key) {
        let val = getFromHandler(this, key);
        if (val === NOT_FOUND) {
            this.eachHandler(handler => {
                if (val === NOT_FOUND) {
                    val = getFromHandler(handler, key);
                }
            });

            if (val === NOT_FOUND) {
                return null;
            }
        }
        return val;
    },

    setup(args) {
        this.eachHandler(handler => {
            return handler && handler.__setup(args);
        });
    },

    update(args) {
        this.eachHandler(handler => {
            return handler && handler.__update(args);
        });
    },

    eachHandler(cb) {
        eachType(this, 'handler', cb);
    }
});