UNPKG

4.15 kBtext/coffeescriptView Raw
1_ = require 'lodash'
2util = require 'util'
3path = require 'path'
4url = require 'url'
5GitHubApi = require 'github'
6latestVersion = require 'latest-version'
7yeoman = require 'yeoman-generator'
8packageJSON = require '../package.json'
9
10extractGeneratorName = (__, appname) ->
11 _.kebabCase appname
12
13githubUserInfo = (name, cb) ->
14 github = new GitHubApi version: '3.0.0'
15 github.user.getFrom user: name, cb
16
17class OctobluServiceGenerator extends yeoman.generators.Base
18 constructor: (args, options, config) ->
19 super
20 @currentYear = (new Date()).getFullYear()
21 {@realname, @githubUrl} = options
22 @on 'end', => @installDependencies skipInstall: options['skip-install']
23 @pkg = JSON.parse @readFileAsString path.join __dirname, '../package.json'
24
25 askFor: ->
26 # have Yeoman greet the user.
27 done = @async()
28 latestVersion packageJSON.name
29 .catch (error) =>
30 console.error 'unable to retrieve latest version'
31 console.error error.stack
32 process.exit 1
33 .then (version) =>
34 console.log ''
35 if version == packageJSON.version
36 console.log "** using latest version #{version} **"
37 console.log ''
38 else
39 console.log '** this generator version is outofdate **'
40 console.log "** the installed version is #{packageJSON.version} **"
41 console.log "** I need version #{version} **"
42 console.log ''
43
44 console.log @yeoman
45 generatorName = extractGeneratorName @_, @appname
46
47 prompts = [
48 name: 'githubUser'
49 message: 'Would you mind telling me your username on GitHub?'
50 default: 'octoblu'
51 ,
52 name: 'generatorName'
53 message: 'What\'s the base name of your generator?'
54 default: generatorName
55 ]
56
57 @prompt prompts, (props) =>
58 @githubUser = props.githubUser
59 @generatorName = props.generatorName
60 done()
61
62 userInfo: ->
63 return if @realname? and @githubUrl?
64
65 done = @async()
66
67 githubUserInfo @githubUser, (err, res) =>
68 @realname = res.name
69 @email = res.email
70 @githubUrl = res.html_url
71 done()
72
73 projectfiles: ->
74 appName = _.kebabCase @generatorName
75 generatorNameWithoutService = @generatorName.replace(/\-service$/, '')
76 fullFilePrefix = _.kebabCase @generatorName
77 filePrefix = _.kebabCase generatorNameWithoutService
78 instancePrefix = _.camelCase generatorNameWithoutService
79 classPrefix = _.upperFirst instancePrefix
80
81 serviceClass = "#{classPrefix}Service"
82 serviceInstance = "#{instancePrefix}Service"
83
84 controllerClass = "#{classPrefix}Controller"
85 controllerInstance = "#{instancePrefix}Controller"
86
87 context = {
88 filePrefix
89 serviceClass
90 serviceInstance
91 controllerClass
92 controllerInstance
93 appName
94 fullFilePrefix
95 @githubUrl
96 @realname
97 }
98 @template "_package.json", "package.json", context
99 @template "src/_server.coffee", "src/server.coffee", context
100 @template "src/_router.coffee", "src/router.coffee", context
101 @template "src/services/_service.coffee", "src/services/#{filePrefix}-service.coffee", context
102 @template "src/controllers/_controller.coffee", "src/controllers/#{filePrefix}-controller.coffee", context
103 @template "test/_mocha.opts", "test/mocha.opts", context
104 @template "test/_test_helper.coffee", "test/test_helper.coffee", context
105 @template "test/integration/_hello-spec.coffee", "test/integration/#{filePrefix}-hello-spec.coffee", context
106 @template "_index.js", "index.js", context
107 @template "_command.js", "command.js", context
108 @template "_command.coffee", "command.coffee", context
109 @template "_travis.yml", ".travis.yml", context
110 @template "_Dockerfile", "Dockerfile", context
111 @template "_dockerignore", ".dockerignore", context
112 @template "README.md", "README.md", context
113 @template "LICENSE", "LICENSE", context
114
115 gitfiles: ->
116 @copy '_gitignore', '.gitignore'
117
118 app: ->
119
120 templates: ->
121
122 tests: ->
123
124module.exports = OctobluServiceGenerator