81 lines
2.1 KiB
JavaScript
81 lines
2.1 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
https://github.com/visionmedia/commander.js
|
|
http://visionmedia.github.io/commander.js/
|
|
https://github.com/visionmedia/commander.js/tree/master/examples
|
|
|
|
sudo npm install ./ -g
|
|
*/
|
|
|
|
var path = require('path')
|
|
var program = require('commander')
|
|
var pkg = require(path.resolve(__dirname, '../package.json'))
|
|
var Random = require('../dist/mock.js').Random
|
|
|
|
program
|
|
.version(pkg.version)
|
|
.on('--help', function() {
|
|
console.log(' Examples:')
|
|
console.log('')
|
|
console.log(' $ random date yyyy-MM-dd')
|
|
console.log(' $ random time HH:mm:ss')
|
|
console.log('')
|
|
})
|
|
|
|
;
|
|
(function() {
|
|
|
|
var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m
|
|
var FN_ARG_SPLIT = /,/
|
|
var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/
|
|
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg
|
|
var EXCLUDE = [
|
|
'extend',
|
|
'dataImage', // mock/random/image
|
|
'capitalize', 'upper', 'lower', 'pick', 'shuffle', 'order', // mock/random/helper.js
|
|
'increment', 'inc' // mock/random/misc.js
|
|
]
|
|
|
|
function parseArgs(fn) {
|
|
var fnText = fn.toString().replace(STRIP_COMMENTS, '')
|
|
var argDecl = fnText.match(FN_ARGS)
|
|
return argDecl[1].split(FN_ARG_SPLIT).join(', ')
|
|
}
|
|
|
|
Object.keys(Random).forEach(function(key) {
|
|
if (key[0] === '_') return
|
|
if (EXCLUDE.indexOf(key) !== -1) return
|
|
|
|
var fn = Random[key]
|
|
if (typeof fn === 'function') {
|
|
var argDecl = parseArgs(fn)
|
|
if (argDecl) argDecl = '( ' + argDecl + ' )'
|
|
else argDecl = '()';
|
|
|
|
program
|
|
.command(key)
|
|
.description('Random.' + key + argDecl)
|
|
.action(function() {
|
|
var args = [].slice.call(arguments, 0, -1)
|
|
var result = fn.apply(Random, args)
|
|
console.log(result)
|
|
})
|
|
}
|
|
})
|
|
|
|
})()
|
|
|
|
program.parse(process.argv)
|
|
|
|
;
|
|
(function() {
|
|
var cmd = program.args[0]
|
|
if (!cmd) {
|
|
process.stdout.write(program.helpInformation())
|
|
program.emit('--help')
|
|
process.exit()
|
|
}
|
|
})() |