module.exports = class NumberValueValidator
	@detectBy: ['value']
	
	constructor: (@params) ->
	
	validate: (value, valid) ->
		return valid(no, 'is not present') if not value
		
		min = -Infinity
		minEqual = no
		max = Infinity
		maxEqual = no
		
		result = />=\s?([0-9.]+)/.exec @params.value
		if result
			min = parseFloat result[1]
			minEqual = yes
		
		result = />\s?([0-9.]+)/.exec @params.value
		if result
			min = parseFloat result[1]
			minEqual = no
		
		result = /<=\s?([0-9.]+)/.exec @params.value
		if result
			max = parseFloat result[1]
			maxEqual = yes
		
		result = /<\s?([0-9.]+)/.exec @params.value
		if result
			max = parseFloat result[1]
			maxEqual = no
		
		result = /^\=\s?([0-9.]+)$/.exec @params.value
		if result
			min = max = parseFloat result[1]
			minEqual = maxEqual = yes
		
		if min != -Infinity
			if minEqual
				return valid(no, 'is too small') if not (value >= min)
			else return valid(no, 'is too small') if not (value > min)
		
		if max != Infinity
			if maxEqual
				return valid(no, 'is too big') if not (value <= max)
			else return valid(no, 'is too big') if not (value < max)
		
		valid yes