1 |
|
2 | var EOL, basename, dirname, join, mkdirp, normalize, relative, sep, specLocation, writeFileSync, _ref;
|
3 |
|
4 | require('colors');
|
5 |
|
6 | EOL = require('os').EOL;
|
7 |
|
8 | _ref = require('path'), normalize = _ref.normalize, dirname = _ref.dirname, basename = _ref.basename, relative = _ref.relative, join = _ref.join, sep = _ref.sep;
|
9 |
|
10 | mkdirp = require('mkdirp');
|
11 |
|
12 | writeFileSync = require('fs').writeFileSync;
|
13 |
|
14 | module.exports.specLocation = specLocation = function() {
|
15 | var baseName, fileName, line, lineNrs, m, path, specPath, _i, _len, _ref1, _ref2, _ref3;
|
16 | _ref1 = (new Error).stack.split(EOL);
|
17 | for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
18 | line = _ref1[_i];
|
19 | baseName = void 0;
|
20 | try {
|
21 | _ref2 = line.match(/.*\((.*?):(.*)/), m = _ref2[0], path = _ref2[1], lineNrs = _ref2[2];
|
22 | } catch (_error) {}
|
23 | if (path == null) {
|
24 | continue;
|
25 | }
|
26 | fileName = basename(path);
|
27 | try {
|
28 | _ref3 = fileName.match(/(.*)_spec.[coffee|js]/), m = _ref3[0], baseName = _ref3[1];
|
29 | } catch (_error) {}
|
30 | if (!baseName) {
|
31 | continue;
|
32 | }
|
33 | specPath = relative(process.cwd(), dirname(path));
|
34 | return {
|
35 | fileName: fileName,
|
36 | baseName: baseName,
|
37 | specPath: specPath
|
38 | };
|
39 | }
|
40 | };
|
41 |
|
42 | module.exports.load = function(templatePath) {
|
43 | return require(templatePath);
|
44 | };
|
45 |
|
46 | module.exports.save = function(templateName, name, does) {
|
47 | return does.get({
|
48 | query: {
|
49 | tag: name
|
50 | }
|
51 | }, function(err, entity) {
|
52 | var error, fileName, moduleBody, pathParts, sourceFile, templateModule, templateModulePath;
|
53 | if (err != null) {
|
54 | console.log('ipso:', "could not save '" + name + "' - " + err.message);
|
55 | return;
|
56 | }
|
57 | try {
|
58 | templateModulePath = join(process.env.HOME, '.ipso', 'templates', templateName);
|
59 | templateModule = module.exports.load(templateModulePath);
|
60 | } catch (_error) {
|
61 | error = _error;
|
62 | console.log(error.message.red);
|
63 | return;
|
64 | }
|
65 | specLocation = module.exports.specLocation();
|
66 | pathParts = specLocation.specPath.split(sep);
|
67 | pathParts.shift();
|
68 | pathParts.unshift(process.env.IPSO_SRC || 'src');
|
69 | sourceFile = {
|
70 | path: process.cwd() + sep + pathParts.join(sep),
|
71 | filename: specLocation.baseName + '.coffee'
|
72 | };
|
73 | if (typeof templateModule.target === 'function') {
|
74 | templateModule.target(sourceFile, specLocation);
|
75 | }
|
76 | if (typeof templateModule.render === 'function') {
|
77 | moduleBody = templateModule.render(entity);
|
78 | }
|
79 | if (typeof moduleBody === 'string') {
|
80 | mkdirp.sync(sourceFile.path);
|
81 | fileName = join(sourceFile.path, sourceFile.filename);
|
82 | writeFileSync(fileName, moduleBody);
|
83 | console.log('ipso:', ("Created " + fileName).green);
|
84 | return console.log(moduleBody);
|
85 | }
|
86 | });
|
87 | };
|