javascript namespace library
Revisión | 6cb3341977ecae6b03c0cd84ae46170f6adda461 (tree) |
---|---|
Tiempo | 2017-12-15 19:44:41 |
Autor | 繧「繝ォ萓ソ <aru.bin@taky...> |
Commiter | 繧「繝ォ萓ソ |
merge release/0.1.0
@@ -31,6 +31,49 @@ | ||
31 | 31 | }, |
32 | 32 | testsuites :[], |
33 | 33 | }, |
34 | + | |
35 | + test :{ | |
36 | + options :{ | |
37 | + ////clearOnStart will have no effect | |
38 | + ////if run inside grunt | |
39 | + //clearOnStart :true, | |
40 | + stopOnFail :true, | |
41 | + stopOnException :true, | |
42 | + verbose :true, | |
43 | + outputColor :true, | |
44 | + debugMode :true, | |
45 | + useLogIcons :true, | |
46 | + }, | |
47 | + testsuites :[ | |
48 | + { | |
49 | + //name :"JxUnitTest", | |
50 | + target :"./src/micro-namespace.js", | |
51 | + file :"./test/micro-namespace.test.js", | |
52 | + }, | |
53 | + ], | |
54 | + }, | |
55 | + | |
56 | + testRelease :{ | |
57 | + options :{ | |
58 | + ////clearOnStart will have no effect | |
59 | + ////if run inside grunt | |
60 | + //clearOnStart :true, | |
61 | + stopOnFail :true, | |
62 | + stopOnException :true, | |
63 | + verbose :true, | |
64 | + outputColor :true, | |
65 | + debugMode :true, | |
66 | + useLogIcons :true, | |
67 | + }, | |
68 | + testsuites :[ | |
69 | + { | |
70 | + //name :"JxUnitTest", | |
71 | + target :"./bin/micro-namespace/micro-namespace.js", | |
72 | + file :"./test/micro-namespace.test.js", | |
73 | + }, | |
74 | + ], | |
75 | + }, | |
76 | + | |
34 | 77 | }, |
35 | 78 | |
36 | 79 | jsDocConfig = { |
@@ -139,11 +182,26 @@ | ||
139 | 182 | ], |
140 | 183 | }, |
141 | 184 | { |
185 | + summary :"test beautiful code", | |
186 | + target :"test", | |
187 | + commands :[ | |
188 | + "jxunit:test", | |
189 | + ], | |
190 | + }, | |
191 | + { | |
192 | + summary :"test uglified code", | |
193 | + target :"test-release", | |
194 | + commands :[ | |
195 | + "jxunit:testRelease", | |
196 | + ], | |
197 | + }, | |
198 | + { | |
142 | 199 | summary :"prepare the src dir for publish", |
143 | 200 | target :"release", |
144 | 201 | commands :[ |
145 | 202 | "uglify:release", |
146 | 203 | "copy:release", |
204 | + "jxunit:testRelease", | |
147 | 205 | //"jsdoc:sable", |
148 | 206 | ], |
149 | 207 | }, |
@@ -20,6 +20,12 @@ | ||
20 | 20 | |
21 | 21 | ## usage ## |
22 | 22 | |
23 | +#### AMD require #### | |
24 | + | |
25 | +```javascript | |
26 | +var ns = require("micro-namespace"); | |
27 | +``` | |
28 | + | |
23 | 29 | #### include script #### |
24 | 30 | |
25 | 31 | ```html |
@@ -28,7 +34,7 @@ | ||
28 | 34 | ``` |
29 | 35 | #### examples #### |
30 | 36 | |
31 | -simple namespace | |
37 | +**simple namespace** | |
32 | 38 | |
33 | 39 | ```javascript |
34 | 40 | // create fb.common.util namespace |
@@ -44,7 +50,7 @@ | ||
44 | 50 | } |
45 | 51 | ``` |
46 | 52 | |
47 | -namespace and object | |
53 | +**namespace and object** | |
48 | 54 | |
49 | 55 | ```javascript |
50 | 56 | // create fb.common.extra namespace with methods |
@@ -61,4 +67,16 @@ | ||
61 | 67 | |
62 | 68 | var ax = new fb.common.extra.AjaxParser(); |
63 | 69 | |
70 | +``` | |
71 | + | |
72 | +**amd require** | |
73 | + | |
74 | +``` | |
75 | +var ns = require("micro-namespace"); | |
76 | + | |
77 | +ns("fb.ajax", { | |
78 | + getUsername :function(){ ... }, | |
79 | +}); | |
80 | + | |
81 | +var user = fb.ajax.getUsername(); | |
64 | 82 | ``` |
\ No newline at end of file |
@@ -29,7 +29,7 @@ | ||
29 | 29 | ⌐ ,⌐ |
30 | 30 | |
31 | 31 | |
32 | - micro-namespace 0.0.1 | |
32 | + micro-namespace 0.1.0 | |
33 | 33 | Copyright 2017 Frostbane Ac |
34 | 34 | 2017.12.14 |
35 | 35 |
@@ -56,7 +56,7 @@ | ||
56 | 56 | "use strict"; |
57 | 57 | |
58 | 58 | if(typeof exports !== typeof undefined && global.exports !== exports){ |
59 | - module.exports.namespace = factory; | |
59 | + module.exports = factory; | |
60 | 60 | }else{ |
61 | 61 | global.namespace = factory; |
62 | 62 | } |
@@ -64,24 +64,53 @@ | ||
64 | 64 | }(this, (function(){ |
65 | 65 | "use strict"; |
66 | 66 | |
67 | - var namespace = function(name, obj){ | |
68 | - | |
67 | + var getRoot = function(){ | |
69 | 68 | var $this = typeof window !== typeof undefined ? |
70 | 69 | window : |
71 | - typeof root !== typeof undefined ? | |
72 | - root : | |
70 | + typeof global !== typeof undefined ? | |
71 | + global : | |
73 | 72 | this; |
74 | 73 | |
74 | + return $this; | |
75 | + }; | |
76 | + | |
77 | + var isInvalidName = function(name){ | |
78 | + if(name === undefined || name === null) | |
79 | + return true; | |
80 | + | |
81 | + if(typeof name !== typeof "") | |
82 | + return true; | |
83 | + | |
84 | + if(name.trim() === "") | |
85 | + return true; | |
86 | + | |
87 | + return false; | |
88 | + }; | |
89 | + | |
90 | + var createNs = function(name, $this){ | |
75 | 91 | var nsArray = name.split("."); |
76 | 92 | var nsObj = nsArray.reduce(function(o, n){ |
77 | 93 | o[n] = o[n] || {}; |
78 | 94 | return o[n]; |
79 | 95 | }, $this); |
80 | 96 | |
97 | + return nsObj; | |
98 | + }; | |
81 | 99 | |
100 | + var isInvalidObj = function(obj){ | |
82 | 101 | if(obj === undefined || obj === null) |
83 | - return nsObj; | |
102 | + return true; | |
84 | 103 | |
104 | + if(typeof obj !== typeof {}) | |
105 | + return true; | |
106 | + | |
107 | + if(obj instanceof Array) | |
108 | + return true; | |
109 | + | |
110 | + return false; | |
111 | + }; | |
112 | + | |
113 | + var copyPublicProp = function(nsObj, obj){ | |
85 | 114 | for(var p in obj){ |
86 | 115 | if(!obj.hasOwnProperty(p)) |
87 | 116 | continue; |
@@ -90,11 +119,35 @@ | ||
90 | 119 | } |
91 | 120 | |
92 | 121 | return nsObj; |
122 | + }; | |
123 | + | |
124 | + /** | |
125 | + * | |
126 | + * @param {String} name | |
127 | + * @param {Object} [obj] | |
128 | + * | |
129 | + * @returns {Object} | |
130 | + * | |
131 | + */ | |
132 | + var namespace = function(name, obj){ | |
133 | + var $this = getRoot(); | |
134 | + | |
135 | + if(isInvalidName(name)) | |
136 | + return $this; | |
137 | + | |
138 | + var nsObj = createNs(name, $this); | |
139 | + | |
140 | + if(isInvalidObj(obj)) | |
141 | + return nsObj; | |
142 | + | |
143 | + var nsObj = copyPublicProp(nsObj, obj); | |
144 | + | |
145 | + return nsObj; | |
93 | 146 | |
94 | 147 | }; |
95 | 148 | |
96 | 149 | |
97 | - namespace.version = "0.0.1.0"; | |
150 | + namespace.version = "0.1.0.0"; | |
98 | 151 | |
99 | 152 | return namespace; |
100 | 153 |
@@ -1,10 +1,10 @@ | ||
1 | 1 | { |
2 | 2 | "name" : "micro-namespace", |
3 | - "version" : "v0.0.1", | |
4 | - "description" : "Namespace", | |
3 | + "version" : "v0.1.0", | |
4 | + "description" : "Wrap object into a namespace", | |
5 | 5 | "repository" : { |
6 | - "type": "hg", | |
7 | - "url" : "localhost/micro-namespace" | |
6 | + "type": "mercurial", | |
7 | + "url" : "https://frostbane@bitbucket.org/frostbane/micro-namespace" | |
8 | 8 | }, |
9 | 9 | "main" : "./micro-namespace.js", |
10 | 10 | "license" : "SEE LICENSE IN LICENSE.md", |
@@ -0,0 +1,215 @@ | ||
1 | +/* jshint | |
2 | +maxlen: false | |
3 | + */ | |
4 | + | |
5 | +/* global | |
6 | +log, | |
7 | +warn, | |
8 | +error, | |
9 | +mark, | |
10 | +assertTrue, | |
11 | +assertFalse, | |
12 | +assertEqual, | |
13 | +assertNotEqual, | |
14 | +assertUndefined, | |
15 | +assertNotUndefined, | |
16 | +assertSame, | |
17 | +assertNotSame, | |
18 | +result, | |
19 | +MicroCheck | |
20 | + */ | |
21 | + | |
22 | + | |
23 | +/** | |
24 | + * @augments JxUnit | |
25 | + */ | |
26 | +var micronstest = { | |
27 | + | |
28 | + | |
29 | + /* */// ------------------------------------------------ // | |
30 | + /* */// variables/helpers | |
31 | + /* */// ------------------------------------------------ // | |
32 | + | |
33 | + data :{ | |
34 | + }, | |
35 | + | |
36 | + getRoot :function(){ | |
37 | + var $this = typeof window !== typeof undefined ? | |
38 | + window : | |
39 | + typeof global !== typeof undefined ? | |
40 | + global : | |
41 | + this; | |
42 | + | |
43 | + return $this; | |
44 | + }, | |
45 | + | |
46 | + deleteNamespaceRoot :function(n){ | |
47 | + var $this = this.getRoot(); | |
48 | + | |
49 | + var rootns = n.split(".")[0]; | |
50 | + | |
51 | + if($this[rootns] !== undefined) | |
52 | + $this[rootns] = undefined; | |
53 | + }, | |
54 | + | |
55 | + /* */// ------------------------------------------------ // | |
56 | + /* */// startUp, setUp | |
57 | + /* */// ------------------------------------------------ // | |
58 | + | |
59 | + startUp :function(){ | |
60 | + "use strict"; | |
61 | + | |
62 | + namespace("fb"); | |
63 | + this.deleteNamespaceRoot("fb"); | |
64 | + }, | |
65 | + | |
66 | + setUp :function(){ | |
67 | + "use strict"; | |
68 | + | |
69 | + this.deleteNamespaceRoot("fb"); | |
70 | + }, | |
71 | + | |
72 | + /* */// ------------------------------------------------ // | |
73 | + /* */// test(s) | |
74 | + /* */// ------------------------------------------------ // | |
75 | + | |
76 | + test_simpleNamespace :function(){ | |
77 | + "use strict"; | |
78 | + | |
79 | + assertUndefined(fb); | |
80 | + | |
81 | + namespace("fb.common.utility"); | |
82 | + | |
83 | + assertNotUndefined(fb); | |
84 | + assertNotUndefined(fb.common); | |
85 | + assertNotUndefined(fb.common.utility); | |
86 | + }, | |
87 | + | |
88 | + test_undefined :function(){ | |
89 | + "use strict"; | |
90 | + | |
91 | + var ret = namespace(); | |
92 | + assertEqual(this.getRoot(), ret); | |
93 | + | |
94 | + }, | |
95 | + | |
96 | + test_null :function(){ | |
97 | + "use strict"; | |
98 | + | |
99 | + var ret = namespace(null); | |
100 | + assertEqual(this.getRoot(), ret); | |
101 | + | |
102 | + }, | |
103 | + | |
104 | + test_empty :function(){ | |
105 | + "use strict"; | |
106 | + | |
107 | + var ret; | |
108 | + | |
109 | + ret = namespace(""); | |
110 | + assertEqual(this.getRoot(), ret); | |
111 | + | |
112 | + ret = namespace(" "); | |
113 | + assertEqual(this.getRoot(), ret); | |
114 | + | |
115 | + // wide space | |
116 | + ret = namespace(" "); | |
117 | + assertEqual(this.getRoot(), ret); | |
118 | + | |
119 | + }, | |
120 | + | |
121 | + test_nonString :function(){ | |
122 | + "use strict"; | |
123 | + | |
124 | + var ret; | |
125 | + | |
126 | + ret = namespace({}); | |
127 | + assertEqual(this.getRoot(), ret); | |
128 | + | |
129 | + ret = namespace([]); | |
130 | + assertEqual(this.getRoot(), ret); | |
131 | + | |
132 | + ret = namespace(1); | |
133 | + assertEqual(this.getRoot(), ret); | |
134 | + | |
135 | + ret = namespace(1.2); | |
136 | + assertEqual(this.getRoot(), ret); | |
137 | + | |
138 | + ret = namespace(true); | |
139 | + assertEqual(this.getRoot(), ret); | |
140 | + | |
141 | + }, | |
142 | + | |
143 | + test_addNamespace :function(){ | |
144 | + "use strict"; | |
145 | + | |
146 | + assertUndefined(fb); | |
147 | + | |
148 | + namespace("fb.test"); | |
149 | + | |
150 | + assertNotUndefined(fb.test); | |
151 | + | |
152 | + namespace("fb.test.utility"); | |
153 | + namespace("fb.test.helper"); | |
154 | + namespace("fb.test.helper.assert"); | |
155 | + namespace("fb.common"); | |
156 | + namespace("fb.common.dom"); | |
157 | + | |
158 | + assertNotUndefined(fb.test.utility); | |
159 | + assertNotUndefined(fb.test.helper); | |
160 | + assertNotUndefined(fb.test.helper.assert); | |
161 | + assertNotUndefined(fb.common); | |
162 | + assertNotUndefined(fb.common.dom); | |
163 | + }, | |
164 | + | |
165 | + test_nsObj :function(){ | |
166 | + "use strict"; | |
167 | + | |
168 | + assertUndefined(fb); | |
169 | + | |
170 | + var myLogger = { | |
171 | + debug :function(){}, | |
172 | + warning :function(){}, | |
173 | + error :function(){}, | |
174 | + fatal :function(){}, | |
175 | + info :function(){}, | |
176 | + }; | |
177 | + | |
178 | + var functionType = typeof (function(){}); | |
179 | + | |
180 | + namespace("fb.utility.log", myLogger); | |
181 | + | |
182 | + assertNotUndefined(fb.utility.log); | |
183 | + assertType(fb.utility.log.debug, functionType); | |
184 | + assertType(fb.utility.log.warning, functionType); | |
185 | + assertType(fb.utility.log.error, functionType); | |
186 | + assertType(fb.utility.log.fatal, functionType); | |
187 | + assertType(fb.utility.log.info, functionType); | |
188 | + }, | |
189 | + | |
190 | + _test_template :function(){ | |
191 | + "use strict"; | |
192 | + | |
193 | + assertUndefined(fb); | |
194 | + | |
195 | + namespace("fb"); | |
196 | + | |
197 | + assertNotUndefined(fb); | |
198 | + }, | |
199 | + | |
200 | + | |
201 | + /* */// ------------------------------------------------ // | |
202 | + /* */// tearDown, shutDown | |
203 | + /* */// ------------------------------------------------ // | |
204 | + | |
205 | + tearDown :function(){ | |
206 | + | |
207 | + }, | |
208 | + | |
209 | + shutDown :function(){ | |
210 | + "use strict"; | |
211 | + | |
212 | + result.log(); | |
213 | + }, | |
214 | + | |
215 | +}; |