import _ from 'underScore'
import Utils from '../lib/utils.js'
function uniqueString(len) {
return Math.random().toString(36).slice(2, len + 2)
}
console.log( uniqueString(10))
function uniqueString1(prefix) {
return [prefix, new Date().getTime()].join('')
}
console.log( uniqueString1('hello'))
function uniqueString2(start) {
let count = isNaN(start) ? 0 : start
return function(prefix) {
return [prefix, count++].join('')
}
}
let id = uniqueString2()
console.log(id('h'))
console.log(id('h'))
console.log(id('h'))
let ary = [1,2,3,null,4]
console.log(_.reduce(ary, (total, n) => total * n))
function fNull(fun, ...defaults) {
return function() {
let args = _.map(arguments, function(e, i) {
return Utils.existy(e) ? e : defaults[i]
})
return fun.apply(null, args)
}
}
let safeMult = fNull((total, n) => total * n, 0, 1)
console.log(_.reduce(ary, safeMult))
function defaults(d) {
return function(o, k) {
let val = fNull(_.identity, d[k])
return o && val(o[k])
}
}
function getCritical(config) {
let lookup = defaults({critical: 108})
return lookup(config, 'critical')
}
console.log(getCritical({critical: 9}))
console.log(getCritical({}))
function checker (...validator) {
return function(obj) {
return validator.reduce((errs, check) => {
if(check(obj)) {
return errs
} else {
return _.chain(errs).push(check.message).value()
}
}, [])
}
}
let alwaysPasses = checker(Utils.k(true), Utils.k(true))
console.log('alwaysPasses', alwaysPasses({}))
let fail = Utils.k(false)
fail.message = 'a fail in life'
let alwaysFail = checker(fail)
console.log(alwaysFail({}))
function validator(message, fun) {
let f = function(...args) {
return fun.apply(fun, args)
}
f['message'] = message
return f
}
let checkAuth = checker(validator('hasAuth', e => {console.log(e); return true}))
console.log(checkAuth(0))
function aMap(obj) {
return _.isObject(obj)
}
let checkMap = checker(validator('must be a map', aMap))
console.log('checkMap({})', checkMap({}))
console.log('checkMap(123)', checkMap(123))
function hasKeys(...keys) {
let fun = function(obj) {
return keys.every(k => _.has(obj, k))
}
fun.message = Utils.cat(['Must have values for keys:'], keys).join(' ')
return fun
}
let checkCommand = checker(validator('Must be a map', aMap), hasKeys('msg', 'type'))
console.log(checkCommand({msg: 'ok', type: 'success'}))
console.log( checkCommand(32) )
console.log( checkCommand({}) )