Worked on getting the tests to work

This commit is contained in:
Ruben Vereecken 2014-05-14 00:08:22 +02:00
parent f2f4fef1e0
commit 20af7b090a

View file

@ -1,33 +1,30 @@
LocalMongo = module.exports
#or = (list) -> _.reduce list (res, val)
LocalMongo.doQuerySelector = (value, operatorObj) ->
doQuerySelector = (value, operatorObj) ->
value = [value] unless _.isArray value # mongo works on arrays too!
for operator, body of operatorObj
switch operator
when '$gt' then return false unless value > body
when '$gte' then return false unless value >= body
when '$in' then return false unless value in body or
_.reduce value, ((result, val) -> result or val in body), false
when '$lt' then return false unless value < body
when '$lte' then return false unless value <= body
when '$ne' then return false unless value != body
when '$nin' then return false if value of body
when '$gt' then return false unless _.reduce value, ((result, val) -> result or val > body), false
when '$gte' then return false unless _.reduce value, ((result, val) -> result or val >= body), false
when '$in' then return false unless _.reduce value, ((result, val) -> result or val in body), false
when '$lt' then return false unless _.reduce value, ((result, val) -> result or val < body), false
when '$lte' then return false unless _.reduce value, ((result, val) -> result or val <= body), false
when '$ne' then return false unless _.reduce value, ((result, val) -> result or val != body), false
when '$nin' then return false if _.reduce value, ((result, val) -> result or val of body), false
true
LocalMongo.doLogicalOperator = (target, operatorObj) ->
for operator, body of operatorObj
switch operator
when '$or' then return false unless _.reduce body (res, query) -> res or matchesQuery target x
when '$and' then return false unless _.reduce body (res, query) -> res and matchesQuery target query
#when '$not' then return false if
when '$or' then return false unless _.reduce body (res, query) -> res or matchesQuery target query, false
when '$and' then return false unless _.reduce body (res, query) -> res and matchesQuery target query, true
LocalMongo.matchesQuery = (target, query) ->
for key, value of query
return false unless key of target
if typeof value != 'object'
return false unless target[key] == value or (target[key] in value if _.isArray value)
else return false unless doQuerySelector value query[key]
LocalMongo.matchesQuery = (target, queryObj) =>
for prop, query of queryObj
return false unless prop of target
if typeof query != 'object' or _.isArray query
return false unless target[prop] == query or (query in target[prop] if _.isArray target[prop])
else return false unless doQuerySelector(target[prop], query)
true