-
Notifications
You must be signed in to change notification settings - Fork 5
/
members.coffee
139 lines (122 loc) · 3.46 KB
/
members.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#--------------------------------------------
async = require 'async'
crypto = require 'crypto'
fs = require 'fs'
{spawn} = child_process = require 'child_process'
_ = require 'underscore'
arg = process.argv[2]
usage = ->
console.log """
Usage:
version - what version are you running?
quickstart - init && migrate && seed && run
init - set up a members are in the current folder
setup - migrate && seed
migrate - migrate the database
seed - seed the database
run - run the server (do this in the root folder)
"""
cwd = process.cwd()
methods = new class
help: =>
usage()
version: =>
pkg = require "#{__dirname}/package.json"
console.log "Members Area, v#{pkg.version}"
run: =>
proc = spawn "npm", ["start"],
cwd: cwd
stdio: 'inherit'
proc.on 'close', process.exit
process.on 'SIGINT', ->
proc.kill 'SIGINT'
process.on 'SIGTERM', ->
proc.kill 'SIGTERM'
migrate: (done = ->) =>
console.log "Migrating"
proc = spawn "#{__dirname}/scripts/db/migrate", [],
cwd: process.cwd()
stdio: 'inherit'
proc.on 'close', -> done()
seed: (done = ->) =>
console.log "Seeding"
proc = spawn "#{__dirname}/scripts/db/seed", [],
cwd: process.cwd()
stdio: 'inherit'
proc.on 'close', -> done()
quickstart: (done = ->) =>
async.series [
@init
@migrate
@seed
@run
], done
setup: (done = ->) =>
async.series [
@migrate
@seed
], done
init: (done = ->) =>
console.log "Initialising a members area in #{cwd}"
files = fs.readdirSync cwd
for file in files
unless file.match /^(\.(|\.|git)|package.json|node_modules)$/
console.error "Folder is not empty: '#{file}' forbidden"
process.exit 1
try
pkg = require "#{cwd}/package.json"
pkg ?=
name: "MyMembersArea"
version: "0.0.0"
description: "A Members Area powered by members-area"
main: "index.coffee"
scripts: {}
author: ""
private: true
pkg.scripts ?= {}
pkg.scripts.start ?= "coffee index.coffee"
pkg.dependencies ?= {}
pkg.dependencies["sqlite3"] ?= ">=3.1.8 <3.2"
pkg.dependencies["coffee-script"] ?= ">1.6"
pkg.dependencies["members-area"] ?= "*"
fs.writeFileSync "package.json", JSON.stringify pkg, null, 2
fs.writeFileSync ".gitignore", """
*.sqlite
config/
log/
node_modules/
sessions/
"""
fs.writeFileSync "index.coffee", """
MembersArea = require 'members-area'
# Make sure we're in the right folder.
process.chdir __dirname
MembersArea.start()
"""
fs.mkdirSync "config"
fs.mkdirSync "log"
fs.mkdirSync "public"
fs.mkdirSync "sessions"
fs.writeFileSync "config/db.json", JSON.stringify
development: "sqlite:///members.sqlite"
test: "sqlite:///members-test.sqlite"
, null, 2
async.series
npmInstall: (next) ->
proc = spawn "npm", ["install"],
cwd: process.cwd()
stdio: 'inherit'
proc.on 'close', -> next()
setSettings: (next) ->
crypto.randomBytes 18, (err, bytes) ->
fs.writeFileSync "config/development.json", JSON.stringify
secret: bytes?.toString('base64') ? "PutSecureSecretHere"
serverAddress: "http://localhost:1337"
next()
, done
arg = arg?.replace /[^a-z]/g, ""
fn = methods[arg]
if fn?
fn()
else
usage()