coffee-toaster
Version:
Minimalist build system for CoffeeScript.
83 lines (58 loc) • 1.92 kB
text/coffeescript
class ArrayUtil
:(source, search, by_property)->
if !by_property
for v, k in source
return {item: v, index: k} if v == search
else
by_property = [].concat by_property
for v, k in source
for p in by_property
return {item: v, index: k} if search == v[p]
return null
:(source, search, by_property, regexp, unique)->
_output = []
_unique = {}
if by_property is null
for v, k in source
if regexp
item = {item: v, index: k} if search.test v
else
item = {item: v, index: k} if search == v
_output.push item if item
else
by_property = [].concat by_property
for v, k in source
for p in by_property
item = null
if regexp
if search.test v[p]
if unique && !_unique[k]
item = {item: v, index: k}
else if unique is not true
item = {item: v, index: k}
else
if search == v[p]
item = {item: v, index: k}
if item
_unique[k] = true
_output.push item
return _output
:(a = [], b = [], by_property)->
diff = []
for item in a
search = if by_property? then item[by_property] else item
if !ArrayUtil.has b, search, by_property
diff.push {item:item, action:"deleted"}
for item in b
search = if by_property? then item[by_property] else item
if !ArrayUtil.has a, search, by_property
diff.push {item:item, action:"created"}
diff
:(source, search, by_property)->
return ArrayUtil.find( source, search, by_property )?
:( src, index, items )->
items = [].concat items
src.splice index, 1
while items.length
src.splice index++, 0, items.shift()
src