mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-17 08:50:58 -05:00
Worked on getting the tests to work
This commit is contained in:
parent
f2f4fef1e0
commit
20af7b090a
1 changed files with 17 additions and 20 deletions
|
@ -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
|
Loading…
Reference in a new issue