all files / src/ inclusion.js

100% Statements 28/28
100% Branches 26/26
100% Functions 6/6
100% Lines 23/23
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         22×     21×               43× 43×   43×   43× 55×     43× 31×   31× 16× 10×     15× 10×        
import React from 'react'
import { FormattedMessage } from 'react-intl'
import { formatMessage, prepare, DEFAULT_ALLOW_BLANK } from './helpers'
 
 
const DEFAULT_CASE_SENSITIVE = true
 
 
export function inclusion (options) {
  return inclusionExclusion(true, options)
}
 
export function exclusion (options) {
  return inclusionExclusion(false, options)
}
 
function inclusionExclusion (inclusion, {
      'in': inc, within,
      caseSensitive,
      message, msg,
      'if': ifCond, unless,
      allowBlank=DEFAULT_ALLOW_BLANK
    }) {
  msg = formatMessage(msg || message)
 
  caseSensitive = (null != caseSensitive ? caseSensitive : DEFAULT_CASE_SENSITIVE)
 
  within = [].concat(within || inc).map(function(val) {
    return caseSensitive ? ('' + val) : ('' + val).toLowerCase()
  })
 
  return prepare(ifCond, unless, allowBlank, function (value) {
    if (!caseSensitive) {
      value = value.toLowerCase()
    }
    if (inclusion) {
      if (within.indexOf(value) < 0) {
        return msg || (<FormattedMessage id="form.errors.inclusion" defaultMessage="is not included in the list" />)
      }
    } else {
      if (within.indexOf(value) >= 0) {
        return msg || (<FormattedMessage id="form.errors.exclusion" defaultMessage="is reserved" />)
      }
    }
  })
}