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