Skip to content

Commit c964462

Browse files
Merge pull request #744 from pattern-lab/fix/711-pseudopatterns
pseudopatterns polluting base patterns
2 parents fca4d03 + 2c8592a commit c964462

File tree

3 files changed

+25
-57
lines changed

3 files changed

+25
-57
lines changed

core/lib/pseudopattern_hunter.js

+5-51
Original file line numberDiff line numberDiff line change
@@ -42,58 +42,12 @@ pseudopattern_hunter.prototype.find_pseudopatterns = function (currentPattern, p
4242
}
4343

4444
//extend any existing data with variant data
45-
variantFileData = _.merge(currentPattern.jsonFileData, variantFileData);
45+
variantFileData = _.merge({}, currentPattern.jsonFileData, variantFileData);
4646

47-
let variantName = pseudoPatterns[i].substring(pseudoPatterns[i].indexOf('~') + 1).split('.')[0];
48-
let variantFilePath = path.join(currentPattern.subdir, currentPattern.fileName + '~' + variantName + '.json');
49-
let lm = fs.statSync(variantFileFullPath);
50-
let patternVariant = Pattern.create(variantFilePath, variantFileData, {
51-
//use the same template as the non-variant
52-
template: currentPattern.template,
53-
fileExtension: currentPattern.fileExtension,
54-
extendedTemplate: currentPattern.extendedTemplate,
55-
isPseudoPattern: true,
56-
basePattern: currentPattern,
57-
stylePartials: currentPattern.stylePartials,
58-
parameteredPartials: currentPattern.parameteredPartials,
59-
60-
// Only regular patterns are discovered during iterative walks
61-
// Need to recompile on data change or template change
62-
lastModified: Math.max(currentPattern.lastModified, lm.mtime),
63-
64-
// use the same template engine as the non-variant
65-
engine: currentPattern.engine
66-
}, patternlab);
67-
68-
changes_hunter.checkBuildState(patternVariant, patternlab);
69-
patternlab.graph.add(patternVariant);
70-
patternlab.graph.link(patternVariant, currentPattern);
71-
72-
//process the companion markdown file if it exists
73-
pattern_assembler.parse_pattern_markdown(patternVariant, patternlab);
74-
75-
//find pattern lineage
76-
lineage_hunter.find_lineage(patternVariant, patternlab);
77-
78-
//add to patternlab object so we can look these up later.
79-
pattern_assembler.addPattern(patternVariant, patternlab);
80-
81-
//we want to do everything we normally would here, except instead read the pseudoPattern data
82-
try {
83-
var variantFileFullPath = path.resolve(paths.source.patterns, pseudoPatterns[i]);
84-
var variantFileData = fs.readJSONSync(variantFileFullPath);
85-
} catch (err) {
86-
logger.warning(`There was an error parsing pseudopattern JSON for ${currentPattern.relPath}`);
87-
logger.warning(err);
88-
}
89-
90-
//extend any existing data with variant data
91-
variantFileData = _.merge(currentPattern.jsonFileData, variantFileData);
92-
93-
variantName = pseudoPatterns[i].substring(pseudoPatterns[i].indexOf('~') + 1).split('.')[0];
94-
variantFilePath = path.join(currentPattern.subdir, currentPattern.fileName + '~' + variantName + '.json');
95-
lm = fs.statSync(variantFileFullPath);
96-
patternVariant = Pattern.create(variantFilePath, variantFileData, {
47+
const variantName = pseudoPatterns[i].substring(pseudoPatterns[i].indexOf('~') + 1).split('.')[0];
48+
const variantFilePath = path.join(currentPattern.subdir, currentPattern.fileName + '~' + variantName + '.json');
49+
const lm = fs.statSync(variantFileFullPath);
50+
const patternVariant = Pattern.create(variantFilePath, variantFileData, {
9751
//use the same template as the non-variant
9852
template: currentPattern.template,
9953
fileExtension: currentPattern.fileExtension,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"message": "baseMessage"
3+
}

test/pseudopattern_hunter_tests.js

+17-6
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,7 @@ tap.test('pseudpattern found and added as a pattern', function (test) {
4646
//arrange
4747
var pl = stubPatternlab();
4848

49-
var atomPattern = new Pattern('00-test/03-styled-atom.mustache');
50-
atomPattern.template = fs.readFileSync(patterns_dir + '00-test/03-styled-atom.mustache', 'utf8');
51-
atomPattern.extendedTemplate = atomPattern.template;
52-
atomPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(atomPattern);
53-
49+
var atomPattern = pattern_assembler.load_pattern_iterative('00-test/03-styled-atom.mustache', pl);
5450
pattern_assembler.addPattern(atomPattern, pl);
5551

5652
//act
@@ -59,12 +55,27 @@ tap.test('pseudpattern found and added as a pattern', function (test) {
5955
//assert
6056
test.equals(patternCountBefore + 1, pl.patterns.length);
6157
test.equals(pl.patterns[1].patternPartial, 'test-styled-atom-alt');
62-
test.equals(pl.patterns[1].extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), '<span class="test_base {{styleModifier}}"> {{message}} </span>');
6358
test.equals(JSON.stringify(pl.patterns[1].jsonFileData), JSON.stringify({"message": "alternateMessage"}));
6459
test.equals(pl.patterns[1].patternLink, '00-test-03-styled-atom-alt' + path.sep + '00-test-03-styled-atom-alt.html');
6560
});
6661
});
6762

63+
tap.test('pseudpattern does not pollute base pattern data', function (test) {
64+
//arrange
65+
var pl = stubPatternlab();
66+
67+
var atomPattern = pattern_assembler.load_pattern_iterative('00-test/03-styled-atom.mustache', pl);
68+
pattern_assembler.addPattern(atomPattern, pl);
69+
70+
//act
71+
var patternCountBefore = pl.patterns.length;
72+
return pph.find_pseudopatterns(atomPattern, pl).then(() => {
73+
//assert
74+
test.equals(pl.patterns[0].patternPartial, 'test-styled-atom');
75+
test.equals(JSON.stringify(pl.patterns[0].jsonFileData), JSON.stringify({"message": "baseMessage"}));
76+
});
77+
});
78+
6879
tap.test('pseudpattern variant includes stylePartials and parameteredPartials', function (test) {
6980
//arrange
7081
var pl = stubPatternlab();

0 commit comments

Comments
 (0)