backbone-query
Advanced tools
Comparing version
@@ -1,22 +0,15 @@ | ||
/* | ||
Backbone Query - A lightweight query API for Backbone Collections | ||
(c)2012 - Dave Tonge | ||
May be freely distributed according to MIT license. | ||
*/ | ||
(function() { | ||
var array_intersection, get_cache, get_models, get_sorted_models, iterator, page_models, parse_query, process_query, sort_models, test_attr, test_query_value, | ||
__indexOf = Array.prototype.indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | ||
/* | ||
Backbone Query - A lightweight query API for Backbone Collections | ||
(c)2012 - Dave Tonge | ||
May be freely distributed according to MIT license. | ||
*/ | ||
array_intersection = function(arrays) { | ||
var rest; | ||
rest = _.rest(arrays); | ||
return _.filter(_.uniq(arrays[0]), function(item) { | ||
return _.every(rest, function(other) { | ||
return _.indexOf(other, item) >= 0; | ||
}); | ||
}); | ||
var get_cache, get_models, get_sorted_models, iterator, page_models, parse_query, perform_query, process_query, sort_models, test_model_attribute, test_query_value; | ||
var __indexOf = Array.prototype.indexOf || function(item) { | ||
for (var i = 0, l = this.length; i < l; i++) { | ||
if (this[i] === item) return i; | ||
} | ||
return -1; | ||
}; | ||
parse_query = function(raw_query) { | ||
@@ -49,3 +42,2 @@ var key, o, query_param, type, value, _results; | ||
}; | ||
test_query_value = function(type, value) { | ||
@@ -63,2 +55,3 @@ switch (type) { | ||
case "$like": | ||
case "$likeI": | ||
return _(value).isString(); | ||
@@ -73,6 +66,6 @@ case "$between": | ||
}; | ||
test_attr = function(type, value) { | ||
test_model_attribute = function(type, value) { | ||
switch (type) { | ||
case "$like": | ||
case "$likeI": | ||
case "$regex": | ||
@@ -93,7 +86,53 @@ return _(value).isString(); | ||
}; | ||
iterator = function(collection, query, andOr, filterReject) { | ||
perform_query = function(type, value, attr, model) { | ||
switch (type) { | ||
case "$equal": | ||
return attr === value; | ||
case "$contains": | ||
return __indexOf.call(attr, value) >= 0; | ||
case "$ne": | ||
return attr !== value; | ||
case "$lt": | ||
return attr < value; | ||
case "$gt": | ||
return attr > value; | ||
case "$lte": | ||
return attr <= value; | ||
case "$gte": | ||
return attr >= value; | ||
case "$between": | ||
return (value[0] < attr && attr < value[1]); | ||
case "$in": | ||
return __indexOf.call(value, attr) >= 0; | ||
case "$nin": | ||
return __indexOf.call(value, attr) < 0; | ||
case "$all": | ||
return _(attr).all(function(item) { | ||
return __indexOf.call(value, item) >= 0; | ||
}); | ||
case "$any": | ||
return _(attr).any(function(item) { | ||
return __indexOf.call(value, item) >= 0; | ||
}); | ||
case "$size": | ||
return attr.length === value; | ||
case "$exists": | ||
case "$has": | ||
return (attr != null) === value; | ||
case "$like": | ||
return attr.indexOf(value) !== -1; | ||
case "$likeI": | ||
return attr.toLowerCase().indexOf(value.toLowerCase()) !== -1; | ||
case "$regex": | ||
return value.test(attr); | ||
case "$cb": | ||
return value.call(model, attr); | ||
default: | ||
return false; | ||
} | ||
}; | ||
iterator = function(models, query, andOr, filterReject) { | ||
var parsed_query; | ||
parsed_query = parse_query(query); | ||
return collection[filterReject](function(model) { | ||
return _[filterReject](models, function(model) { | ||
var attr, q, test, _i, _len; | ||
@@ -103,49 +142,4 @@ for (_i = 0, _len = parsed_query.length; _i < _len; _i++) { | ||
attr = model.get(q.key); | ||
test = test_attr(q.type, attr); | ||
if (test) { | ||
test = ((function() { | ||
var _ref; | ||
switch (q.type) { | ||
case "$equal": | ||
return attr === q.value; | ||
case "$contains": | ||
return _ref = q.value, __indexOf.call(attr, _ref) >= 0; | ||
case "$ne": | ||
return attr !== q.value; | ||
case "$lt": | ||
return attr < q.value; | ||
case "$gt": | ||
return attr > q.value; | ||
case "$lte": | ||
return attr <= q.value; | ||
case "$gte": | ||
return attr >= q.value; | ||
case "$between": | ||
return (q.value[0] < attr && attr < q.value[1]); | ||
case "$in": | ||
return __indexOf.call(q.value, attr) >= 0; | ||
case "$nin": | ||
return __indexOf.call(q.value, attr) < 0; | ||
case "$all": | ||
return _(model.get(q.key)).all(function(item) { | ||
return __indexOf.call(q.value, item) >= 0; | ||
}); | ||
case "$any": | ||
return _(model.get(q.key)).any(function(item) { | ||
return __indexOf.call(q.value, item) >= 0; | ||
}); | ||
case "$size": | ||
return attr.length === q.value; | ||
case "$exists": | ||
case "$has": | ||
return model.has(q.key) === q.value; | ||
case "$like": | ||
return attr.indexOf(q.value) !== -1; | ||
case "$regex": | ||
return q.value.test(attr); | ||
case "$cb": | ||
return q.value.call(model, attr); | ||
} | ||
})()); | ||
} | ||
test = test_model_attribute(q.type, attr); | ||
if (test) test = perform_query(q.type, q.value, attr, model); | ||
if (andOr === test) return andOr; | ||
@@ -156,18 +150,16 @@ } | ||
}; | ||
process_query = { | ||
$and: function(collection, query) { | ||
return iterator(collection, query, false, "filter"); | ||
$and: function(models, query) { | ||
return iterator(models, query, false, "filter"); | ||
}, | ||
$or: function(collection, query) { | ||
return iterator(collection, query, true, "filter"); | ||
$or: function(models, query) { | ||
return iterator(models, query, true, "filter"); | ||
}, | ||
$nor: function(collection, query) { | ||
return iterator(collection, query, true, "reject"); | ||
$nor: function(models, query) { | ||
return iterator(models, query, true, "reject"); | ||
}, | ||
$not: function(collection, query) { | ||
return iterator(collection, query, false, "reject"); | ||
$not: function(models, query) { | ||
return iterator(models, query, false, "reject"); | ||
} | ||
}; | ||
get_cache = function(collection, query, options) { | ||
@@ -184,26 +176,15 @@ var cache, models, query_string, _ref; | ||
}; | ||
get_models = function(collection, query) { | ||
var compound_query, results, type; | ||
compound_query = _(query).chain().keys().intersection(["$or", "$and", "$nor", "$not"]).value(); | ||
switch (compound_query.length) { | ||
case 0: | ||
return process_query.$and(collection, query); | ||
case 1: | ||
type = compound_query[0]; | ||
return process_query[type](collection, query[type]); | ||
default: | ||
results = (function() { | ||
var _i, _len, _results; | ||
_results = []; | ||
for (_i = 0, _len = compound_query.length; _i < _len; _i++) { | ||
type = compound_query[_i]; | ||
_results.push(process_query[type](collection, query[type])); | ||
} | ||
return _results; | ||
})(); | ||
return array_intersection(results); | ||
var compound_query, models, reduce_iterator; | ||
compound_query = _.intersection(["$and", "$not", "$or", "$nor"], _(query).keys()); | ||
models = collection.models; | ||
if (compound_query.length === 0) { | ||
return process_query.$and(models, query); | ||
} else { | ||
reduce_iterator = function(memo, query_type) { | ||
return process_query[query_type](memo, query[query_type]); | ||
}; | ||
return _.reduce(compound_query, reduce_iterator, models); | ||
} | ||
}; | ||
get_sorted_models = function(collection, query, options) { | ||
@@ -215,3 +196,2 @@ var models; | ||
}; | ||
sort_models = function(models, options) { | ||
@@ -228,3 +208,2 @@ if (_(options.sortBy).isString()) { | ||
}; | ||
page_models = function(models, options) { | ||
@@ -247,10 +226,6 @@ var end, sliced_models, start, total_pages; | ||
}; | ||
if (typeof require !== 'undefined') { | ||
if (typeof _ === "undefined" || _ === null) _ = require('underscore'); | ||
if (typeof Backbone === "undefined" || Backbone === null) { | ||
Backbone = require('backbone'); | ||
} | ||
if (typeof Backbone === "undefined" || Backbone === null) Backbone = require('backbone'); | ||
} | ||
Backbone.QueryCollection = Backbone.Collection.extend({ | ||
@@ -268,2 +243,6 @@ query: function(query, options) { | ||
}, | ||
where: function(params, options) { | ||
if (options == null) options = {}; | ||
return new this.constructor(this.query(params, options)); | ||
}, | ||
reset_query_cache: function() { | ||
@@ -273,7 +252,3 @@ return this._query_cache = {}; | ||
}); | ||
if (typeof exports !== "undefined") { | ||
exports.QueryCollection = Backbone.QueryCollection; | ||
} | ||
if (typeof exports !== "undefined") exports.QueryCollection = Backbone.QueryCollection; | ||
}).call(this); |
@@ -1,1 +0,1 @@ | ||
((function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(b in this&&this[b]===a)return b;return-1};b=function(a){var b;return b=_.rest(a),_.filter(_.uniq(a[0]),function(a){return _.every(b,function(b){return _.indexOf(b,a)>=0})})},i=function(a){var b,c,d,e,f,g;g=[];for(b in a){d=a[b],c={key:b};if(_.isRegExp(d))c.type="$regex",c.value=d;else if(_(d).isObject())for(e in d)f=d[e],m(e,f)&&(c.type=e,c.value=f);else c.type="$equal",c.value=d;g.push(c)}return g},m=function(a,b){switch(a){case"$in":case"$nin":case"$all":case"$any":return _(b).isArray();case"$size":return _(b).isNumber();case"$regex":return _(b).isRegExp();case"$like":return _(b).isString();case"$between":return _(b).isArray()&&b.length===2;case"$cb":return _(b).isFunction();default:return!0}},l=function(a,b){switch(a){case"$like":case"$regex":return _(b).isString();case"$contains":case"$all":case"$any":return _(b).isArray();case"$size":return _(b).isArray()||_(b).isString();case"$in":case"$nin":return b!=null;default:return!0}},f=function(a,b,c){var d;return d=i(b),a.filter(function(a){var b,e,f,g,h;for(g=0,h=d.length;g<h;g++){e=d[g],b=a.get(e.key),f=l(e.type,b),f&&(f=function(){var c;switch(e.type){case"$equal":return b===e.value;case"$contains":return c=e.value,n.call(b,c)>=0;case"$ne":return b!==e.value;case"$lt":return b<e.value;case"$gt":return b>e.value;case"$lte":return b<=e.value;case"$gte":return b>=e.value;case"$between":return e.value[0]<b&&b<e.value[1];case"$in":return n.call(e.value,b)>=0;case"$nin":return n.call(e.value,b)<0;case"$all":return _(a.get(e.key)).all(function(a){return n.call(e.value,a)>=0});case"$any":return _(a.get(e.key)).any(function(a){return n.call(e.value,a)>=0});case"$size":return b.length===e.value;case"$exists":case"$has":return a.has(e.key)===e.value;case"$like":return b.indexOf(e.value)!==-1;case"$regex":return e.value.test(b);case"$cb":return e.value.call(a,b)}}());if(c===f)return c}return!c})},a=function(a,b){return f(a,b,!1)},g=function(a,b){return f(a,b,!0)},j={$and:function(b,c){return a(b,c)},$or:function(a,b){return g(a,b)},$nor:function(a,b){return _.difference(a.models,g(a,b))},$not:function(b,c){return _.difference(b.models,a(b,c))}},c=function(a,b,c){var d,f,g,h;return g=JSON.stringify(b),d=(h=a._query_cache)!=null?h:a._query_cache={},f=d[g],f||(f=e(a,b,c),d[g]=f),f},d=function(a,c){var d,e,f;d=_(c).chain().keys().intersection(["$or","$and","$nor","$not"]).value();switch(d.length){case 0:return j.$and(a,c);case 1:return f=d[0],j[f](a,c[f]);default:return e=function(){var b,e,g;g=[];for(b=0,e=d.length;b<e;b++)f=d[b],g.push(j[f](a,c[f]));return g}(),b(e)}},e=function(a,b,c){var e;return e=d(a,b),c.sortBy&&(e=k(e,c)),e},k=function(a,b){return _(b.sortBy).isString()?a=_(a).sortBy(function(a){return a.get(b.sortBy)}):_(b.sortBy).isFunction()&&(a=_(a).sortBy(b.sortBy)),b.order==="desc"&&(a=a.reverse()),a},h=function(a,b){var c,d,e,f;return b.offset?e=b.offset:b.page?e=(b.page-1)*b.limit:e=0,c=e+b.limit,d=a.slice(e,c),b.pager&&_.isFunction(b.pager)&&(f=Math.ceil(a.length/b.limit),b.pager(f,d)),d},Backbone.QueryCollection=Backbone.Collection.extend({query:function(a,b){var d;return b==null&&(b={}),b.cache?d=c(this,a,b):d=e(this,a,b),b.limit&&(d=h(d,b)),d},reset_query_cache:function(){return this._query_cache={}}})})).call(this) | ||
((function(){var a,b,c,d,e,f,g,h,i,j,k,l=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(this[b]===a)return b;return-1};f=function(a){var b,c,d,e,f,g;g=[];for(b in a){d=a[b],c={key:b};if(_.isRegExp(d))c.type="$regex",c.value=d;else if(_(d).isObject())for(e in d)f=d[e],k(e,f)&&(c.type=e,c.value=f);else c.type="$equal",c.value=d;g.push(c)}return g},k=function(a,b){switch(a){case"$in":case"$nin":case"$all":case"$any":return _(b).isArray();case"$size":return _(b).isNumber();case"$regex":return _(b).isRegExp();case"$like":case"$likeI":return _(b).isString();case"$between":return _(b).isArray()&&b.length===2;case"$cb":return _(b).isFunction();default:return!0}},j=function(a,b){switch(a){case"$like":case"$likeI":case"$regex":return _(b).isString();case"$contains":case"$all":case"$any":return _(b).isArray();case"$size":return _(b).isArray()||_(b).isString();case"$in":case"$nin":return b!=null;default:return!0}},g=function(a,b,c,d){switch(a){case"$equal":return c===b;case"$contains":return l.call(c,b)>=0;case"$ne":return c!==b;case"$lt":return c<b;case"$gt":return c>b;case"$lte":return c<=b;case"$gte":return c>=b;case"$between":return b[0]<c&&c<b[1];case"$in":return l.call(b,c)>=0;case"$nin":return l.call(b,c)<0;case"$all":return _(c).all(function(a){return l.call(b,a)>=0});case"$any":return _(c).any(function(a){return l.call(b,a)>=0});case"$size":return c.length===b;case"$exists":case"$has":return c!=null===b;case"$like":return c.indexOf(b)!==-1;case"$likeI":return c.toLowerCase().indexOf(b.toLowerCase())!==-1;case"$regex":return b.test(c);case"$cb":return b.call(d,c);default:return!1}},d=function(a,b,c,d){var e;return e=f(b),_[d](a,function(a){var b,d,f,h,i;for(h=0,i=e.length;h<i;h++){d=e[h],b=a.get(d.key),f=j(d.type,b),f&&(f=g(d.type,d.value,b,a));if(c===f)return c}return!c})},h={$and:function(a,b){return d(a,b,!1,"filter")},$or:function(a,b){return d(a,b,!0,"filter")},$nor:function(a,b){return d(a,b,!0,"reject")},$not:function(a,b){return d(a,b,!1,"reject")}},a=function(a,b,d){var e,f,g,h;return g=JSON.stringify(b),e=(h=a._query_cache)!=null?h:a._query_cache={},f=e[g],f||(f=c(a,b,d),e[g]=f),f},b=function(a,b){var c,d,e;return c=_.intersection(["$and","$not","$or","$nor"],_(b).keys()),d=a.models,c.length===0?h.$and(d,b):(e=function(a,c){return h[c](a,b[c])},_.reduce(c,e,d))},c=function(a,c,d){var e;return e=b(a,c),d.sortBy&&(e=i(e,d)),e},i=function(a,b){return _(b.sortBy).isString()?a=_(a).sortBy(function(a){return a.get(b.sortBy)}):_(b.sortBy).isFunction()&&(a=_(a).sortBy(b.sortBy)),b.order==="desc"&&(a=a.reverse()),a},e=function(a,b){var c,d,e,f;return b.offset?e=b.offset:b.page?e=(b.page-1)*b.limit:e=0,c=e+b.limit,d=a.slice(e,c),b.pager&&_.isFunction(b.pager)&&(f=Math.ceil(a.length/b.limit),b.pager(f,d)),d};if(typeof require!="undefined"){if(typeof _=="undefined"||_===null)_=require("underscore");if(typeof Backbone=="undefined"||Backbone===null)Backbone=require("backbone")}Backbone.QueryCollection=Backbone.Collection.extend({query:function(b,d){var f;return d==null&&(d={}),d.cache?f=a(this,b,d):f=c(this,b,d),d.limit&&(f=e(f,d)),f},where:function(a,b){return b==null&&(b={}),new this.constructor(this.query(a,b))},reset_query_cache:function(){return this._query_cache={}}}),typeof exports!="undefined"&&(exports.QueryCollection=Backbone.QueryCollection)})).call(this) |
{ | ||
"name": "backbone-query" | ||
, "description": "Lightweight Query API for Backbone Collections" | ||
, "version": "0.1.1" | ||
, "version": "0.1.2" | ||
, "author": "Dave Tonge <dave@simplecreativity.co.uk> (https://github.com/davidgtonge)" | ||
@@ -6,0 +6,0 @@ , "tags": ["backbone", "underscore", "mongo", "query"] |
backbone-query | ||
=================== | ||
.. |travis_status| image:: https://secure.travis-ci.org/davidgtonge/backbone_query.png | ||
:target: http://travis-ci.org/davidgtonge/backbone_query | ||
[](http://travis-ci.org/davidgtonge/backbone_query) | ||
@@ -16,13 +15,21 @@ A lightweight (3KB minified) utility for Backbone projects, that works in the Browser and on the Server. | ||
.. Client Side Installation: | ||
#### Client Side Installation: | ||
To install, include the `js/backbone-query.min.js` file in your HTML page, after Backbone and it's dependencies. | ||
Then extend your collections from Backbone.QueryCollection rather than from Backbone.Collection. | ||
.. Server side (node.js) installation | ||
#### Server side (node.js) installation | ||
You can install with NPM: `npm install backbone-query` | ||
Then simply require in your project: `QueryCollection = require("backbone-query").QueryCollection` | ||
Your collections will now have a `query` method that can be used like this: | ||
Your collections will now have two new methods: `query` and `where`. Both methods accept 2 arguments - | ||
a query object and an options object. The `query` method returns an array of models, but the `where` method | ||
returns a new collection and is therefore useful where you would like to chain multiple collection | ||
methods / where queries. The following are some basic examples: | ||
```js | ||
MyCollection.query({ {featured:true}, {likes: $gt:10} )}; | ||
MyCollection.query({ | ||
featured:true, | ||
likes: {$gt:10} | ||
}); | ||
// Returns all models where the featured attribute is true and there are | ||
@@ -43,3 +50,4 @@ // more than 10 likes | ||
title: {$like: "news"}, // Title attribute contains the string "news" | ||
likes: {$gt: 10}}, // Likes attribute is greater than 10 | ||
likes: {$gt: 10} | ||
}, // Likes attribute is greater than 10 | ||
@@ -49,4 +57,5 @@ // Models must match one of these queries | ||
featured: true, // Featured attribute is true | ||
category:{$in:["code","programming","javascript"]}} | ||
//Category attribute is either "code", "programming", or "javascript" | ||
category:{$in:["code","programming","javascript"]} | ||
} | ||
//Category attribute is either "code", "programming", or "javascript" | ||
}); | ||
@@ -68,2 +77,13 @@ ``` | ||
Another CoffeeScript example, this time using `where` rather than `query` | ||
```coffeescript | ||
query = | ||
$likes: $lt: 10 | ||
$downloads: $gt: 20 | ||
MyCollection.where(query).my_custom_collection_method() | ||
``` | ||
Query API | ||
@@ -181,6 +201,15 @@ === | ||
MyCollection.query({ title: {$like: "Test" } }); | ||
//Returns all models which have a "title" attribute what | ||
//Returns all models which have a "title" attribute that | ||
//contains the string "Test", e.g. "Testing", "Tests", "Test", etc. | ||
``` | ||
### $likeI | ||
The same as above but performs a case insensitive search using indexOf and toLowerCase (still faster than Regex) | ||
```js | ||
MyCollection.query({ title: {$likeI: "Test" } }); | ||
//Returns all models which have a "title" attribute that | ||
//contains the string "Test", "test", "tEst","tesT", etc. | ||
``` | ||
### $regex | ||
@@ -187,0 +216,0 @@ Checks if the model attribute matches the supplied regular expression. The regex query can be supplied without the `$regex` keyword |
(function() { | ||
var QueryCollection, create, equals; | ||
if (typeof require !== "undefined") { | ||
@@ -9,5 +8,3 @@ QueryCollection = require("../js/backbone-query.js").QueryCollection; | ||
} | ||
equals = []; | ||
if (typeof test === "undefined" || test === null) { | ||
@@ -27,3 +24,2 @@ test = function(name, test_cb) { | ||
} | ||
if (typeof equal === "undefined" || equal === null) { | ||
@@ -34,3 +30,2 @@ equal = function(real, expected) { | ||
} | ||
create = function() { | ||
@@ -58,3 +53,2 @@ return new QueryCollection([ | ||
}; | ||
test("Simple equals query", function() { | ||
@@ -69,3 +63,2 @@ var a, result; | ||
}); | ||
test("Simple equals query (no results)", function() { | ||
@@ -79,3 +72,2 @@ var a, result; | ||
}); | ||
test("Simple equals query with explicit $equal", function() { | ||
@@ -92,3 +84,2 @@ var a, result; | ||
}); | ||
test("$contains operator", function() { | ||
@@ -104,3 +95,2 @@ var a, result; | ||
}); | ||
test("$ne operator", function() { | ||
@@ -116,3 +106,2 @@ var a, result; | ||
}); | ||
test("$lt operator", function() { | ||
@@ -129,3 +118,2 @@ var a, result; | ||
}); | ||
test("$lte operator", function() { | ||
@@ -141,3 +129,2 @@ var a, result; | ||
}); | ||
test("$gt operator", function() { | ||
@@ -154,3 +141,2 @@ var a, result; | ||
}); | ||
test("$gte operator", function() { | ||
@@ -166,3 +152,2 @@ var a, result; | ||
}); | ||
test("$between operator", function() { | ||
@@ -179,3 +164,2 @@ var a, result; | ||
}); | ||
test("$in operator", function() { | ||
@@ -191,3 +175,2 @@ var a, result; | ||
}); | ||
test("$in operator with wrong query value", function() { | ||
@@ -201,5 +184,4 @@ var a, result; | ||
}); | ||
return equal(result.length, 3); | ||
return equal(result.length, 0); | ||
}); | ||
test("$nin operator", function() { | ||
@@ -216,3 +198,2 @@ var a, result; | ||
}); | ||
test("$all operator", function() { | ||
@@ -228,3 +209,2 @@ var a, result; | ||
}); | ||
test("$all operator (wrong values)", function() { | ||
@@ -244,5 +224,4 @@ var a, result; | ||
}); | ||
return equal(result.length, 3); | ||
return equal(result.length, 0); | ||
}); | ||
test("$any operator", function() { | ||
@@ -264,3 +243,2 @@ var a, result; | ||
}); | ||
test("$size operator", function() { | ||
@@ -277,3 +255,2 @@ var a, result; | ||
}); | ||
test("$exists operator", function() { | ||
@@ -289,3 +266,2 @@ var a, result; | ||
}); | ||
test("$has operator", function() { | ||
@@ -302,3 +278,2 @@ var a, result; | ||
}); | ||
test("$like operator", function() { | ||
@@ -315,3 +290,2 @@ var a, result; | ||
}); | ||
test("$like operator 2", function() { | ||
@@ -327,3 +301,18 @@ var a, result; | ||
}); | ||
test("$likeI operator", function() { | ||
var a, result; | ||
a = create(); | ||
result = a.query({ | ||
content: { | ||
$likeI: "dummy" | ||
} | ||
}); | ||
equal(result.length, 3); | ||
result = a.query({ | ||
content: { | ||
$like: "dummy" | ||
} | ||
}); | ||
return equal(result.length, 1); | ||
}); | ||
test("$regex", function() { | ||
@@ -340,3 +329,2 @@ var a, result; | ||
}); | ||
test("$regex2", function() { | ||
@@ -352,3 +340,2 @@ var a, result; | ||
}); | ||
test("$regex3", function() { | ||
@@ -364,3 +351,2 @@ var a, result; | ||
}); | ||
test("$regex4", function() { | ||
@@ -374,3 +360,2 @@ var a, result; | ||
}); | ||
test("$cb - callback", function() { | ||
@@ -389,3 +374,2 @@ var a, result; | ||
}); | ||
test("$cb - callback - checking 'this' is the model", function() { | ||
@@ -404,3 +388,2 @@ var a, result; | ||
}); | ||
test("$and operator", function() { | ||
@@ -420,3 +403,2 @@ var a, result; | ||
}); | ||
test("$and operator (explicit)", function() { | ||
@@ -438,3 +420,2 @@ var a, result; | ||
}); | ||
test("$or operator", function() { | ||
@@ -455,3 +436,2 @@ var a, result; | ||
}); | ||
test("$nor operator", function() { | ||
@@ -473,3 +453,2 @@ var a, result; | ||
}); | ||
test("Compound Queries", function() { | ||
@@ -517,3 +496,2 @@ var a, result; | ||
}); | ||
test("Limit", function() { | ||
@@ -531,3 +509,2 @@ var a, result; | ||
}); | ||
test("Offset", function() { | ||
@@ -546,3 +523,2 @@ var a, result; | ||
}); | ||
test("Page", function() { | ||
@@ -561,3 +537,2 @@ var a, result; | ||
}); | ||
test("Sorder by model key", function() { | ||
@@ -578,3 +553,2 @@ var a, result; | ||
}); | ||
test("Sorder by model key with descending order", function() { | ||
@@ -596,3 +570,2 @@ var a, result; | ||
}); | ||
test("Sorder by function", function() { | ||
@@ -615,3 +588,2 @@ var a, result; | ||
}); | ||
test("cache", function() { | ||
@@ -665,3 +637,2 @@ var a, result; | ||
}); | ||
test("cache with multiple collections", function() { | ||
@@ -748,3 +719,2 @@ var a, a_result, b, b_result; | ||
}); | ||
test("null attribute with various operators", function() { | ||
@@ -802,3 +772,13 @@ var a, result; | ||
}); | ||
test("Where method", function() { | ||
var a, result; | ||
a = create(); | ||
result = a.where({ | ||
likes: { | ||
$gt: 5 | ||
} | ||
}); | ||
equal(result.length, 2); | ||
return equal(result.models.length, result.length); | ||
}); | ||
}).call(this); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
223260
0.8%2856
0.63%404
7.73%4
33.33%