Skip to content

Commit

Permalink
[FEATURE ds-links-in-record-array] Add links to RecordArray when pres…
Browse files Browse the repository at this point in the history
…ent on payload
  • Loading branch information
danmcclain committed Mar 29, 2016
1 parent f063ac1 commit 8fc54bd
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Ember from 'ember';
import RecordArray from "ember-data/-private/system/record-arrays/record-array";
import cloneNull from "ember-data/-private/system/clone-null";
import isEnabled from 'ember-data/-private/features';

/**
@module ember-data
Expand Down Expand Up @@ -35,11 +36,20 @@ export default RecordArray.extend({
loadRecords(records, payload) {
//TODO Optimize
var internalModels = Ember.A(records).mapBy('_internalModel');
this.setProperties({
content: Ember.A(internalModels),
isLoaded: true,
meta: cloneNull(payload.meta)
});
if (isEnabled('ds-links-in-record-array')) {
this.setProperties({
content: Ember.A(internalModels),
isLoaded: true,
meta: cloneNull(payload.meta),
links: cloneNull(payload.links)
});
} else {
this.setProperties({
content: Ember.A(internalModels),
isLoaded: true,
meta: cloneNull(payload.meta)
});
}

internalModels.forEach((record) => {
this.manager.recordArraysForRecord(record).add(this);
Expand Down
3 changes: 2 additions & 1 deletion config/features.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
"ds-transform-pass-options": null,
"ds-pushpayload-return": null,
"ds-serialize-ids-and-types": null,
"ds-extended-errors": null
"ds-extended-errors": null,
"ds-links-in-record-array": null
}
40 changes: 40 additions & 0 deletions tests/unit/adapter-populated-record-array-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import {module, test} from 'qunit';

import DS from 'ember-data';

import isEnabled from 'ember-data/-private/features';

var Person, store;
var run = Ember.run;

Expand Down Expand Up @@ -102,6 +104,44 @@ test("stores the metadata off the payload", function(assert) {
assert.equal(recordArray.get('meta.foo'), 'bar', 'expected meta.foo to be bar from payload');
});

if (isEnabled('ds-links-in-record-array')) {
test('stores the links off the payload', function(assert) {
var recordArray = store.recordArrayManager
.createAdapterPopulatedRecordArray(store.modelFor('person'), null);
var payload = {
data: [{
type: 'person',
id: '1',
attributes: {
name: 'Scumbag Dale'
}
}, {
type: 'person',
id: '2',
attributes: {
name: 'Scumbag Katz'
}
}, {
type: 'person',
id: '3',
attributes: {
name: 'Scumbag Bryn'
}
}],
links: {
first: '/foo?page=1'
}
};

run(function() {
var records = store.push(payload);
recordArray.loadRecords(records, payload);
});

assert.equal(recordArray.get('links.first'), '/foo?page=1', 'expected links.first to be "/foo?page=1" from payload');
});
}

test('recordArray.replace() throws error', function(assert) {
var recordArray = store.recordArrayManager
.createAdapterPopulatedRecordArray(Person, null);
Expand Down

0 comments on commit 8fc54bd

Please sign in to comment.