Skip to content

Commit b81292f

Browse files
committed
refactor(gen): improve generator-base and util wiring
1 parent d153140 commit b81292f

File tree

5 files changed

+70
-70
lines changed

5 files changed

+70
-70
lines changed

Diff for: app/generator.js

+4-15
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import fs from 'fs';
44
import path from 'path';
55
import chalk from 'chalk';
66
import {Base} from 'yeoman-generator';
7-
import * as genUtils from '../util';
7+
import {genBase} from '../generator-base';
88

99
export default class Generator extends Base {
1010

@@ -25,22 +25,11 @@ export default class Generator extends Base {
2525
return {
2626

2727
init: function () {
28-
this.appname = this.name || path.basename(process.cwd());
29-
this.appname = this._.camelize(this._.slugify(this._.humanize(this.appname)));
30-
31-
this.scriptAppName = this.appname + genUtils.appSuffix(this);
32-
this.appPath = this.env.options.appPath;
3328
this.pkg = require('../package.json');
34-
3529
this.filters = {};
3630

37-
// dynamic assertion statements
38-
this.expect = function() {
39-
return this.filters.expect ? 'expect(' : '';
40-
}.bind(this);
41-
this.to = function() {
42-
return this.filters.expect ? ').to' : '.should';
43-
}.bind(this);
31+
// init shared generator properies and methods
32+
genBase(this);
4433
},
4534

4635
info: function () {
@@ -394,7 +383,7 @@ export default class Generator extends Base {
394383

395384
generateProject: function() {
396385
this.sourceRoot(path.join(__dirname, './templates'));
397-
genUtils.processDirectory(this, '.', '.');
386+
this.processDirectory('.', '.');
398387
},
399388

400389
generateEndpoint: function() {

Diff for: endpoint/generator.js

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
'use strict';
22

33
import path from 'path';
4-
import ScriptBase from '../script-base';
5-
import * as genUtils from '../util';
4+
import {NamedBase} from 'yeoman-generator';
5+
import {genNamedBase} from '../generator-base';
66

7-
export default class Generator extends ScriptBase {
7+
export default class Generator extends NamedBase {
88

99
constructor(...args) {
1010
super(...args);
@@ -25,6 +25,11 @@ export default class Generator extends ScriptBase {
2525
});
2626
}
2727

28+
initializing() {
29+
// init shared generator properies and methods
30+
genNamedBase(this);
31+
}
32+
2833
prompting() {
2934
var done = this.async();
3035
var promptCb = function (props) {
@@ -103,7 +108,7 @@ export default class Generator extends ScriptBase {
103108

104109
writing() {
105110
this.sourceRoot(path.join(__dirname, './templates'));
106-
genUtils.processDirectory(this, '.', this.routeDest);
111+
this.processDirectory('.', this.routeDest);
107112
}
108113

109114
end() {
@@ -117,7 +122,7 @@ export default class Generator extends ScriptBase {
117122
"app.use(\'" + this.route +"\', require(\'" + reqPath + "\'));"
118123
]
119124
};
120-
genUtils.rewriteFile(routeConfig);
125+
this.rewriteFile(routeConfig);
121126
}
122127

123128
if (this.filters.socketio && this.config.get('insertSockets')) {
@@ -131,7 +136,7 @@ export default class Generator extends ScriptBase {
131136
"require(\'" + reqPath + "\').register(socket);"
132137
]
133138
};
134-
genUtils.rewriteFile(socketConfig);
139+
this.rewriteFile(socketConfig);
135140
}
136141

137142
if (this.filters.sequelize && this.config.get('insertModels')) {
@@ -145,7 +150,7 @@ export default class Generator extends ScriptBase {
145150
"db." + this.classedName + " = db.sequelize.import(\'" + reqPath +"\');"
146151
]
147152
};
148-
genUtils.rewriteFile(modelConfig);
153+
this.rewriteFile(modelConfig);
149154
}
150155
}
151156
}

Diff for: generator-base.js

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
'use strict';
2+
3+
import util from 'util';
4+
import path from 'path';
5+
import * as genUtils from './util';
6+
7+
export function genBase(self) {
8+
self = self || this;
9+
10+
try {
11+
self.appname = require(path.join(process.cwd(), 'bower.json')).name;
12+
} catch (e) {
13+
self.appname = self.name || path.basename(process.cwd());
14+
}
15+
self.appname = self._.camelize(self._.slugify(self._.humanize(self.appname)));
16+
self.scriptAppName = self.appname + genUtils.appSuffix(self);
17+
18+
self.filters = self.filters || self.config.get('filters');
19+
20+
// dynamic assertion statements
21+
self.expect = function() {
22+
return self.filters.expect ? 'expect(' : '';
23+
};
24+
self.to = function() {
25+
return self.filters.expect ? ').to' : '.should';
26+
};
27+
28+
// dynamic relative require path
29+
self.relativeRequire = genUtils.relativeRequire.bind(self);
30+
// process template directory
31+
self.processDirectory = genUtils.processDirectory.bind(self);
32+
// rewrite a file in place
33+
self.rewriteFile = genUtils.rewriteFile;
34+
}
35+
36+
export function genNamedBase(self) {
37+
self = self || this;
38+
39+
// extend genBase
40+
genBase(self);
41+
42+
var name = self.name.replace(/\//g, '-');
43+
44+
self.cameledName = self._.camelize(name);
45+
self.classedName = self._.classify(name);
46+
47+
self.basename = path.basename(self.name);
48+
self.dirname = (self.name.indexOf('/') >= 0) ? path.dirname(self.name) : self.name;
49+
}

Diff for: script-base.js

-45
This file was deleted.

Diff for: util.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,9 @@ function destinationPath(self, filepath) {
6868
return filepath;
6969
}
7070

71-
export function relativeRequire(self, to, fr) {
72-
fr = destinationPath(self, fr);
71+
export function relativeRequire(to, fr) {
72+
var self = this;
73+
fr = destinationPath(self, fr || self.filePath);
7374
to = destinationPath(self, to);
7475
return path.relative(path.dirname(fr), to)
7576
.replace(/\\/g, '/') // convert win32 separator to posix
@@ -105,7 +106,8 @@ function templateIsUsable(self, filteredFile) {
105106
return true;
106107
}
107108

108-
export function processDirectory(self, source, destination) {
109+
export function processDirectory(source, destination) {
110+
var self = this;
109111
var root = self.isPathAbsolute(source) ? source : path.join(self.sourceRoot(), source);
110112
var files = self.expandFiles('**', { dot: true, cwd: root });
111113
var dest, src;

0 commit comments

Comments
 (0)