Skip to content

Commit dc6d2ef

Browse files
committed
enh; options for config,templates and output directories
1 parent 06234fd commit dc6d2ef

File tree

3 files changed

+40
-23
lines changed

3 files changed

+40
-23
lines changed

README.md

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,19 @@ or
2323
### CLI
2424

2525
```
26-
cg [options] {configName} {openapi-definition}
26+
cg [options] {[path]configName} {openapi-definition}
2727
2828
Options:
29-
-d, --debug Turn on debugging information in the model [boolean]
30-
--help Show help [boolean]
31-
-l, --lint Lint input definition [boolean]
32-
-s, --stools Use swagger-tools to validate OpenAPI 2.0 definitions [boolean]
33-
--version Show version number [boolean]
34-
-v, --verbose Increase verbosity [boolean]
35-
-z, --zip Create a .zip file instead of individual files [boolean]
29+
--help Show help [boolean]
30+
--version Show version number [boolean]
31+
-d, --debug Turn on debugging information in the model [boolean]
32+
-l, --lint Lint input definition [boolean]
33+
-o, --output Specify output directory [string] [default: "./out/"]
34+
-s, --stools Use swagger-tools to validate OpenAPI 2.0 definitions
35+
[boolean]
36+
-t, --templates Specify templates directory [string]
37+
-v, --verbose Increase verbosity [boolean]
38+
-z, --zip Create a .zip file instead of individual files [boolean]
3639
```
3740

3841
e.g.

cg.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
'use strict';
33

44
const fs = require('fs');
5+
const path = require('path');
56
const url = require('url');
67
const util = require('util');
78

@@ -15,16 +16,23 @@ const admzip = require('adm-zip');
1516
const processor = require('./index.js');
1617

1718
var argv = require('yargs')
18-
.usage('cg [options] {configName} {openapi-definition}')
19+
.usage('cg [options] {[path]configName} {openapi-definition}')
1920
.boolean('debug')
2021
.alias('d','debug')
2122
.describe('debug','Turn on debugging information in the model')
2223
.boolean('lint')
2324
.alias('l','lint')
2425
.describe('lint','Lint input definition')
26+
.string('output')
27+
.alias('o','output')
28+
.describe('output','Specify output directory')
29+
.default('output','./out/')
2530
.boolean('stools')
2631
.alias('s','stools')
2732
.describe('stools','Use swagger-tools to validate OpenAPI 2.0 definitions')
33+
.string('templates')
34+
.alias('t','templates')
35+
.describe('templates','Specify templates directory')
2836
.boolean('verbose')
2937
.describe('verbose','Increase verbosity')
3038
.alias('v','verbose')
@@ -34,10 +42,16 @@ var argv = require('yargs')
3442
.version()
3543
.argv;
3644

37-
let configName = argv._[0] || 'nodejs';
38-
let config = require('./configs/'+configName+'.json');
45+
let configStr = argv._[0] || 'nodejs';
46+
let configName = path.basename(configStr);
47+
let configPath = path.dirname(configStr) || './configs';
48+
let configFile = path.resolve(configPath,configName)+'.json';
49+
let config = require(configFile);
3950
let defName = argv._[1] || './defs/petstore3.json';
4051

52+
config.outputDir = argv.output;
53+
config.templateDir = argv.templates;
54+
4155
let zipFiles = {};
4256

4357
function nop(arg, callback) { if (callback) callback(null,true); return true; }
@@ -56,7 +70,7 @@ function finish(err,result) {
5670
zip.addFile(f, new Buffer(zipFiles[f]), 'Created with OpenAPI-CodeGen');
5771
}
5872
// write everything to disk
59-
zip.writeZip('./out/'+configName+'.zip');
73+
zip.writeZip(path.join(config.outputDir,configName+'.zip'));
6074
}
6175
}
6276

index.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,18 @@ function main(o, config, configName, callback) {
4545
}
4646

