Skip to content

Commit

Permalink
[BUGFIX beta] Revert "Add RecordArray#filterBy which contains a liv…
Browse files Browse the repository at this point in the history
…e, filtered subset"

This reverts commit 1aeaa91.

Conflicts:
	packages/ember-data/tests/unit/record-array-test.js
  • Loading branch information
bmac committed Aug 14, 2015
1 parent e5e8b3c commit ec69e94
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 168 deletions.
53 changes: 0 additions & 53 deletions packages/ember-data/lib/system/record-arrays/record-array.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,6 @@ import SnapshotRecordArray from "ember-data/system/snapshot-record-array";
var get = Ember.get;
var set = Ember.set;

var FilteredSubset = Ember.ArrayProxy.extend({
init: function() {
this._super(...arguments);

var { filterByArgs, recordArray } = this.getProperties('filterByArgs', 'recordArray');
var [key] = filterByArgs;

var path = `recordArray.@each.${key}`;
Ember.defineProperty(this, 'content', Ember.computed(path, function() {
return this.filterBy.apply(recordArray, filterByArgs);
}));
}
});


/**
A record array is an array that contains records of a certain type. The record
array materializes records as needed when they are retrieved for the first
Expand Down Expand Up @@ -111,44 +96,6 @@ export default Ember.ArrayProxy.extend(Ember.Evented, {
return internalModel && internalModel.getRecord();
},

/**
Get a filtered subset of the underlying `RecordArray`.
The subset updates when a record would match or mismatch the
specified filter parameters.
Example
```javascript
var allToms = store.all('person').filterBy('name', 'Tom');
allToms.get('length'); // 0, since no toms yet in store
var tom = store.push('person', { id: 1, name: 'Tom' });
allToms.get('length'); // Tom is added
tom.set('name', 'Thomas');
allToms.get('length'); // 0, since no more records with name === 'Tom'
```
@method filterBy
@param {String} key property path
@param {*} value optional
*/
filterBy: function(key, value) {
// only pass value to the arguments if it is present; this mimics the same
// behavior for `filterBy`: http://git.io/vIurH
var filterByArgs = [key];
if (arguments.length === 2) {
filterByArgs.push(value);
}

return FilteredSubset.create({
filterByArgs,
recordArray: this
});
},

/**
Used to get the latest version of all of the records in this array
from the adapter.
Expand Down
115 changes: 0 additions & 115 deletions packages/ember-data/tests/unit/record-array-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -456,118 +456,3 @@ test("a record array should return a promise when updating", function() {
});
ok(promise.then && typeof promise.then === "function", "#update returns a promise");
});

test('filterBy - returns a filtered subset', function() {
var store = createStore({
person: Person
});

run(function() {
store.push({ data: [{
id: '1',
type: 'person',
attributes: {
name: "Tom"
}
}, {
id: '2',
type: 'person',
attributes: {
name: "Yehuda"
}
}, {
id: '2',
type: 'person',
attributes: {
name: "Yehuda"
}
}] });
});

var all = store.peekAll('person');
var toms = all.filterBy('name', 'Tom');
equal(toms.get('length'), 1);
deepEqual(toms.getEach('id'), ['1']);

// a new record is added if filter matches
run(function() {
store.push({ data: { type: 'person', id: '4', attributes: { name: "Tom" } } });
});
equal(toms.get('length'), 2);
deepEqual(toms.getEach('id'), ['1', '4']);

// a new record is not added if filter doesn't match
run(function() {
store.push({ data: { type: 'person', id: '5', attributes: { name: "Igor" } } });
});
equal(toms.get('length'), 2);
deepEqual(toms.getEach('id'), ['1', '4']);

// changing the filtered value remvoves the record from the list
run(function() {
// we are using a private method here to get the record immediatly
store.recordForId('person', '1').set('name', "Thomas");
});
equal(toms.get('length'), 1);
deepEqual(toms.getEach('id'), ['4']);

// change value back to original
run(function() {
store.recordForId('person', '1').set('name', "Tom");
});
equal(toms.get('length'), 2);
deepEqual(toms.getEach('id'), ['1', '4']);
});

test('filterBy - value is optional', function() {
var store = createStore({
person: Person
});

run(function() {
store.push({ data: [{
id: '1',
type: 'person',
attributes: {
name: "Tom"
}
}, {
id: '2',
type: 'person'
}] });
});

var all = store.peekAll('person');
var allWithNames = all.filterBy('name');
equal(allWithNames.get('length'), 1);
deepEqual(allWithNames.getEach('id'), ['1']);

// a new record is added if filter matches
run(function() {
store.push({ data: { type: 'person', id: '3', attributes: { name: "Igor" } } });
});
equal(allWithNames.get('length'), 2);
deepEqual(allWithNames.getEach('id'), ['1', '3']);

// a new record is not added if filter doesn't match
run(function() {
store.push({ data: { type: 'person', id: '4' } });
});
equal(allWithNames.get('length'), 2);
deepEqual(allWithNames.getEach('id'), ['1', '3']);

// changing the filtered value remvoves the record from the list
run(function() {
// we are using a private method here to get the record immediatly
store.recordForId('person', '1').set('name', null);
});
equal(allWithNames.get('length'), 1);
deepEqual(allWithNames.getEach('id'), ['3']);

// change value back to original
run(function() {
store.recordForId('person', '1').set('name', "Tom");
});
equal(allWithNames.get('length'), 2);
deepEqual(allWithNames.getEach('id'), ['1', '3']);
});

0 comments on commit ec69e94

Please sign in to comment.