underarm
Version:
Transducers for JavaScript with Underscore API and Async extensions
81 lines (72 loc) • 1.57 kB
JavaScript
// Based on Underscore.js 1.7.0
// http://underscorejs.org
//
// Which is distributed under MIT License:
// Underscore.js > (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
// Underscore.js > Underscore may be freely distributed under the MIT license.
var util = require('./util-internal'),
isFunction = util.isFunction,
isArray = util.isArray,
isString = util.isString,
isNumber = util.isNumber,
identity = util.identity
module.exports = function(_r){
var _ = _r._ || {}
_r._ = _
_.iteratee = iteratee
_.matches = matches
_.property = property
}
function iteratee(value){
var f
if(isNull(value)){
f = identity
} else if(isFunction(value)){
f = value
} else if(isKey(value)){
f = property(value)
} else {
f = matches(value)
}
return f
}
function property(key){
return function(value){
return value[key]
}
}
function matches(attrs){
var ps = pairs(attrs),
len = ps.length
return function(value){
if(isNull(value)){
return len === 0
}
var i = 0, p, k, v
for(; i < len; i++){
p = ps[i]
k = p[0]
v = p[1]
if(v !== value[k] || !(k in value)){
return false
}
}
return true
}
}
function isNull(value){
return value === void 0 || value === null
}
function isKey(value){
return isString(value) || isNumber(value)
}
function pairs(value){
var key, ps = []
for(key in value){
if(value.hasOwnProperty(key)){
ps.push([key, value[key]])
}
}
return ps
}