4747
if (verbose) console.log('Making/cleaning output directories');
48-
ff.mkdirp(outputDir+configName,function(){
49-
ff.rimraf(outputDir+configName+'/*',function(){
48+
ff.mkdirp(path.join(outputDir,configName),function(){
49+
ff.rimraf(path.join(outputDir,configName)+'/*',function(){
5050
if (config.directories) {
5151
for (let directory of config.directories) {
52-
ff.mkdirp.sync(outputDir+configName+'/'+directory);
52+
ff.mkdirp.sync(path.join(outputDir,configName,directory));
5353
}
5454
}
5555
for (let action of actions) {
5656
if (verbose) console.log('Rendering '+action.output);
5757
let template = Hogan.compile(action.template);
5858
let content = template.render(model,config.partials);
59-
ff.createFile(outputDir+configName+'/'+action.output,content,'utf8');
59+
ff.createFile(path.join(outputDir,configName,action.output),content,'utf8');
6060
}
6161
if (config.touch) { // may not now be necessary
6262
let touchTmp = Hogan.compile(config.touch);
@@ -65,17 +65,17 @@ function main(o, config, configName, callback) {
6565
for (let file of files) {
6666
file = file.trim();
6767
if (file) {
68-
if (!fs.existsSync(outputDir+configName+'/'+file)) {
69-
ff.createFile(outputDir+configName+'/'+file,'','utf8');
68+
if (!fs.existsSync(path.join(outputDir,configName,file))) {
69+
ff.createFile(path.join(outputDir,configName,file),'','utf8');
7070
}
7171
}
7272
}
7373
}
7474
if (config.apache) {
75-
ff.createFile(outputDir+configName+'/LICENSE',ff.readFileSync(tpl('_common', 'LICENSE'),'utf8'),'utf8');
75+
ff.createFile(path.join(outputDir,configName,'LICENSE'),ff.readFileSync(tpl('_common', 'LICENSE'),'utf8'),'utf8');
7676
}
7777
else {
78-
ff.createFile(outputDir+configName+'/LICENSE',ff.readFileSync(tpl('_common', 'UNLICENSE'),'utf8'),'utf8');
78+
ff.createFile(path.join(outputDir,configName,'LICENSE'),ff.readFileSync(tpl('_common', 'UNLICENSE'),'utf8'),'utf8');
7979
}
8080
let outer = model;
8181

@@ -89,7 +89,7 @@ function main(o, config, configName, callback) {
8989
let cApi = Object.assign({},config.defaults,pa.defaults||{},toplevel,api);
9090
let filename = fnTemplate.render(cApi,config.partials);
9191
if (verbose) console.log('Rendering '+filename+' (dynamic:'+pa.input+')');
92-
ff.createFile(outputDir+configName+'/'+filename,template.render(cApi,config.partials),'utf8');
92+
ff.createFile(path.join(outputDir,configName,filename),template.render(cApi,config.partials),'utf8');
9393
}
9494
}
9595
}
@@ -105,7 +105,7 @@ function main(o, config, configName, callback) {
105105
outer.models.push(effModel);
106106
let filename = fnTemplate.render(outer,config.partials);
107107
if (verbose) console.log('Rendering '+filename+' (dynamic:'+pm.input+')');
108-
ff.createFile(outputDir+configName+'/'+filename,template.render(outer,config.partials),'utf8');
108+
ff.createFile(path.join(outputDir,configName,filename),template.render(outer,config.partials),'utf8');
109109
}
110110
}
111111
}
@@ -121,7 +121,7 @@ function main(o, config, configName, callback) {
121121
model.operations.push(operation);
122122
let filename = fnTemplate.render(outer,config.partials);
123123
if (verbose) console.log('Rendering '+filename+' (dynamic:'+po.input+')');
124-
ff.createFile(outputDir+configName+'/'+filename,template.render(outer,config.partials),'utf8');
124+
ff.createFile(path.join(outputDir,configName,filename),template.render(outer,config.partials),'utf8');
125125
}
126126
}
127127
}

0 commit comments

Comments
 (0)