From e2963e9fb7398a2036a73b8708f3908b8c26370a Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Wed, 22 Aug 2012 09:51:33 +0100 Subject: [PATCH] [#217,backend/ckan][s]: support for sorting (plus refactor to have a normalizeQuery method). --- src/backend.ckan.js | 20 ++++++++++++++++---- test/backend.ckan.test.js | 25 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/backend.ckan.js b/src/backend.ckan.js index 19c2def1..c9ba6a05 100644 --- a/src/backend.ckan.js +++ b/src/backend.ckan.js @@ -37,14 +37,26 @@ this.recline.Backend.Ckan = this.recline.Backend.Ckan || {}; return dfd.promise(); }; - my.query = function(queryObj, dataset) { - var wrapper = my.DataStore(); + // only put in the module namespace so we can access for tests! + my._normalizeQuery = function(queryObj, dataset) { var actualQuery = { resource_id: dataset.id, q: queryObj.q, - limit: queryObj.size, - offset: queryObj.from + limit: queryObj.size || 10, + offset: queryObj.from || 0 }; + if (queryObj.sort && queryObj.sort.length > 0) { + var _tmp = _.map(queryObj.sort, function(sortObj) { + return sortObj.field + ' ' + (sortObj.order || ''); + }); + actualQuery.sort = _tmp.join(','); + } + return actualQuery; + } + + my.query = function(queryObj, dataset) { + var actualQuery = my._normalizeQuery(queryObj, dataset); + var wrapper = my.DataStore(); var dfd = $.Deferred(); var jqxhr = wrapper.search(actualQuery); jqxhr.done(function(results) { diff --git a/test/backend.ckan.test.js b/test/backend.ckan.test.js index 9775b4ad..157c383e 100644 --- a/test/backend.ckan.test.js +++ b/test/backend.ckan.test.js @@ -1,6 +1,31 @@ (function ($) { module("Backend CKAN"); +test('_normalizeQuery', function() { + var dataset = new recline.Model.Dataset({ + url: 'does-not-matter', + id: 'xyz', + backend: 'ckan' + }); + + var queryObj = { + q: 'abc', + sort: [ + { field: 'location', order: 'desc' }, + { field: 'last' } + ] + }; + var out = recline.Backend.Ckan._normalizeQuery(queryObj, dataset); + var exp = { + resource_id: dataset.id, + q: 'abc', + sort: 'location desc,last ', + limit: 10, + offset: 0 + }; + deepEqual(out, exp); +}); + test("fetch", function() { var dataset = new recline.Model.Dataset({ url: 'http://localhost:5000/dataset/test-data-viewer/resource/4f1299ab-a100-4e5f-ba81-e6d234a2f3bd',