0.0.11 • Published 7 years ago

kits v0.0.11

Weekly downloads
1
License
ISC
Repository
github
Last release
7 years ago

kits

This is a kits pattern. Main idea of this to have registry and lightweight injections.

Idea is:

	let kit = Kit({
	    name: () => 'slava',
	    user: ({name}) => `My name is ${name}`
	});
	// console.log(kit.user) // My name is slava
	
	assert(kit.user === 'My name is slava');

Async kits here now: https://www.npmjs.com/package/kits-async.

Spec

const assert = require('assert');
const Kit = require('kits');

describe('Kit', () => {
    it('example', () => {
        let kit = Kit({
            name: () => 'slava',
            user: ({name}) => `My name is ${name}`
        });
        // console.log(kit.user) // My name is slava

        assert(kit.user === 'My name is slava');
    });

    it('construct and get', () => {

        let kit = Kit({
            Component: () => 'component-value'
        });

        assert.equal(kit.Component, 'component-value');
        assert.equal(kit.get('Component'), 'component-value');

        assert.equal(kit.NoComponent, undefined);
        assert.equal(kit.get('NoComponent'), undefined);
    })

    it('get - array of arguments', () => {

        let kit = Kit({
            Component1: () => 'component1',
            Component2: () => 'component2'
        });

        assert.deepEqual(kit.get(['Component1', 'Component2']), ['component1', 'component2']);
    })

    it('add - adds creator', () => {

        let kit = Kit();

        kit.add('Component', () => 'component')

        assert.equal(kit.Component, 'component');
        assert.equal(kit.get('Component'), 'component');

        assert.equal(kit.NoComponent, undefined);
        assert.equal(kit.get('NoComponent'), undefined);
    });

    it('create - should return new instance', () => {

        let kit = Kit();

        class TestComponent {
        }

        kit.add('Component', () => new TestComponent());

        assert.equal(kit.Component, kit.Component);
        assert.equal(kit.Component, kit.get('Component'));

        assert.notEqual(kit.Component, kit.create('Component'));
        assert(kit.get('Component') instanceof TestComponent);

        assert.notEqual(kit.create('Component'), kit.create('Component'));
    });

    it('creator - should be function', () => {

        return Promise.resolve()
            .then(() => {
                let kit = Kit();
                kit.add('Component', 'component');
            })
            .catch((err) => {
                assert.equal(err.message, "'Component' : creator is not a function");
            });
    });


    it('remove - should remove previous version', () => {

        let kit = Kit();

        class TestComponent {
        }

        kit.add('Component', () => new TestComponent());

        let Component = kit.Component;
        assert.equal(Component, kit.Component);

        kit.remove('Component');
        assert.equal(kit.Component, undefined);
    });

    it('get - should provide options in creator', () => {
        let kit = Kit();

        class TestComponent {
            constructor(options) {
                this.options = options;
            }
        }

        kit.add('Component', ({Options}) => new TestComponent(Options));

        kit.add('Options', () => {
            return {
                name: 'test',
                version: 1
            };
        });

        assert.deepEqual(kit.Component.options, {
            name: 'test',
            version: 1
        });

        assert.deepEqual(kit.Options, {
            name: 'test',
            version: 1
        });

        let {Options} = kit;
        assert.deepEqual(Options, {
            name: 'test',
            version: 1
        });
    });

    it('add - should remove previous value', () => {

        let kit = Kit();

        class TestComponent {
        }

        kit.add('Component', () => new TestComponent());
        assert(kit.Component instanceof TestComponent);

        kit.add('Component', () => 'value');

        assert.equal(kit.Component, 'value');
    });

    it('set - is alias for add', () => {

        let kit = Kit();

        class TestComponent {
        }

        kit.set('Component', () => new TestComponent());
        assert(kit.Component instanceof TestComponent);

        kit.set('Component', () => 'value');
        assert.equal(kit.Component, 'value');
    });

    it('defineDecorator - wrapper', () => {
        let kit = Kit({
            Component: () => 'component'
        });

        kit.defineDecorator((value, name) => `${value} -> ${name}`);

        assert.equal(kit.Component, 'component -> Component');
    });

    it('clone', () => {

        class TestComponent {
        }

        let kit = Kit({
            Component: () => new TestComponent()
        });

        let kit2 = Kit(kit);

        assert(kit.Component instanceof TestComponent);
        assert(kit2.Component instanceof TestComponent);

        assert.notEqual(kit.Component, kit2.Component);
    })

    it('es6 nested access', () => {
        let kit = Kit({
            user: () => {
                return {
                    name: 'slava'
                };
            },
            name: ({user: {name}}) => name
        });

        assert.equal(kit.name, 'slava');
    })

});

ES5

const Kit = require('kits/es5');
0.0.11

7 years ago

0.0.10

7 years ago

0.0.9

7 years ago

0.0.8

7 years ago

0.0.7

7 years ago

0.0.6

7 years ago

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago