From 1eb7df9a7c2e5e29fc3a4d5f76a9a1ee19a5fa9b Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Mon, 2 Apr 2012 21:03:59 +0100 Subject: [PATCH] [#66,model][s]: addTermFacet on Query object. * Also fix a major bug (that was causing weird test failures) re setting defaults (you cannot set defaults with objects). --- src/model.js | 45 ++++++++++++++++++++++++++++++--------------- test/model.test.js | 6 ++++++ 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/model.js b/src/model.js index 0002a912..44de3689 100644 --- a/src/model.js +++ b/src/model.js @@ -131,14 +131,27 @@ my.FieldList = Backbone.Collection.extend({ // ## A Query object storing Dataset Query state my.Query = Backbone.Model.extend({ - defaults: { - size: 100 - , from: 0 - , facets: {} + defaults: function() { + return { + size: 100 + , from: 0 + , facets: {} + // http://www.elasticsearch.org/guide/reference/query-dsl/and-filter.html + // , filter: {} + // list of simple filters which will be add to 'add' filter of filter + , filters: [] + } }, // Set (update or add) a terms filter // http://www.elasticsearch.org/guide/reference/query-dsl/terms-filter.html - setFilter: function(fieldId, values) { + addTermFilter: function(fieldId, value) { + var filters = this.get('filters'); + var filter = { term: {} }; + filter.term[fieldId] = value; + filters.push(filter); + this.set({filters: filters}); + // change does not seem to be triggered ... + this.trigger('change'); }, addFacet: function(fieldId) { var facets = this.get('facets'); @@ -157,16 +170,18 @@ my.Query = Backbone.Model.extend({ // ## A Facet (Result) my.Facet = Backbone.Model.extend({ - defaults: { - _type: 'terms', - // total number of tokens in the facet - total: 0, - // number of facet values not included in the returned facets - other: 0, - // number of documents which have no value for the field - missing: 0, - // term object ({term: , count: ...}) - terms: [] + defaults: function() { + return { + _type: 'terms', + // total number of tokens in the facet + total: 0, + // number of facet values not included in the returned facets + other: 0, + // number of documents which have no value for the field + missing: 0, + // term object ({term: , count: ...}) + terms: [] + } } }); diff --git a/test/model.test.js b/test/model.test.js index 944505aa..1bdff485 100644 --- a/test/model.test.js +++ b/test/model.test.js @@ -69,4 +69,10 @@ test('Query', function () { deepEqual({terms: {field: 'xyz'}}, query.get('facets')['xyz']); }); +test('Query.addFilter', function () { + var query = new recline.Model.Query(); + query.addTermFilter('xyz', 'this-value'); + deepEqual({term: {xyz: 'this-value'}}, query.get('filters')[0]); +}); + })(this.jQuery);