Skip to content

Commit 9529336

Browse files
Merge pull request #451 from pattern-lab/dev
Pattern Lab Node Core 2.4.4
2 parents 3739152 + b79f5c1 commit 9529336

File tree

4 files changed

+55
-17
lines changed

4 files changed

+55
-17
lines changed

core/lib/patternlab.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/*
2-
* patternlab-node - v2.4.3 - 2016
2+
* patternlab-node - v2.4.4 - 2016
33
*
44
* Brian Muenzenmeyer, Geoff Pursell, and the web community.
5-
* Licensed under the MIT license.
6-
*
7-
* Many thanks to Brad Frost and Dave Olsen for inspiration, encouragement, and advice.
5+
* Licensed under the MIT license.
6+
*
7+
* Many thanks to Brad Frost and Dave Olsen for inspiration, encouragement, and advice.
88
*
99
*/
1010

@@ -339,6 +339,7 @@ var patternlab_engine = function (config) {
339339
patternName: pattern.patternName,
340340
patternPartial: pattern.patternPartial,
341341
patternState: pattern.patternState,
342+
patternEngineName: pattern.engine.engineName,
342343
extraOutput: {}
343344
});
344345

@@ -375,17 +376,29 @@ var patternlab_engine = function (config) {
375376
return getVersion();
376377
},
377378
build: function (callback, deletePatternDir) {
379+
if (patternlab && patternlab.isBusy) {
380+
console.log('Pattern Lab is busy building a previous run - returning early.');
381+
return;
382+
}
383+
patternlab.isBusy = true;
378384
buildPatterns(deletePatternDir);
379385
new ui().buildFrontend(patternlab);
380386
printDebug();
387+
patternlab.isBusy = false;
381388
callback();
382389
},
383390
help: function () {
384391
help();
385392
},
386393
patternsonly: function (callback, deletePatternDir) {
394+
if (patternlab && patternlab.isBusy) {
395+
console.log('Pattern Lab is busy building a previous run - returning early.');
396+
return;
397+
}
398+
patternlab.isBusy = true;
387399
buildPatterns(deletePatternDir);
388400
printDebug();
401+
patternlab.isBusy = false;
389402
callback();
390403
},
391404
liststarterkits: function () {

core/lib/ui_builder.js

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ var ui_builder = function () {
2020
* @param pattern - the pattern to add
2121
*/
2222
function addToPatternPaths(patternlab, pattern) {
23-
if (!patternlab.patternPaths) {
24-
patternlab.patternPaths = {};
25-
}
26-
2723
if (!patternlab.patternPaths[pattern.patternGroup]) {
2824
patternlab.patternPaths[pattern.patternGroup] = {};
2925
}
@@ -40,10 +36,6 @@ var ui_builder = function () {
4036
* @param pattern - the pattern to add
4137
*/
4238
function addToViewAllPaths(patternlab, pattern) {
43-
if (!patternlab.viewAllPaths) {
44-
patternlab.viewAllPaths = {};
45-
}
46-
4739
if (!patternlab.viewAllPaths[pattern.patternGroup]) {
4840
patternlab.viewAllPaths[pattern.patternGroup] = {};
4941
}
@@ -342,10 +334,6 @@ var ui_builder = function () {
342334
patternGroups: {}
343335
};
344336

345-
if (!patternlab.patternTypes) {
346-
patternlab.patternTypes = [];
347-
}
348-
349337
_.forEach(sortPatterns(patternlab.patterns), function (pattern) {
350338

351339
//ignore patterns we can omit from rendering directly
@@ -560,12 +548,23 @@ var ui_builder = function () {
560548
writeFile(path.resolve(paths.public.annotations, 'annotations.js'), annotations);
561549
}
562550

551+
/**
552+
* Reset any global data we use between builds to guard against double adding things
553+
*/
554+
function resetUIBuilderState(patternlab) {
555+
patternlab.patternPaths = {};
556+
patternlab.viewAllPaths = {};
557+
patternlab.patternTypes = [];
558+
}
559+
563560
/**
564561
* The main entry point for ui_builder
565562
* @param patternlab - global data store
566563
*/
567564
function buildFrontend(patternlab) {
568565

566+
resetUIBuilderState(patternlab);
567+
569568
var paths = patternlab.config.paths;
570569

571570
//determine which patterns should be included in the front-end rendering
@@ -626,6 +625,9 @@ var ui_builder = function () {
626625
},
627626
groupPatterns: function (patternlab) {
628627
return groupPatterns(patternlab);
628+
},
629+
resetUIBuilderState: function (patternlab) {
630+
resetUIBuilderState(patternlab);
629631
}
630632
};
631633

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "patternlab-node",
33
"description": "Pattern Lab is a collection of tools to help you create atomic design systems. This is the node command line interface (CLI).",
4-
"version": "2.4.3",
4+
"version": "2.4.4",
55
"main": "./core/lib/patternlab.js",
66
"dependencies": {
77
"diveSync": "^0.3.0",

test/ui_builder_tests.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ exports['ui_builder'] = {
112112
new Pattern('patternType1/patternSubType2/grey.mustache'),
113113
new Pattern('patternType1/patternSubType2/white.mustache')
114114
);
115+
ui.resetUIBuilderState(patternlab);
115116

116117
//act
117118
var result = ui.groupPatterns(patternlab);
@@ -150,6 +151,7 @@ exports['ui_builder'] = {
150151
new Pattern('patternType1/patternSubType2/grey.mustache'),
151152
new Pattern('patternType1/patternSubType2/white.mustache')
152153
);
154+
ui.resetUIBuilderState(patternlab);
153155

154156
//act
155157
var result = ui.groupPatterns(patternlab);
@@ -179,6 +181,7 @@ exports['ui_builder'] = {
179181
new Pattern('patternType1/patternSubType2/grey.mustache'),
180182
new Pattern('patternType1/patternSubType2/white.mustache')
181183
);
184+
ui.resetUIBuilderState(patternlab);
182185

183186
//act
184187
var result = ui.groupPatterns(patternlab);
@@ -214,13 +217,33 @@ exports['ui_builder'] = {
214217
new Pattern('patternType1/patternSubType2/grey.mustache'),
215218
new Pattern('patternType1/patternSubType2/white.mustache')
216219
);
220+
ui.resetUIBuilderState(patternlab);
217221

218222
//act
219223
var result = ui.groupPatterns(patternlab);
220224

221225
//assert
222226
test.equals('todo', 'todo');
223227

228+
test.done();
229+
},
230+
231+
'resetUIBuilderState - reset global objects' : function (test) {
232+
//arrange
233+
var patternlab = createFakePatternLab({
234+
patternPaths: { foo: 1},
235+
viewAllPaths: { bar: 2},
236+
patternTypes: ['baz']
237+
});
238+
239+
//act
240+
ui.resetUIBuilderState(patternlab);
241+
242+
//assert
243+
test.equals(patternlab.patternPaths.foo, undefined);
244+
test.equals(patternlab.viewAllPaths.bar, undefined);
245+
test.equals(patternlab.patternTypes.length, 0);
246+
224247
test.done();
225248
}
226249

0 commit comments

Comments
 (0)