all files / src/ numericality.js

100% Statements 38/38
100% Branches 50/50
100% Functions 3/3
100% Lines 34/34
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72                                             44× 44×   44× 44× 44× 44× 44× 44× 44×   44× 106× 16×   90×   88×   82×   76×   70×   64×   58×   52×   47×            
import Validators from './validators'
import { prepareMsg, prepare, isNumber, selectNum, trunc, memoize } from './helpers'
 
let numericality = memoize(function ({
  int,
  integer,
  even,
  odd,
  '=': equal,
  equalTo,
  '!=': diff,
  otherThan,
  '>': greater,
  greaterThan,
  '<': less,
  lessThan,
  '>=': greaterOrEqual,
  greaterThanOrEqualTo,
  '<=': lessOrEqual,
  lessThanOrEqualTo,
  message,
  msg,
  if: ifCond,
  unless,
  allowBlank
} = {}) {
  msg = msg || message
 
  int = int || integer
  equal = selectNum(equal, equalTo)
  diff = selectNum(diff, otherThan)
  greater = selectNum(greater, greaterThan)
  greaterOrEqual = selectNum(greaterOrEqual, greaterThanOrEqualTo)
  less = selectNum(less, lessThan)
  lessOrEqual = selectNum(lessOrEqual, lessThanOrEqualTo)
 
  return prepare(ifCond, unless, allowBlank, function (value) {
    if (!isNumber(value)) {
      return Validators.formatMessage(prepareMsg(msg, 'notANumber'))
    }
    if (int && +value % 1) {
      return Validators.formatMessage(prepareMsg(msg, 'notAnInteger'))
    }
    if (equal !== null && +value !== equal) {
      return Validators.formatMessage(prepareMsg(msg, 'equalTo', { count: equal }))
    }
    if (diff !== null && +value === diff) {
      return Validators.formatMessage(prepareMsg(msg, 'otherThan', { count: diff }))
    }
    if (greater !== null && +value <= greater) {
      return Validators.formatMessage(prepareMsg(msg, 'greaterThan', { count: greater }))
    }
    if (greaterOrEqual !== null && +value < greaterOrEqual) {
      return Validators.formatMessage(prepareMsg(msg, 'greaterThanOrEqualTo', { count: greaterOrEqual }))
    }
    if (less !== null && +value >= less) {
      return Validators.formatMessage(prepareMsg(msg, 'lessThan', { count: less }))
    }
    if (lessOrEqual !== null && +value > lessOrEqual) {
      return Validators.formatMessage(prepareMsg(msg, 'lessThanOrEqualTo', { count: lessOrEqual }))
    }
    if (even && trunc(+value) % 2) {
      return Validators.formatMessage(prepareMsg(msg, 'even'))
    }
    if (odd && !(trunc(+value) % 2)) {
      return Validators.formatMessage(prepareMsg(msg, 'odd'))
    }
  })
})
 
export default numericality