Skip to content

Commit 40ff24e

Browse files
committed
use can-reflect to read values while doing .index
1 parent f26416f commit 40ff24e

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

src/helpers.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
var canReflect = require("can-reflect");
12
var defaultCompare = {
23
$gt: function(valueA, valueB) {
34
return valueA > valueB;
@@ -68,8 +69,8 @@ var helpers = {
6869
compare = defaultCompare;
6970
}
7071
return function(item1, item2){
71-
var item1Value = item1[data.prop];
72-
var item2Value = item2[data.prop];
72+
var item1Value = canReflect.getKeyValue(item1, data.prop);
73+
var item2Value = canReflect.getKeyValue(item2, data.prop);
7374
var temp;
7475

7576
if(data.desc) {

src/types/basic-query-sorting-test.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var BasicQuery = require("./basic-query");
22
var QUnit = require("steal-qunit");
33
var set = require("../set");
44
var assign = require("can-assign");
5+
var canReflect = require("can-reflect");
56

67
QUnit.module("can-query-logic/types/basic-query sorting");
78

@@ -316,3 +317,42 @@ QUnit.test('rangeInclusive set.count', function(){
316317
var res = query.count({ start: 0, end: 99 });
317318
equal(res, 100, "count is right");
318319
});
320+
321+
322+
QUnit.test("index uses can-reflect", function(){
323+
324+
var query = new BasicQuery({
325+
sort: "name"
326+
});
327+
var obj1Read, obj2Read, itemKeyRead, itemOwnKeyRead;
328+
329+
var obj1 = canReflect.assignSymbols({},{
330+
"can.getKeyValue": function(key){
331+
obj1Read = true;
332+
return ({id: 5, name: "x"})[key];
333+
}
334+
}),
335+
obj2 = canReflect.assignSymbols({},{
336+
"can.getKeyValue": function(key){
337+
obj2Read = true;
338+
return ({id: 7, name: "d"})[key];
339+
}
340+
}),
341+
item = canReflect.assignSymbols({},{
342+
"can.getKeyValue": function(key){
343+
itemKeyRead = true;
344+
return ({id: 1, name: "j"})[key];
345+
},
346+
"can.hasOwnKey": function(key) {
347+
itemOwnKeyRead = true;
348+
return key in ({id: 1, name: "j"});
349+
}
350+
});
351+
352+
353+
var res = query.index(item,[obj2, obj1]);
354+
QUnit.equal(res, 1, "inserted at 1");
355+
356+
QUnit.deepEqual([obj1Read, obj2Read, itemKeyRead, itemOwnKeyRead],
357+
[true, true, true, true], "read everything");
358+
});

src/types/basic-query.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ canReflect.assignMap(BasicQuery.prototype, {
159159
index: function(props, items) {
160160
// make sure we have the property
161161
var data = helpers.sortData(this.sort.key);
162-
if (!Object.prototype.hasOwnProperty.call(props, data.prop)) {
162+
if (!canReflect.hasOwnKey(props, data.prop)) {
163163
return undefined;
164164
}
165165
// use the passed sort's compare function

0 commit comments

Comments
 (0)