bevry / query-engine

QueryEngine provides extensive Querying, Filtering, and Searching abilities for Backbone.js Collections as well as JavaScript arrays and objects
http://bevry.github.io/query-engine/
Other
328 stars 34 forks source link

$has queries break if test value coerces to/is false #17

Closed andrewjshults closed 12 years ago

andrewjshults commented 12 years ago

It looks like util.toArray converts false to [] rather than [false], so the Hash.hasIn test fails because the CS version gets converted to if(value) (line 127 of query-engine.coffee, line 91 of query-engine.js). It seems like this should test to see if the value isn't undefined rather than coercible to true, since false, 0, and '' may be valid tests (false is in my case).

I added a test specifically for this and it looks like all the other tests are still passing, but since I'm just getting started with this project wasn't sure if there are any other areas I should poke around to make sure I didn't break anything.

Cheers! Andrew

balupton commented 12 years ago

Sweet :) Will merge that now.

One thing to note is that this change will also add support for null in the same way support for false was added. Not sure this is a good idea or not, as null is generally regarded as undefined. So for now, I'll just change the if valueExists checks to if value? to avoid the risk of breaking things. When someone complains, will be happy to change it back to the undefined check :)

andrewjshults commented 12 years ago

Makes sense - while I can see the use case for wanting to test to see if an array has a null element, I think that'd be better left as a comment on the $has test (with instructions on how to enable it), since I see it causing more confusion as the default.

balupton commented 12 years ago

Sorry for the very long delay on this. Just got published to v1.3.1. Thanks!