diff --git a/README.md b/README.md index a3a7eab..d66714f 100644 --- a/README.md +++ b/README.md @@ -21,18 +21,21 @@ user.limit(10).fetch(); ``` ```JavaScript +// Fetch User model and include related role and organization var user = new User({'id': 1}); -user.include('role', 'organization').fetch(); +user.includeRelated('role', 'organization').fetch(); ``` ```JavaScript -var user = new User({'id': 1}); -user.where({ +// Fetch User models when user's role is editor or author +var users = new UserCollection(); +users.when({ role: ['editor', 'author'] }).fetch(); ``` ```JavaScript +// Fetch 10 User models that are on the var users = new UserCollection(); users.limit(10).skip(2).fetch(); ``` diff --git a/dist/backbone.querybuilder.min.js b/dist/backbone.querybuilder.min.js index 89561e6..2379cb6 100644 --- a/dist/backbone.querybuilder.min.js +++ b/dist/backbone.querybuilder.min.js @@ -1 +1 @@ -/*! backbone.includes - v0.1.1 - 2014-03-24 */(function(e,t){"use strict";if("function"==typeof define&&define.amd)define(["backbone","underscore"],function(e,r){return t(e,r)});else if("undefined"!=typeof exports){var r=require("underscore"),i=require("backbone");module.exports=t(i,r)}else e.querybuilder=t(e.Backbone,e._)})(this,function(e,t){"use strict";var r={provider:null,setProvider:function(e){this.provider=e}},i={include:function(){var e=[].slice.call(arguments),r=[];return t.each(e,function(e){r.push({field:e})}),this._rbQueryData=this._rbQueryData||{},this._rbQueryData.include=r,this},where:function(e){var r=[];return t.each(e,function(e,i){"string"==typeof e||"number"==typeof e?r.push({field:i,operator:"=",value:e}):"[object Array]"===toString.call(e)?r.push({field:i,operator:"in",value:e}):"object"==typeof e&&r.push({field:i,operator:t.keys(e)[0],value:t.values(e)[0]})}),this._rbQueryData=this._rbQueryData||{},this._rbQueryData.where=r,this},limit:function(e){return this._rbQueryData=this._rbQueryData||{},this._rbQueryData.limit=e,this},skip:function(e){return this._rbQueryData=this._rbQueryData||{},this._rbQueryData.skip=e,this},sortBy:function(e,r){var i,a;return"string"==typeof e?(i=e,a=r||"asc"):"object"==typeof e&&(i=t.keys(e)[0],a=t.values(e)[0]),this._rbQueryData=this._rbQueryData||{},this._rbQueryData.sortBy=this._rbQueryData.sortBy||[],this._rbQueryData.sortBy.push({field:i,direction:a}),this},sync:function(i,a,u){var s=r.provider.getFields(this._rbQueryData);return this._rbQueryData={},u.data=t.extend(s,u.data||{}),e.sync.call(this,i,a,u)}};return t.extend(e.Model.prototype,i),t.extend(e.Collection.prototype,i),r}); \ No newline at end of file +/*! backbone.includes - v0.1.1 - 2014-03-26 */(function(e,r){"use strict";if("function"==typeof define&&define.amd)define(["backbone","underscore"],function(e,t){return r(e,t)});else if("undefined"!=typeof exports){var t=require("underscore"),i=require("backbone");module.exports=r(i,t)}else e.querybuilder=r(e.Backbone,e._)})(this,function(e,r){"use strict";var t={provider:null,setProvider:function(t){this.provider=t,r.extend(e.Model.prototype,i),r.extend(e.Collection.prototype,i)}},i={include:function(){var e=[].slice.call(arguments),t=[];return r.each(e,function(e){t.push({field:e})}),this._rbQueryData=this._rbQueryData||{},this._rbQueryData.include=t,this},when:function(e){var t=[];return r.each(e,function(e,i){"string"==typeof e||"number"==typeof e?t.push({field:i,operator:"=",value:e}):"[object Array]"===toString.call(e)?t.push({field:i,operator:"in",value:e}):"object"==typeof e&&t.push({field:i,operator:r.keys(e)[0],value:r.values(e)[0]})}),this._rbQueryData=this._rbQueryData||{},this._rbQueryData.when=t,this},limit:function(e){return this._rbQueryData=this._rbQueryData||{},this._rbQueryData.limit=e,this},skip:function(e){return this._rbQueryData=this._rbQueryData||{},this._rbQueryData.skip=e,this},orderBy:function(e,t){var i,a;return"string"==typeof e?(i=e,a=t||"asc"):"object"==typeof e&&(i=r.keys(e)[0],a=r.values(e)[0]),this._rbQueryData=this._rbQueryData||{},this._rbQueryData.orderBy=this._rbQueryData.orderBy||[],this._rbQueryData.orderBy.push({field:i,direction:a}),this},sync:function(i,a,u){var n=t.provider.getFields(this._rbQueryData);return this._rbQueryData={},u.data=r.extend(n,u.data||{}),e.sync.call(this,i,a,u)}};return t}); \ No newline at end of file diff --git a/src/backbone.querybuilder.js b/src/backbone.querybuilder.js index bd77d80..3ec9ffe 100644 --- a/src/backbone.querybuilder.js +++ b/src/backbone.querybuilder.js @@ -27,8 +27,18 @@ var QueryBuilder = { provider: null, + + /* + * When provider is set then update Backbone Model and Collection prototypes + * to have new querybuilder methods. + */ setProvider: function (provider) { this.provider = provider; + _.extend(Backbone.Model.prototype, QueryBuilderMixin); + _.extend(Backbone.Collection.prototype, QueryBuilderMixin); + }, + getMixin: function () { + return QueryBuilderMixin; } }; @@ -37,25 +47,25 @@ * Includes additional related objects with the returned data * * @example - * this.model.include('role', 'organization') - * this.model.include('organization.owner') + * this.model.includeRelated('role', 'organization') + * this.model.includeRelated('organization.owner') * this.model.incldue('organization.owner.role', 'organization.staff') * - * @method include + * @method includeRelated * @return {object} Reference to current object */ - include: function () { + includeRelated: function () { var options = [].slice.call(arguments), - includeData = []; + includeRelatedData = []; - _.each(options, function (includeItem) { - includeData.push({ - field: includeItem + _.each(options, function (includeRelatedItem) { + includeRelatedData.push({ + field: includeRelatedItem }); }); this._rbQueryData = this._rbQueryData || {}; - this._rbQueryData['include'] = includeData; + this._rbQueryData['includeRelated'] = includeRelatedData; return this; }, @@ -64,36 +74,36 @@ * Includes additional related objects with the returned data * * @example - * this.model.where({ + * this.model.when({ * role: { * '=': 'editor' * } * }) - * this.model.include('organization.owner') + * this.model.includeRelated('organization.owner') * this.model.incldue('organization.owner.role', 'organization.staff') * - * @method where + * @method when * @param {object} options used to build the queries * @return {object} Reference to current object */ - where: function (options) { - var whereData = []; + when: function (options) { + var whenData = []; _.each(options, function (value, key) { if (typeof value === 'string' || typeof value === "number") { - whereData.push({ + whenData.push({ field: key, operator: '=', value: value }); } else if (toString.call(value) === '[object Array]') { - whereData.push({ + whenData.push({ field: key, operator: 'in', value: value }); } else if (typeof value === 'object') { - whereData.push({ + whenData.push({ field: key, operator: _.keys(value)[0], value: _.values(value)[0] @@ -102,7 +112,7 @@ }); this._rbQueryData = this._rbQueryData || {}; - this._rbQueryData['where'] = whereData; + this._rbQueryData['when'] = whenData; return this; }, @@ -111,8 +121,8 @@ * Includes additional related objects with the returned data * * @example - * this.model.include('role', 'organization') - * this.model.include('organization.owner') + * this.model.includeRelatedRelated('role', 'organization') + * this.model.includeRelated('organization.owner') * this.model.incldue('organization.owner.role', 'organization.staff') * * @method limit @@ -129,8 +139,8 @@ * Includes additional related objects with the returned data * * @example - * this.model.include('role', 'organization') - * this.model.include('organization.owner') + * this.model.includeRelated('role', 'organization') + * this.model.includeRelated('organization.owner') * this.model.incldue('organization.owner.role', 'organization.staff') * * @method skip @@ -148,14 +158,14 @@ * can be called multiple times for each additonal sort item. * * @example - * this.model.include('role', 'organization') - * this.model.include('organization.owner') + * this.model.includeRelated('role', 'organization') + * this.model.includeRelated('organization.owner') * this.model.incldue('organization.owner.role', 'organization.staff') * - * @method sortBy + * @method orderBy * @return {object} Reference to current object */ - sortBy: function (options, order) { + orderBy: function (options, order) { var fieldName, direction; @@ -168,8 +178,8 @@ } this._rbQueryData = this._rbQueryData || {}; - this._rbQueryData['sortBy'] = this._rbQueryData['sortBy'] || []; - this._rbQueryData['sortBy'].push({ + this._rbQueryData['orderBy'] = this._rbQueryData['orderBy'] || []; + this._rbQueryData['orderBy'].push({ field: fieldName, direction: direction }); @@ -178,7 +188,7 @@ }, /** - * Overrides backbone sync to include data built by methods + * Overrides backbone sync to includeRelated data built by methods */ sync: function (method, item, options) { var queryFields = QueryBuilder.provider.getFields(this._rbQueryData); @@ -192,8 +202,5 @@ } }; - _.extend(Backbone.Model.prototype, QueryBuilderMixin); - _.extend(Backbone.Collection.prototype, QueryBuilderMixin); - return QueryBuilder; })); \ No newline at end of file diff --git a/src/earthling.dataprovider.js b/src/earthling.dataprovider.js index c3323c5..af266c0 100644 --- a/src/earthling.dataprovider.js +++ b/src/earthling.dataprovider.js @@ -25,18 +25,18 @@ "use strict"; var conversionMethods = { - include: function (queryData) { - var includeFields = _.map(queryData['include'], function (obj) { + includeRelated: function (queryData) { + var includeRelatedFields = _.map(queryData['includeRelated'], function (obj) { return _.values(obj)[0]; }); return { - 'with': includeFields.join() + 'with': includeRelatedFields.join() }; }, - where: function (queryData) { - var whereData = {}, + when: function (queryData) { + var whenData = {}, comparisons = { '=': 'eq', '>': 'gt', @@ -45,16 +45,16 @@ 'like': 'like' }; - _.each(queryData['where'], function (item) { + _.each(queryData['when'], function (item) { if (comparisons[item.operator]) { - whereData[item.field] = comparisons[item.operator] + ':' + item.value; + whenData[item.field] = comparisons[item.operator] + ':' + item.value; } else { - whereData[item.field] = item.value; + whenData[item.field] = item.value; } }); - return whereData; + return whenData; }, limit: function (queryData) { @@ -70,14 +70,14 @@ }; }, - sortBy: function (queryData) { - var sortByData = _.map(queryData['sortBy'], function (item) { + orderBy: function (queryData) { + var orderByData = _.map(queryData['orderBy'], function (item) { var direction = (item.direction === 'asc') ? '' : '-'; return direction + item.field; }); return { - orderBy: sortByData.join() + orderBy: orderByData.join() }; } }; diff --git a/test/index.html b/test/index.html index 0635237..68e7e64 100644 --- a/test/index.html +++ b/test/index.html @@ -11,10 +11,13 @@ + + + diff --git a/test/spec/backbone-compatibility.js b/test/spec/backbone-compatibility.js new file mode 100644 index 0000000..5cdcc4f --- /dev/null +++ b/test/spec/backbone-compatibility.js @@ -0,0 +1,71 @@ +/* global test, module, ok */ +(function (Backbone, _, querybuilder) { + "use strict"; + + var user, + users, + User, + UserCollection, + bbMixin = querybuilder.getMixin(), + expectedCollisions = ['sync']; + + module("Backbone Mixin", { + setup: function() { + User = Backbone.Model.extend({ + urlRoot: '/api/user' + }); + + UserCollection = Backbone.Collection.extend({ + model: User, + url: '/api/user' + }); + } + }); + + test("Backbone Model: unexpected method collisions", _.keys(bbMixin).length - expectedCollisions.length, function () { + var prop; + user = new User(); + + _.indexOf(expectedCollisions, prop); + + for (prop in bbMixin) { + if (_.indexOf(expectedCollisions, prop) !== -1) { + continue; + } + + ok(typeof user[prop] === 'undefined', 'Backbone.Model already has method ' + prop); + } + }); + + test("Backbone Model: expected method collisions", expectedCollisions.length, function () { + var i = 0; + user = new User(); + + for (; i < expectedCollisions.length; i++) { + ok(expectedCollisions[i] !== 'undefined', 'Backbone.Model does not have method ' + expectedCollisions[i]); + } + }); + + test("Backbone Collection: unexpected method collisions", _.keys(bbMixin).length - expectedCollisions.length, function () { + var prop; + users = new UserCollection(); + + for (prop in bbMixin) { + if (_.indexOf(expectedCollisions, prop) !== -1) { + continue; + } + + ok(typeof users[prop] === 'undefined', 'Backbone.Collection already has method ' + prop); + } + }); + + test("Backbone Collection: expected method collisions", expectedCollisions.length, function () { + var i = 0; + users = new UserCollection(); + + for (; i < expectedCollisions.length; i++) { + ok(expectedCollisions[i] !== 'undefined', 'Backbone.Model does not have method ' + expectedCollisions[i]); + } + }); + +})(window.Backbone, window._, window.querybuilder); \ No newline at end of file diff --git a/test/spec/earthling.provider.js b/test/spec/earthling.provider.js index 07df455..0869f2d 100644 --- a/test/spec/earthling.provider.js +++ b/test/spec/earthling.provider.js @@ -1,5 +1,5 @@ /* global test, module, sinon, equal */ -(function (Backbone, _) { +(function (Backbone, _, querybuilder, earthlingDataProvider) { "use strict"; var server, @@ -34,14 +34,14 @@ } }); - test("include: single option", 1, function() { + test("includeRelated: single option", 1, function() { var requestUrl = "/api/user/1?with=" + encodeURIComponent("role"); this.setServerData(requestUrl); user = new User({'id': 1}); user - .include('role') + .includeRelated('role') .fetch({ complete: function () { equal(requestUrl, this.url); @@ -51,14 +51,14 @@ server.respond(); }); - test("include: multiple options", 1, function () { + test("includeRelated: multiple options", 1, function () { var requestUrl = "/api/user/1?with=" + encodeURIComponent("role,organization"); this.setServerData(requestUrl); user = new User({'id': 1}); user - .include('role', 'organization') + .includeRelated('role', 'organization') .fetch({ complete: function () { equal(requestUrl, this.url); @@ -68,14 +68,14 @@ server.respond(); }); - test("include: 2 level deep relationship", 1, function () { + test("includeRelated: 2 level deep relationship", 1, function () { var requestUrl = "/api/user/1?with=" + encodeURIComponent("organization.owner"); this.setServerData(requestUrl); user = new User({'id': 1}); user - .include('organization.owner') + .includeRelated('organization.owner') .fetch({ complete: function () { equal(requestUrl, this.url); @@ -85,14 +85,14 @@ server.respond(); }); - test("include: 3 level deep relationship", 1, function () { + test("includeRelated: 3 level deep relationship", 1, function () { var requestUrl = "/api/user/1?with=" + encodeURIComponent("organization.owner.role"); this.setServerData(requestUrl); user = new User({'id': 1}); user - .include('organization.owner.role') + .includeRelated('organization.owner.role') .fetch({ complete: function () { equal(requestUrl, this.url); @@ -102,14 +102,14 @@ server.respond(); }); - test("include: multiple option deep relationship", 1, function () { + test("includeRelated: multiple option deep relationship", 1, function () { var requestUrl = "/api/user/1?with=" + encodeURIComponent("organization.owner,organization.staff"); this.setServerData(requestUrl); user = new User({'id': 1}); user - .include('organization.owner', 'organization.staff') + .includeRelated('organization.owner', 'organization.staff') .fetch({ complete: function () { equal(requestUrl, this.url); @@ -119,14 +119,14 @@ server.respond(); }); - test("where: single field equal", 1, function () { + test("when: single field equal", 1, function () { var requestUrl = "/api/user?role=" + encodeURIComponent("eq:editor"); this.setServerData(requestUrl); users = new UserCollection(); users - .where({ + .when({ role: { '=': 'editor' } @@ -140,14 +140,14 @@ server.respond(); }); - test("where: single field equal shorthand", 1, function () { + test("when: single field equal shorthand", 1, function () { var requestUrl = "/api/user?role=" + encodeURIComponent("eq:editor"); this.setServerData(requestUrl); users = new UserCollection(); users - .where({ + .when({ role: 'editor' }) .fetch({ @@ -159,14 +159,14 @@ server.respond(); }); - test("where: multiple fields", 1, function () { + test("when: multiple fields", 1, function () { var requestUrl = "/api/user?role=" + encodeURIComponent("eq:editor") + "&createdBy=" + encodeURIComponent("eq:4"); this.setServerData(requestUrl); users = new UserCollection(); users - .where({ + .when({ role: 'editor', createdBy: 4 }) @@ -179,14 +179,14 @@ server.respond(); }); - test("where: like field", 1, function () { + test("when: like field", 1, function () { var requestUrl = "/api/user?firstName=" + encodeURIComponent("like:Joh*"); this.setServerData(requestUrl); users = new UserCollection(); users - .where({ + .when({ firstName: { 'like': 'Joh*' } @@ -200,14 +200,14 @@ server.respond(); }); - test("where: in list", 1, function () { + test("when: in list", 1, function () { var requestUrl = "/api/user?role=" + encodeURIComponent("in:editor,author"); this.setServerData(requestUrl); users = new UserCollection(); users - .where({ + .when({ role: { 'in': ['editor', 'author'] } @@ -221,14 +221,14 @@ server.respond(); }); - test("where: in list shorthand", 1, function () { + test("when: in list shorthand", 1, function () { var requestUrl = "/api/user?role=" + encodeURIComponent("in:editor,author"); this.setServerData(requestUrl); users = new UserCollection(); users - .where({ + .when({ role: ['editor', 'author'] }) .fetch({ @@ -240,14 +240,14 @@ server.respond(); }); - test("where: greater than", 1, function () { + test("when: greater than", 1, function () { var requestUrl = "/api/user?createdAt=" + encodeURIComponent("gt:10"); this.setServerData(requestUrl); users = new UserCollection(); users - .where({ + .when({ createdAt: { '>': 10 } @@ -261,14 +261,14 @@ server.respond(); }); - test("where: greater than", 1, function () { + test("when: greater than", 1, function () { var requestUrl = "/api/user?createdAt=" + encodeURIComponent("lt:10"); this.setServerData(requestUrl); users = new UserCollection(); users - .where({ + .when({ createdAt: { '<': 10 } @@ -282,14 +282,14 @@ server.respond(); }); - test("where: deep relationship field", 1, function () { + test("when: deep relationship field", 1, function () { var requestUrl = "/api/user?organization.type=" + encodeURIComponent("eq:facility"); this.setServerData(requestUrl); users = new UserCollection(); users - .where({ + .when({ 'organization.type': { '=': 'facility' } @@ -303,14 +303,14 @@ server.respond(); }); - test("where: deep relationship field shorthand", 1, function () { + test("when: deep relationship field shorthand", 1, function () { var requestUrl = "/api/user?organization.type=" + encodeURIComponent("eq:facility"); this.setServerData(requestUrl); users = new UserCollection(); users - .where({ + .when({ 'organization.type': 'facility' }) .fetch({ @@ -360,14 +360,14 @@ }); // Dan has completed interface on first30 - test("sortBy: single field shorthand", 1, function () { + test("orderBy: single field shorthand", 1, function () { var requestUrl = "/api/user?orderBy=" + encodeURIComponent("lastName"); this.setServerData(requestUrl); users = new UserCollection(); users - .sortBy('lastName') + .orderBy('lastName') .fetch({ complete: function () { equal(requestUrl, this.url); @@ -378,14 +378,14 @@ }); // Dan has completed interface on first30 - test("sortBy: single field ascending", 1, function () { + test("orderBy: single field ascending", 1, function () { var requestUrl = "/api/user?orderBy=" + encodeURIComponent("lastName"); this.setServerData(requestUrl); users = new UserCollection(); users - .sortBy({ + .orderBy({ lastName: 'asc' }) .fetch({ @@ -398,14 +398,14 @@ }); // Dan has completed interface on first30 - test("sortBy: single field descending", 1, function () { + test("orderBy: single field descending", 1, function () { var requestUrl = "/api/user?orderBy=" + encodeURIComponent("-lastName"); this.setServerData(requestUrl); users = new UserCollection(); users - .sortBy({ + .orderBy({ lastName: 'desc' }) .fetch({ @@ -418,17 +418,17 @@ }); //TODO: Figure out order of importance for sort fields - test("sortBy: multiple fields", 1, function () { + test("orderBy: multiple fields", 1, function () { var requestUrl = "/api/user?orderBy=" + encodeURIComponent("-lastName,firstName"); this.setServerData(requestUrl); users = new UserCollection(); users - .sortBy({ + .orderBy({ lastName: 'desc' }) - .sortBy({ + .orderBy({ firstName: 'asc' }) .fetch({ @@ -440,6 +440,4 @@ server.respond(); }); - - -})(window.Backbone, window._); \ No newline at end of file +})(window.Backbone, window._, window.querybuilder, window.earthlingDataProvider); \ No newline at end of file diff --git a/test/spec/interface.js b/test/spec/interface.js index 2bc952e..e88a9f2 100644 --- a/test/spec/interface.js +++ b/test/spec/interface.js @@ -1,5 +1,5 @@ /* global test, module, deepEqual */ -(function (Backbone, _) { +(function (Backbone, _, querybuilder, earthlingDataProvider) { "use strict"; var user, @@ -18,17 +18,18 @@ url: '/api/user' }); + querybuilder.setProvider(window.earthlingDataProvider); } }); - test("include: single option", 1, function() { + test("includeRelated: single option", 1, function() { user = new User({'id': 1}); user - .include('role'); + .includeRelated('role'); deepEqual(user._rbQueryData, { - include: [ + includeRelated: [ { field: 'role' } @@ -36,13 +37,13 @@ }); }); - test("include: multiple options", 1, function () { + test("includeRelated: multiple options", 1, function () { user = new User({'id': 1}); user - .include('role', 'organization'); + .includeRelated('role', 'organization'); deepEqual(user._rbQueryData, { - include: [ + includeRelated: [ { field: 'role' }, @@ -53,13 +54,13 @@ }); }); - test("include: 2 level deep relationship", 1, function () { + test("includeRelated: 2 level deep relationship", 1, function () { user = new User({'id': 1}); user - .include('organization.owner'); + .includeRelated('organization.owner'); deepEqual(user._rbQueryData, { - include: [ + includeRelated: [ { field: 'organization.owner' } @@ -67,13 +68,13 @@ }); }); - test("include: 3 level deep relationship", 1, function () { + test("includeRelated: 3 level deep relationship", 1, function () { user = new User({'id': 1}); user - .include('organization.owner.role'); + .includeRelated('organization.owner.role'); deepEqual(user._rbQueryData, { - include: [ + includeRelated: [ { field: 'organization.owner.role' } @@ -81,13 +82,13 @@ }); }); - test("include: multiple option deep relationship", 1, function () { + test("includeRelated: multiple option deep relationship", 1, function () { user = new User({'id': 1}); user - .include('organization.owner', 'organization.staff'); + .includeRelated('organization.owner', 'organization.staff'); deepEqual(user._rbQueryData, { - include: [ + includeRelated: [ { field: 'organization.owner' }, @@ -98,17 +99,17 @@ }); }); - test("where: single field equal", 1, function () { + test("when: single field equal", 1, function () { users = new UserCollection(); users - .where({ + .when({ role: { '=': 'editor' } }); deepEqual(users._rbQueryData, { - where: [ + when: [ { field: 'role', operator: '=', @@ -118,15 +119,15 @@ }); }); - test("where: single field equal shorthand", 1, function () { + test("when: single field equal shorthand", 1, function () { users = new UserCollection(); users - .where({ + .when({ role: 'editor' }); deepEqual(users._rbQueryData, { - where: [ + when: [ { field: 'role', operator: '=', @@ -136,16 +137,16 @@ }); }); - test("where: multiple fields", 1, function () { + test("when: multiple fields", 1, function () { users = new UserCollection(); users - .where({ + .when({ role: 'editor', createdBy: 4 }); deepEqual(users._rbQueryData, { - where: [ + when: [ { field: 'role', operator: '=', @@ -160,17 +161,17 @@ }); }); - test("where: like field", 1, function () { + test("when: like field", 1, function () { users = new UserCollection(); users - .where({ + .when({ firstName: { 'like': 'Joh*' } }); deepEqual(users._rbQueryData, { - where: [ + when: [ { field: 'firstName', operator: 'like', @@ -180,17 +181,17 @@ }); }); - test("where: in list", 1, function () { + test("when: in list", 1, function () { users = new UserCollection(); users - .where({ + .when({ role: { 'in': ['editor', 'author'] } }); deepEqual(users._rbQueryData, { - where: [ + when: [ { field: 'role', operator: 'in', @@ -200,15 +201,15 @@ }); }); - test("where: in list shorthand", 1, function () { + test("when: in list shorthand", 1, function () { users = new UserCollection(); users - .where({ + .when({ role: ['editor', 'author'] }); deepEqual(users._rbQueryData, { - where: [ + when: [ { field: 'role', operator: 'in', @@ -218,17 +219,17 @@ }); }); - test("where: greater than", 1, function () { + test("when: greater than", 1, function () { users = new UserCollection(); users - .where({ + .when({ createdAt: { '>': 10 } }); deepEqual(users._rbQueryData, { - where: [ + when: [ { field: 'createdAt', operator: '>', @@ -238,17 +239,17 @@ }); }); - test("where: greater than", 1, function () { + test("when: greater than", 1, function () { users = new UserCollection(); users - .where({ + .when({ createdAt: { '<': 10 } }); deepEqual(users._rbQueryData, { - where: [ + when: [ { field: 'createdAt', operator: '<', @@ -258,17 +259,17 @@ }); }); - test("where: deep relationship field", 1, function () { + test("when: deep relationship field", 1, function () { users = new UserCollection(); users - .where({ + .when({ 'organization.type': { '=': 'facility' } }); deepEqual(users._rbQueryData, { - where: [ + when: [ { field: 'organization.type', operator: '=', @@ -278,15 +279,15 @@ }); }); - test("where: deep relationship field shorthand", 1, function () { + test("when: deep relationship field shorthand", 1, function () { users = new UserCollection(); users - .where({ + .when({ 'organization.type': 'facility' }); deepEqual(users._rbQueryData, { - where: [ + when: [ { field: 'organization.type', operator: '=', @@ -321,13 +322,13 @@ }); // Dan has completed interface on first30 - test("sortBy: single field shorthand", 1, function () { + test("orderBy: single field shorthand", 1, function () { users = new UserCollection(); users - .sortBy('lastName'); + .orderBy('lastName'); deepEqual(users._rbQueryData, { - sortBy: [ + orderBy: [ { field: 'lastName', direction: 'asc' @@ -337,15 +338,15 @@ }); // Dan has completed interface on first30 - test("sortBy: single field ascending", 1, function () { + test("orderBy: single field ascending", 1, function () { users = new UserCollection(); users - .sortBy({ + .orderBy({ lastName: 'asc' }); deepEqual(users._rbQueryData, { - sortBy: [ + orderBy: [ { field: 'lastName', direction: 'asc' @@ -355,15 +356,15 @@ }); // Dan has completed interface on first30 - test("sortBy: single field descending", 1, function () { + test("orderBy: single field descending", 1, function () { users = new UserCollection(); users - .sortBy({ + .orderBy({ lastName: 'desc' }); deepEqual(users._rbQueryData, { - sortBy: [ + orderBy: [ { field: 'lastName', direction: 'desc' @@ -373,18 +374,18 @@ }); //TODO: Figure out order of importance for sort fields - test("sortBy: multiple fields", 1, function () { + test("orderBy: multiple fields", 1, function () { users = new UserCollection(); users - .sortBy({ + .orderBy({ lastName: 'desc' }) - .sortBy({ + .orderBy({ firstName: 'asc' }); deepEqual(users._rbQueryData, { - sortBy: [ + orderBy: [ { field: 'lastName', direction: 'desc' @@ -399,4 +400,4 @@ -})(window.Backbone, window._); \ No newline at end of file +})(window.Backbone, window._, window.querybuilder, window.earthlingDataProvider); \ No newline at end of file