UNPKG

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