项目作者: slavahatnuke

项目描述 :
This is a kits pattern. Main idea of this to have registry and lightweight injections.
高级语言: JavaScript
项目地址: git://github.com/slavahatnuke/kits.git
创建时间: 2017-03-30T21:05:37Z
项目社区:https://github.com/slavahatnuke/kits

开源协议:

下载


kits

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

Idea is:

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

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

Spec

  1. const assert = require('assert');
  2. const Kit = require('kits');
  3. describe('Kit', () => {
  4. it('example', () => {
  5. let kit = Kit({
  6. name: () => 'slava',
  7. user: ({name}) => `My name is ${name}`
  8. });
  9. // console.log(kit.user) // My name is slava
  10. assert(kit.user === 'My name is slava');
  11. });
  12. it('construct and get', () => {
  13. let kit = Kit({
  14. Component: () => 'component-value'
  15. });
  16. assert.equal(kit.Component, 'component-value');
  17. assert.equal(kit.get('Component'), 'component-value');
  18. assert.equal(kit.NoComponent, undefined);
  19. assert.equal(kit.get('NoComponent'), undefined);
  20. })
  21. it('get - array of arguments', () => {
  22. let kit = Kit({
  23. Component1: () => 'component1',
  24. Component2: () => 'component2'
  25. });
  26. assert.deepEqual(kit.get(['Component1', 'Component2']), ['component1', 'component2']);
  27. })
  28. it('add - adds creator', () => {
  29. let kit = Kit();
  30. kit.add('Component', () => 'component')
  31. assert.equal(kit.Component, 'component');
  32. assert.equal(kit.get('Component'), 'component');
  33. assert.equal(kit.NoComponent, undefined);
  34. assert.equal(kit.get('NoComponent'), undefined);
  35. });
  36. it('create - should return new instance', () => {
  37. let kit = Kit();
  38. class TestComponent {
  39. }
  40. kit.add('Component', () => new TestComponent());
  41. assert.equal(kit.Component, kit.Component);
  42. assert.equal(kit.Component, kit.get('Component'));
  43. assert.notEqual(kit.Component, kit.create('Component'));
  44. assert(kit.get('Component') instanceof TestComponent);
  45. assert.notEqual(kit.create('Component'), kit.create('Component'));
  46. });
  47. it('creator - should be function', () => {
  48. return Promise.resolve()
  49. .then(() => {
  50. let kit = Kit();
  51. kit.add('Component', 'component');
  52. })
  53. .catch((err) => {
  54. assert.equal(err.message, "'Component' : creator is not a function");
  55. });
  56. });
  57. it('remove - should remove previous version', () => {
  58. let kit = Kit();
  59. class TestComponent {
  60. }
  61. kit.add('Component', () => new TestComponent());
  62. let Component = kit.Component;
  63. assert.equal(Component, kit.Component);
  64. kit.remove('Component');
  65. assert.equal(kit.Component, undefined);
  66. });
  67. it('get - should provide options in creator', () => {
  68. let kit = Kit();
  69. class TestComponent {
  70. constructor(options) {
  71. this.options = options;
  72. }
  73. }
  74. kit.add('Component', ({Options}) => new TestComponent(Options));
  75. kit.add('Options', () => {
  76. return {
  77. name: 'test',
  78. version: 1
  79. };
  80. });
  81. assert.deepEqual(kit.Component.options, {
  82. name: 'test',
  83. version: 1
  84. });
  85. assert.deepEqual(kit.Options, {
  86. name: 'test',
  87. version: 1
  88. });
  89. let {Options} = kit;
  90. assert.deepEqual(Options, {
  91. name: 'test',
  92. version: 1
  93. });
  94. });
  95. it('add - should remove previous value', () => {
  96. let kit = Kit();
  97. class TestComponent {
  98. }
  99. kit.add('Component', () => new TestComponent());
  100. assert(kit.Component instanceof TestComponent);
  101. kit.add('Component', () => 'value');
  102. assert.equal(kit.Component, 'value');
  103. });
  104. it('set - is alias for add', () => {
  105. let kit = Kit();
  106. class TestComponent {
  107. }
  108. kit.set('Component', () => new TestComponent());
  109. assert(kit.Component instanceof TestComponent);
  110. kit.set('Component', () => 'value');
  111. assert.equal(kit.Component, 'value');
  112. });
  113. it('defineDecorator - wrapper', () => {
  114. let kit = Kit({
  115. Component: () => 'component'
  116. });
  117. kit.defineDecorator((value, name) => `${value} -> ${name}`);
  118. assert.equal(kit.Component, 'component -> Component');
  119. });
  120. it('clone', () => {
  121. class TestComponent {
  122. }
  123. let kit = Kit({
  124. Component: () => new TestComponent()
  125. });
  126. let kit2 = Kit(kit);
  127. assert(kit.Component instanceof TestComponent);
  128. assert(kit2.Component instanceof TestComponent);
  129. assert.notEqual(kit.Component, kit2.Component);
  130. })
  131. it('es6 nested access', () => {
  132. let kit = Kit({
  133. user: () => {
  134. return {
  135. name: 'slava'
  136. };
  137. },
  138. name: ({user: {name}}) => name
  139. });
  140. assert.equal(kit.name, 'slava');
  141. })
  142. });

ES5

  1. const Kit = require('kits/es5');