-
Notifications
You must be signed in to change notification settings - Fork 0
/
util.js
executable file
·88 lines (76 loc) · 2.37 KB
/
util.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
'use strict';
var path = require('path');
var fs = require('fs');
module.exports = {
appName: appName,
processDirectory: processDirectory
};
function appName (self) {
var counter = 0, suffix = self.options['app-suffix'];
// Have to check this because of generator bug #386
process.argv.forEach(function(val) {
if (val.indexOf('--app-suffix') > -1) {
counter++;
}
});
if (counter === 0 || (typeof suffix === 'boolean' && suffix)) {
suffix = 'App';
}
return suffix ? self._.classify(suffix) : '';
}
function filterFile (template) {
// Find matches for parans
var filterMatches = template.match(/\(([^)]+)\)/g);
var filters = [];
if(filterMatches) {
filterMatches.forEach(function(filter) {
filters.push(filter.replace('(', '').replace(')', ''));
template = template.replace(filter, '');
});
}
return { name: template, filters: filters };
}
function templateIsUsable (self, filteredFile) {
var filters = self.config.get('filters');
var enabledFilters = [];
for(var key in filters) {
if(filters[key]) enabledFilters.push(key);
}
var matchedFilters = self._.intersection(filteredFile.filters, enabledFilters);
// check that all filters on file are matched
if(filteredFile.filters.length && matchedFilters.length !== filteredFile.filters.length) {
return false;
}
return true;
}
function processDirectory (self, source, destination) {
var root = self.isPathAbsolute(source) ? source : path.join(self.sourceRoot(), source);
var files = self.expandFiles('**', { dot: true, cwd: root });
var dest, src;
files.forEach(function(f) {
var filteredFile = filterFile(f);
if(self.name) {
filteredFile.name = filteredFile.name.replace('name', self.name);
}
var name = filteredFile.name;
var copy = false, stripped;
src = path.join(root, f);
dest = path.join(destination, name);
if(path.basename(dest).indexOf('_') === 0) {
stripped = path.basename(dest).replace(/^_/, '');
dest = path.join(path.dirname(dest), stripped);
}
if(path.basename(dest).indexOf('!') === 0) {
stripped = path.basename(dest).replace(/^!/, '');
dest = path.join(path.dirname(dest), stripped);
copy = true;
}
if(templateIsUsable(self, filteredFile)) {
if(copy) {
self.copy(src, dest);
} else {
self.template(src, dest);
}
}
});
}