Skip to content

Commit

Permalink
fix: support next, prev, first links for EntryList correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
simon-scherzinger committed May 23, 2017
1 parent fd3ed64 commit 158a8e7
Show file tree
Hide file tree
Showing 19 changed files with 32 additions and 33 deletions.
12 changes: 6 additions & 6 deletions src/resources/ListResource.js
Expand Up @@ -22,13 +22,13 @@ export default class ListResource extends Resource {
*
* @param {object} resource resource loaded from the API.
* @param {environment} environment the environment this resource is associated to.
* @param {?string} name name of the embedded resources.
* @param {?object} traversal traversal from which traverson can continue.
* @param {?string} name name of the embedded resources.
* @param {object?} itemSchema optional schema for list items
* @param {ListResource} ListClass Class constructor for list types
* @param {Resource} ItemClass Class constructor for item types
* @param {object?} itemSchema optional schema for list items
*/
constructor(resource, environment, name, traversal, ListClass = ListResource, ItemClass = Resource, itemSchema) {
constructor(resource, environment, traversal, name, itemSchema, ListClass = ListResource, ItemClass = Resource) {
super(resource, environment, traversal);

Object.defineProperties(this, {
Expand Down Expand Up @@ -117,7 +117,7 @@ export default class ListResource extends Resource {
* @returns {Promise<Resource|ResourceClass>} the resource identified by the link.
*/
followFirstLink() {
return this.followLink('first', this[listClassSymbol]);
return this.followLink('first', this[listClassSymbol], this[nameSymbol], this[itemSchemaSymbol]);
}

/**
Expand All @@ -138,7 +138,7 @@ export default class ListResource extends Resource {
* @returns {Promise<Resource|ResourceClass>} the resource identified by the link.
*/
followNextLink() {
return this.followLink('next', this[listClassSymbol]);
return this.followLink('next', this[listClassSymbol], this[nameSymbol], this[itemSchemaSymbol]);
}

/**
Expand All @@ -159,7 +159,7 @@ export default class ListResource extends Resource {
* @returns {Promise<Resource|ResourceClass>} the resource identified by the link.
*/
followPrevLink() {
return this.followLink('prev', this[listClassSymbol]);
return this.followLink('prev', this[listClassSymbol], this[nameSymbol], this[itemSchemaSymbol]);
}
}

Expand Down
9 changes: 4 additions & 5 deletions src/resources/Resource.js
Expand Up @@ -173,15 +173,14 @@ export default class Resource {
*
* @param {string} link the link name.
* @param {class} ResourceClass override the default resource class ({@link Resource}).
* @param {string?} name the name of the embedded resources
* @param {object?} schema schema for {@link EntryResources}
* @returns {Promise<Resource|ResourceClass>} the resource identified by the link.
*/
followLink(link, ResourceClass) {
followLink(link, ResourceClass = Resource, name, schema) {
return get(this[environmentSymbol], this.newRequest().follow(link))
.then(([res, traversal]) => {
if (ResourceClass) {
return new ResourceClass(res, this[environmentSymbol], traversal);
}
return new Resource(res, this[environmentSymbol], traversal);
return new ResourceClass(res, this[environmentSymbol], traversal, name, schema);
});
}

Expand Down
2 changes: 1 addition & 1 deletion src/resources/accounts/AccountList.js
Expand Up @@ -15,6 +15,6 @@ export default class AccountList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:account', traversal, AccountList, AccountResource);
super(resource, environment, traversal, 'ec:account', undefined, AccountList, AccountResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/accounts/ClientList.js
Expand Up @@ -15,6 +15,6 @@ export default class ClientList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:acc/client', traversal, ClientList, ClientResource);
super(resource, environment, traversal, 'ec:acc/client', undefined, ClientList, ClientResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/accounts/GroupList.js
Expand Up @@ -15,6 +15,6 @@ export default class GroupList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:acc/groups', traversal, GroupList, GroupResource);
super(resource, environment, traversal, 'ec:acc/groups', undefined, GroupList, GroupResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/accounts/TokenList.js
Expand Up @@ -15,6 +15,6 @@ export default class TokenList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:account/token', traversal, TokenList, TokenResource);
super(resource, environment, traversal, 'ec:account/token', undefined, TokenList, TokenResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/datamanager/AssetList.js
Expand Up @@ -24,7 +24,7 @@ export default class AssetList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:asset', traversal, AssetList, AssetResource);
super(resource, environment, traversal, 'ec:asset', undefined, AssetList, AssetResource);

/* eslint no-underscore-dangle:0 */
this[dataManagerIDSymbol] = resource._links.self.href.substr(resource._links.self.href.indexOf('dataManagerID') + 14);
Expand Down
2 changes: 1 addition & 1 deletion src/resources/datamanager/DMAccountList.js
Expand Up @@ -15,6 +15,6 @@ export default class DMAccountList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:dm-account', traversal, DMAccountList, DMAccountResource);
super(resource, environment, traversal, 'ec:dm-account', undefined, DMAccountList, DMAccountResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/datamanager/DMClientList.js
Expand Up @@ -15,6 +15,6 @@ export default class DMClientList extends ClientList {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:dm-clients', traversal, DMClientList, DMClientResource);
super(resource, environment, traversal, 'ec:dm-clients', undefined, DMClientList, DMClientResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/datamanager/DataManagerList.js
Expand Up @@ -15,6 +15,6 @@ export default class DataManagerList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:datamanager', traversal, DataManagerList, DataManagerResource);
super(resource, environment, traversal, 'ec:datamanager', undefined, DataManagerList, DataManagerResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/datamanager/DeletedAssetList.js
Expand Up @@ -15,6 +15,6 @@ export default class DeletedAssetList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:asset/deleted', traversal, DeletedAssetList, DeletedAssetResource);
super(resource, environment, traversal, 'ec:asset/deleted', undefined, DeletedAssetList, DeletedAssetResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/datamanager/ModelList.js
Expand Up @@ -15,6 +15,6 @@ export default class ModelList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:model', traversal, ModelList, ModelResource);
super(resource, environment, traversal, 'ec:model', undefined, ModelList, ModelResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/datamanager/RoleList.js
Expand Up @@ -15,6 +15,6 @@ export default class RoleList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:dm-role', traversal, RoleList, RoleResource);
super(resource, environment, traversal, 'ec:dm-role', undefined, RoleList, RoleResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/datamanager/TagList.js
Expand Up @@ -15,6 +15,6 @@ export default class TagList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:tag', traversal, TagList, TagResource);
super(resource, environment, traversal, 'ec:tag', undefined, TagList, TagResource);
}
}
2 changes: 1 addition & 1 deletion src/resources/datamanager/TemplateList.js
Expand Up @@ -15,6 +15,6 @@ export default class TemplateList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:dm-template', traversal, TemplateList, TemplateResource);
super(resource, environment, traversal, 'ec:dm-template', undefined, TemplateList, TemplateResource);
}
}
10 changes: 5 additions & 5 deletions src/resources/publicAPI/EntryList.js
Expand Up @@ -19,8 +19,8 @@ export default class EntryList extends ListResource {
* @param {object} schema JSON Schema for list items.
* @param {object?} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, name, schema, traversal) {
super(resource, environment, name, traversal, EntryList, EntryResource, schema);
constructor(resource, environment, traversal, name, schema) {
super(resource, environment, traversal, name, schema, EntryList, EntryResource);
}
}

Expand All @@ -30,16 +30,16 @@ export default class EntryList extends ListResource {
*
* @param {object} resource loaded resource
* @param {environment} environment the environment of this resource
* @param {string} name name of the embedded items
* @param {object?} traversal traversal for continuing
* @param {string} name name of the embedded items
* @returns {Promise<EntryResource>} {@link Promise} resolving to the newly created {@link
* EntryResource}
*/
export function createList(resource, environment, name, traversal) {
export function createList(resource, environment, traversal, name) {
return Promise.resolve()
.then(() => {
const res = halfred.parse(resource);
return getSchema(res.link('self').profile);
})
.then(schema => new EntryList(resource, environment, name, schema, traversal));
.then(schema => new EntryList(resource, environment, traversal, name, schema));
}
4 changes: 2 additions & 2 deletions src/resources/publicAPI/PublicAssetList.js
@@ -1,5 +1,5 @@
import { get, optionsToQuery } from '../../helper';
import { resourceSymbol, environmentSymbol } from '../Resource';
import { environmentSymbol, resourceSymbol } from '../Resource';
import ListResource from '../ListResource';
import PublicAssetResource from './PublicAssetResource';
import TagList from './PublicTagList';
Expand All @@ -20,7 +20,7 @@ export default class PublicAssetList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:api/assets', traversal, PublicAssetList, PublicAssetResource);
super(resource, environment, traversal, 'ec:api/assets', undefined, PublicAssetList, PublicAssetResource);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/resources/publicAPI/PublicTagList.js
Expand Up @@ -15,6 +15,6 @@ export default class PublicTagList extends ListResource {
* @param {?object} traversal traversal from which traverson can continue.
*/
constructor(resource, environment, traversal) {
super(resource, environment, 'ec:api/tag', traversal, PublicTagList, PublicTagResource);
super(resource, environment, traversal, 'ec:api/tag', undefined, PublicTagList, PublicTagResource);
}
}
2 changes: 1 addition & 1 deletion test/publicAPI/EntryResource.test.js
Expand Up @@ -32,7 +32,7 @@ describe('Entry List', () => {
});
beforeEach(() => {
mock.reset();
return EntryList.createList(listJson, 'live', 'beefbeef:allFields')
return EntryList.createList(listJson, 'live', undefined, 'beefbeef:allFields')
.then(l => list = l); // eslint-disable-line no-return-assign
});
afterEach(() => {
Expand Down

0 comments on commit 158a8e7

Please sign in to comment.