UNPKG

2.78 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.6.3
2var EOL, basename, dirname, join, mkdirp, normalize, relative, sep, specLocation, writeFileSync, _ref;
3
4require('colors');
5
6EOL = 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
10mkdirp = require('mkdirp');
11
12writeFileSync = require('fs').writeFileSync;
13
14module.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
42module.exports.load = function(templatePath) {
43 return require(templatePath);
44};
45
46module.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};