628b2310 by Adam Heath

Major rework, uses a builder pattern now.

1 parent 2b235279
...@@ -61,7 +61,6 @@ module.exports = function(grunt) { ...@@ -61,7 +61,6 @@ module.exports = function(grunt) {
61 var _ = require('lodash'); 61 var _ = require('lodash');
62 62
63 function genJasmineConfig(withCoverage, options) { 63 function genJasmineConfig(withCoverage, options) {
64 var template, templateOptions;
65 var src = [ 64 var src = [
66 'src/scripts/{,**/}*.js', 65 'src/scripts/{,**/}*.js',
67 '!src/scripts/main.js', 66 '!src/scripts/main.js',
...@@ -103,7 +102,7 @@ module.exports = function(grunt) { ...@@ -103,7 +102,7 @@ module.exports = function(grunt) {
103 } 102 }
104 } 103 }
105 url = parts.join('/'); 104 url = parts.join('/');
106 if (url.match(/^src\/scripts\/(.*?\/)?[^\/]+\.spec\.js$/)) { 105 if (0) if (url.match(/^src\/scripts\/(.*?\/)?[^\/]+\.spec\.js$/)) {
107 url = './.grunt/grunt-contrib-jasmine/' + url; 106 url = './.grunt/grunt-contrib-jasmine/' + url;
108 } else if (url.match(/^src\/scripts\/(.*?\/)?[^\/]+\.js$/)) { 107 } else if (url.match(/^src\/scripts\/(.*?\/)?[^\/]+\.js$/)) {
109 url = './.grunt/grunt-contrib-jasmine/' + url; 108 url = './.grunt/grunt-contrib-jasmine/' + url;
...@@ -149,7 +148,7 @@ module.exports = function(grunt) { ...@@ -149,7 +148,7 @@ module.exports = function(grunt) {
149 template: template, 148 template: template,
150 templateOptions: templateOptions, 149 templateOptions: templateOptions,
151 }, 150 },
152 } 151 };
153 return jasmineConfig; 152 return jasmineConfig;
154 } 153 }
155 154
......
...@@ -2,6 +2,7 @@ define(function(require) { ...@@ -2,6 +2,7 @@ define(function(require) {
2 'use strict'; 2 'use strict';
3 var _ = require('underscore'); 3 var _ = require('underscore');
4 var Util = require('./Util'); 4 var Util = require('./Util');
5 var Facet = require('./Facet');
5 var Facets = require('./Facets'); 6 var Facets = require('./Facets');
6 var Solr = require('./Solr'); 7 var Solr = require('./Solr');
7 8
...@@ -19,23 +20,26 @@ define(function(require) { ...@@ -19,23 +20,26 @@ define(function(require) {
19 return solrData; 20 return solrData;
20 } 21 }
21 22
22 function makeSolrResponseMixedCase(solrData) { 23 function makeSolrResponseMixedCase(solrResponse) {
23 var facetCounts = Util.getField(solrData, 'facet_counts'); 24 var facetCounts = Util.getField(solrResponse, 'facet_counts');
24 return { 25 return {
25 facetCounts: facetCounts,
26 facetRanges: Util.getField(facetCounts, 'facet_ranges'), 26 facetRanges: Util.getField(facetCounts, 'facet_ranges'),
27 facetFields: Util.getField(facetCounts, 'facet_fields'), 27 facetFields: Util.getField(facetCounts, 'facet_fields'),
28 facetQueries: Util.getField(facetCounts, 'facet_queries'), 28 facetQueries: Util.getField(facetCounts, 'facet_queries'),
29 statsFields: Util.getField(solrData.stats, 'stats_fields'), 29 statsFields: Util.getField(solrResponse.stats, 'stats_fields'),
30 }; 30 };
31 } 31 }
32 32
33 function createStaticSolrResponse(has, toMerge) { 33 function createStaticSolrResponse(has, toMerge) {
34 var solrResponse = createSolrResponse({stats: true}); 34 var solrResponse = createSolrResponse({stats: true});
35 var solrData = makeSolrResponseMixedCase(solrResponse); 35 var solrData = makeSolrResponseMixedCase(solrResponse);
36 _.each(solrData, function(value, key) { 36 if (_.isFunction(toMerge)) {
37 _.extend(value, toMerge[key]); 37 toMerge = toMerge(solrData);
38 }); 38 } else {
39 _.each(solrData, function(value, key) {
40 _.extend(value, toMerge[key]);
41 });
42 }
39 return solrResponse; 43 return solrResponse;
40 } 44 }
41 45
...@@ -45,26 +49,26 @@ define(function(require) { ...@@ -45,26 +49,26 @@ define(function(require) {
45 expect(item.get('checked')).toEqual(checked); 49 expect(item.get('checked')).toEqual(checked);
46 } 50 }
47 51
48 var facetsBuilder = function facetsBuilder() { 52 var definedFacets = {
49 return { 53 model: [
50 model: new Facets.Facet({ 54 {
51 formName: 'model', 55 formName: 'model',
52 label: 'Model', 56 label: 'Model',
53 }, 57 }, {
54 {
55 queryField: 'model_s', 58 queryField: 'model_s',
56 facetType: 'field', 59 facetType: 'field',
57 bins: { 60 bins: {
58 misc: ['saturn', 'jeep'], 61 misc: ['saturn', 'jeep'],
59 startsWithB: ['buick'], 62 startsWithB: ['buick'],
60 }, 63 },
61 }), 64 },
62 year: new Facets.Facet({ 65 ],
66 year: [
67 {
63 formName: 'year', 68 formName: 'year',
64 orderByDirection: 'desc', 69 orderByDirection: 'desc',
65 label: 'Year', 70 label: 'Year',
66 }, 71 }, {
67 {
68 queryField: 'year_dt', 72 queryField: 'year_dt',
69 comparator: 'date', 73 comparator: 'date',
70 facetType: 'year-field', 74 facetType: 'year-field',
...@@ -80,8 +84,10 @@ define(function(require) { ...@@ -80,8 +84,10 @@ define(function(require) {
80 var year = new Date(value).getUTCFullYear(); 84 var year = new Date(value).getUTCFullYear();
81 return year + ' - ' + (year + 2); 85 return year + ' - ' + (year + 2);
82 }, 86 },
83 }), 87 },
84 dateOfBirth: new Facets.Facet({ 88 ],
89 dateOfBirth: [
90 {
85 formName: 'dateOfBirth', 91 formName: 'dateOfBirth',
86 label: 'Birthday', 92 label: 'Birthday',
87 }, { 93 }, {
...@@ -91,8 +97,10 @@ define(function(require) { ...@@ -91,8 +97,10 @@ define(function(require) {
91 facetStats: true, 97 facetStats: true,
92 other: 'before', 98 other: 'before',
93 start: 'NOW/YEAR-25YEAR', 99 start: 'NOW/YEAR-25YEAR',
94 }), 100 },
95 value: new Facets.Facet({ 101 ],
102 value: [
103 {
96 formName: 'value', 104 formName: 'value',
97 label: 'Value', 105 label: 'Value',
98 }, { 106 }, {
...@@ -104,62 +112,113 @@ define(function(require) { ...@@ -104,62 +112,113 @@ define(function(require) {
104 var value = parseInt(item.get('key')); 112 var value = parseInt(item.get('key'));
105 return '$' + value + ' - $' + (value + 1000); 113 return '$' + value + ' - $' + (value + 1000);
106 }, 114 },
107 }), 115 },
108 }; 116 ],
117 bodyType: [
118 {
119 label: 'Type'
120 }, {
121 facetType: 'field',
122 labelMap: {
123 aluminum: 'Aluminum',
124 plastic: 'Plastic',
125 carbonComposite: 'Carbon Composite',
126 steel: 'Steel',
127 },
128 },
129 ],
130 };
131 var facetsBuilder = function facetsBuilder(facetName) {
132 if (facetName) {
133 return new Facet(definedFacets[facetName][0], definedFacets[facetName][1]);
134 }
135 var result = {};
136 _.each(_.keys(definedFacets), function(facetName) {
137 result[facetName] = new Facet(definedFacets[facetName][0], definedFacets[facetName][1]);
138 });
139 return result;
109 }; 140 };
110 141
142 function createSolrDataMerger(modelData) {
143 return function(solrData) {
144 _.each(solrData, function(solrValue, solrKey) {
145 _.each(modelData, function(modelObj, modelKey) {
146 var modelValue = modelObj[solrKey];
147 if (modelValue) {
148 if (solrKey === 'facetQueries') {
149 _.extend(solrValue, modelValue);
150 } else {
151 solrValue[modelKey] = modelValue;
152 }
153 }
154 });
155 });
156 };
157 }
158
159 var defaultModelData = {
160 dateOfBirth: {
161 facetRanges: {
162 counts: [
163 '1974-01-01T00:00:00.000Z', 1,
164 '1972-01-01T00:00:00.000Z', 1,
165 '1970-01-01T00:00:00.000Z', 1,
166 ],
167 before: 5,
168 },
169 statsFields: {min: '2000', max: '2010'},
170 },
171 bodyType: {
172 facetFields: [
173 'aluminum', 14,
174 'carbonComposite', 66,
175 'steel', 2,
176 ],
177 },
178
179 model: {
180 facetFields: [
181 'ford', 23,
182 'chevy', 18,
183 'toyota', 5,
184 'saturn', 7, // keep here to test the bin/exclude feature
185 'jeep', 19, // keep here to test the bin/exclude feature
186 'buick', 0, // keep here to test the bin/exclude feature
187 'dodge', 0,
188 ],
189 facetQueries: {
190 'model:misc': 26,
191 'model:startsWithB': 0,
192 },
193 },
194 value: {
195 facetFields: [
196 '23456', 1,
197 '5678', 2,
198 '1234', 3,
199 ],
200 statsFields: {min: '1234', max: '23456'},
201 },
202 year: {
203 facetFields: [
204 '2000-01-01T00:00:00.000Z', 1,
205 '2001-01-01T00:00:00.000Z', 4,
206 '2002-01-01T00:00:00.000Z', 0,
207 '2003-01-01T00:00:00.000Z', 3,
208 '2004-01-01T00:00:00.000Z', 0,
209 '2005-01-01T00:00:00.000Z', 0,
210 '2006-01-01T00:00:00.000Z', 0,
211 '2007-01-01T00:00:00.000Z', 0,
212 '2008-01-01T00:00:00.000Z', 7,
213 '2009-01-01T00:00:00.000Z', 0,
214 '2010-01-01T00:00:00.000Z', 1,
215 ],
216 statsFields: {min: '2000-01-01T00:00:00.000Z', max: '2010-01-01T00:00:00.000Z'},
217 },
218 };
111 var responses = { 219 var responses = {
112 sequential: [ 220 sequential: [
113 createStaticSolrResponse({stats: true}, { 221 createStaticSolrResponse({stats: true}, createSolrDataMerger(defaultModelData)),
114 facetRanges: {
115 dateOfBirth: {
116 counts: [
117 '1974-01-01T00:00:00.000Z', 1,
118 '1972-01-01T00:00:00.000Z', 1,
119 '1970-01-01T00:00:00.000Z', 1,
120 ],
121 before: 5,
122 },
123 },
124 facetFields: {
125 model: [
126 'ford', 23,
127 'chevy', 18,
128 'toyota', 5,
129 'saturn', 7, // keep here to test the bin/exclude feature
130 'jeep', 19, // keep here to test the bin/exclude feature
131 'buick', 0, // keep here to test the bin/exclude feature
132 'dodge', 0,
133 ],
134 value: [
135 '23456', 1,
136 '5678', 2,
137 '1234', 3,
138 ],
139 year: [
140 '2000-01-01T00:00:00.000Z', 1,
141 '2001-01-01T00:00:00.000Z', 4,
142 '2002-01-01T00:00:00.000Z', 0,
143 '2003-01-01T00:00:00.000Z', 3,
144 '2004-01-01T00:00:00.000Z', 0,
145 '2005-01-01T00:00:00.000Z', 0,
146 '2006-01-01T00:00:00.000Z', 0,
147 '2007-01-01T00:00:00.000Z', 0,
148 '2008-01-01T00:00:00.000Z', 7,
149 '2009-01-01T00:00:00.000Z', 0,
150 '2010-01-01T00:00:00.000Z', 1,
151 ],
152 },
153 facetQueries: {
154 'model:misc': 26,
155 'model:startsWithB': 0,
156 },
157 statsFields: {
158 year: {min: '2000', max: '2010'},
159 dateOfBirth: {min: '2000', max: '2010'},
160 value: {min: '1234', max: '23456'},
161 },
162 }),
163 ], 222 ],
164 suggestions: [ 223 suggestions: [
165 createStaticSolrResponse({stats: true}, { 224 createStaticSolrResponse({stats: true}, {
......
...@@ -29,7 +29,8 @@ define(function(require) { ...@@ -29,7 +29,8 @@ define(function(require) {
29 return obj[key]; 29 return obj[key];
30 }, 30 },
31 setField: function getField(obj, key, value) { 31 setField: function getField(obj, key, value) {
32 return obj[key] = value; 32 obj[key] = value;
33 return value;
33 }, 34 },
34 getItemKeyAccessor: function getItemKeyAccessor(item) { 35 getItemKeyAccessor: function getItemKeyAccessor(item) {
35 return item.get('key'); 36 return item.get('key');
......