parser.js 1.68 KB
/*
	## Parser

	解析数据模板(属性名部分)。

	* Parser.parse( name )
		
		```json
		{
			parameters: [ name, inc, range, decimal ],
			rnage: [ min , max ],

			min: min,
			max: max,
			count : count,

			decimal: decimal,
			dmin: dmin,
			dmax: dmax,
			dcount: dcount
		}
		```
 */

var Constant = require('./constant')
var Random = require('./random/')

/* jshint -W041 */
module.exports = {
	parse: function(name) {
		name = name == undefined ? '' : (name + '')

		var parameters = (name || '').match(Constant.RE_KEY)

		var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE)
		var min = range && range[1] && parseInt(range[1], 10) // || 1
		var max = range && range[2] && parseInt(range[2], 10) // || 1
			// repeat || min-max || 1
			// var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1
		var count = range ? !range[2] ? parseInt(range[1], 10) : Random.integer(min, max) : undefined

		var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE)
		var dmin = decimal && decimal[1] && parseInt(decimal[1], 10) // || 0,
		var dmax = decimal && decimal[2] && parseInt(decimal[2], 10) // || 0,
			// int || dmin-dmax || 0
		var dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : undefined

		var result = {
			// 1 name, 2 inc, 3 range, 4 decimal
			parameters: parameters,
			// 1 min, 2 max
			range: range,
			min: min,
			max: max,
			// min-max
			count: count,
			// 是否有 decimal
			decimal: decimal,
			dmin: dmin,
			dmax: dmax,
			// dmin-dimax
			dcount: dcount
		}

		for (var r in result) {
			if (result[r] != undefined) return result
		}

		return {}
	}
}