mirror of
https://github.com/zulip/zulip.git
synced 2025-11-13 10:26:28 +00:00
filter: Cache/store sorted_term_types.
Given that the sorted term types depends only on the filter, it makes sense to only build them once and cache the results.
This commit is contained in:
@@ -1179,10 +1179,31 @@ run_test('term_type', () => {
|
||||
{operator: 'sender', operand: 'steve@foo.com'},
|
||||
{operator: 'stream', operand: 'Verona'},
|
||||
];
|
||||
const filter = new Filter(terms);
|
||||
let filter = new Filter(terms);
|
||||
const term_types = filter.sorted_term_types();
|
||||
|
||||
assert.deepEqual(term_types, ['stream', 'topic', 'sender']);
|
||||
|
||||
// test caching of term types
|
||||
// init and stub
|
||||
filter = new Filter(terms);
|
||||
filter.stub = filter._build_sorted_term_types;
|
||||
filter._build_sorted_term_types = function () {
|
||||
this._build_sorted_term_types_called = true;
|
||||
return this.stub();
|
||||
};
|
||||
|
||||
// uncached trial
|
||||
filter._build_sorted_term_types_called = false;
|
||||
const built_terms = filter.sorted_term_types();
|
||||
assert.deepEqual(built_terms, ['stream', 'topic', 'sender']);
|
||||
assert(filter._build_sorted_term_types_called);
|
||||
|
||||
// cached trial
|
||||
filter._build_sorted_term_types_called = false;
|
||||
const cached_terms = filter.sorted_term_types();
|
||||
assert.deepEqual(cached_terms, ['stream', 'topic', 'sender']);
|
||||
assert(!filter._build_sorted_term_types_called);
|
||||
});
|
||||
|
||||
run_test('first_valid_id_from', () => {
|
||||
|
||||
@@ -502,6 +502,13 @@ Filter.prototype = {
|
||||
},
|
||||
|
||||
sorted_term_types: function () {
|
||||
if (this._sorted_term_types === undefined) {
|
||||
this._sorted_term_types = this._build_sorted_term_types();
|
||||
}
|
||||
return this._sorted_term_types;
|
||||
},
|
||||
|
||||
_build_sorted_term_types: function () {
|
||||
const terms = this._operators;
|
||||
const term_types = terms.map(Filter.term_type);
|
||||
const sorted_terms = Filter.sorted_term_types(term_types);
|
||||
|
||||
Reference in New Issue
Block a user