all files / src/ length.js

100% Statements 26/26
100% Branches 37/37
100% Functions 3/3
100% Lines 21/21
1 branch Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39                   29× 29×   29× 29× 29× 29× 29×     29× 33× 11×   22×   16×          
import messages from './messages'
import Validators from './index'
import { toObjectMsg, addMsgValues, prepare, isNumber, memoize } from './helpers'
 
 
let length = memoize(function ({
      '=': equal, is,
      max, maximum,
      min, minimum,
      'in': range, within,
      message, msg,
      'if': ifCond, unless,
      allowBlank
    }) {
  msg   = toObjectMsg(msg || message)
 
  equal = isNumber(equal) ? equal : is
  min   = isNumber(min)   ? min   : minimum
  max   = isNumber(max)   ? max   : maximum
  range = range || within
  if (range && isNumber(range[0]) && isNumber(range[1])) {
    min = range[0]
    max = range[1]
  }
 
  return prepare(ifCond, unless, allowBlank, function (value) {
    if (isNumber(equal) && value.length !== +equal) {
      return Validators.formatMessage(msg || addMsgValues(messages.wrongLength, { count: equal }))
    }
    if (isNumber(max) && value.length > +max) {
      return Validators.formatMessage(msg || addMsgValues(messages.tooLong, { count: max }))
    }
    if (isNumber(min) && value.length < +min) {
      return Validators.formatMessage(msg || addMsgValues(messages.tooShort, { count: min }))
    }
  })
})
 
export default length