-
Notifications
You must be signed in to change notification settings - Fork 38
/
github.js
52 lines (45 loc) · 1.46 KB
/
github.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { isArray } from '@ember/array';
import { get } from '@ember/object';
import { isNone } from '@ember/utils';
import { pluralize } from 'ember-inflector';
import DS from 'ember-data';
import { decamelize } from '@ember/string';
export default DS.RESTSerializer.extend({
keyForAttribute(attr) {
return decamelize(attr);
},
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
payload.recordId = id;
let wrappedPayload = {};
let fieldName = primaryModelClass.modelName;
if (isArray(payload)) {
fieldName = pluralize(fieldName);
}
wrappedPayload[fieldName] = payload;
return this._super(store, primaryModelClass, wrappedPayload, id, requestType);
},
// Add metadata to the response for use with pagination. Formatted like:
// {
// first: { page: 1, per_page: 5 }
// next: { page: 3, per_page: 5 },
// prev: { page: 1, per_page: 5 },
// last: { page: 3, per_page: 5 }
// }
//
extractMeta(store, modelClass, payload) {
const links = get(payload, `${pluralize(modelClass.modelName)}.links`);
if (isNone(links)) {
return;
}
return Object.keys(links).reduce((meta, name) => {
const link = links[name];
const qs = link.split('?').pop();
meta[name] = qs.split('&').reduce((memo, str) => {
const [key, value] = str.split('=');
memo[key] = parseInt(value, 10);
return memo;
}, {});
return meta;
}, {});
}
});