Skip to content

Commit

Permalink
Update owner routes to use ember-data to retrieve owner model (travis…
Browse files Browse the repository at this point in the history
…-ci#2017)

* Update owner route to use ember-data to retrieve owner model

* Remove redundant properties from user and organization models that can now be inherited from the owner model
  • Loading branch information
sorta authored Jun 14, 2019
1 parent 6fd7855 commit 0b7e30c
Show file tree
Hide file tree
Showing 9 changed files with 34 additions and 32 deletions.
14 changes: 14 additions & 0 deletions app/adapters/owner.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import V3Adapter from 'travis/adapters/v3';

export default V3Adapter.extend({
buildURL: function (modelName, id, snapshot, requestType, query) {
if (requestType === 'queryRecord' && query.login !== undefined) {
const prefix = this.urlPrefix();
const { login } = query;
return `${prefix}/owner/${login}`;
} else {
throw new Error(`The owner adapter only supports a
queryRecord request type with a query of login`);
}
},
});
13 changes: 2 additions & 11 deletions app/controllers/owner.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Controller from '@ember/controller';
import { computed } from '@ember/object';
import { reads } from '@ember/object/computed';
import config from 'travis/config/environment';

export default Controller.extend({
Expand All @@ -13,15 +14,5 @@ export default Controller.extend({
return `${sourceEndpoint}/${login}`;
}),

owner: computed('model', function () {
let model = this.get('model');
return {
login: model.login,
name: model.name,
avatar: model.avatar_url,
isSyncing: model.is_syncing,
avatarUrl: model.avatar_url,
syncedAt: model.synced_at
};
})
owner: reads('model'),
});
2 changes: 0 additions & 2 deletions app/models/organization.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,5 @@ import attr from 'ember-data/attr';

export default Owner.extend({
type: 'organization',
isOrganization: true,
allowMigration: attr(),
permissions: attr(),
});
6 changes: 5 additions & 1 deletion app/models/owner.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';
import { computed } from '@ember/object';
import { reads, or } from '@ember/object/computed';
import { reads, or, equal } from '@ember/object/computed';
import { inject as service } from '@ember/service';
import config from 'travis/config/environment';
import dynamicQuery from 'travis/utils/dynamic-query';
Expand All @@ -22,6 +22,10 @@ export default Model.extend({
githubId: attr('string'),
education: attr('boolean'),
fullName: or('name', 'login'),
permissions: attr(),
type: attr('string'),
isUser: equal('type', 'user'),
isOrganization: equal('type', 'organization'),

// This is set by serializers:subscription
subscriptionPermissions: attr(),
Expand Down
1 change: 0 additions & 1 deletion app/models/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ export default Owner.extend({


type: 'user',
isUser: true,

fullName: computed('name', 'login', function () {
let name = this.get('name');
Expand Down
17 changes: 3 additions & 14 deletions app/routes/owner.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import $ from 'jquery';
import TravisRoute from 'travis/routes/basic';
import config from 'travis/config/environment';
import { inject as service } from '@ember/service';

export default TravisRoute.extend({
Expand All @@ -15,18 +14,8 @@ export default TravisRoute.extend({
},

model(params) {
let options = {
headers: {
'Travis-API-Version': '3'
}
};
if (this.get('auth.signedIn')) {
options.headers.Authorization = `token ${this.get('auth.token')}`;
}
let { owner } = params;
let { apiEndpoint } = config;
let url = `${apiEndpoint}/owner/${owner}`;
return $.ajax(url, options);
const { owner } = params;
return this.store.queryRecord('owner', { login: owner });
},

renderTemplate() {
Expand All @@ -36,7 +25,7 @@ export default TravisRoute.extend({

actions: {
error(error, /* transition, originRoute*/) {
let is404 = error.status === 404;
const is404 = error.status === 404 || error.errors.firstObject.status === '404';

if (!is404) {
let message = 'There was an error while loading data, please try again.';
Expand Down
3 changes: 1 addition & 2 deletions app/routes/owner/repositories.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ export default TravisRoute.extend({
owner: null,

model({ page, tab }, transition) {
let owner = { ...this.modelFor('owner') };
owner.isUser = owner['@type'] === 'user';
const owner = this.modelFor('owner');

this.setProperties({ tab, page, owner });

Expand Down
8 changes: 8 additions & 0 deletions app/serializers/owner.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import V3Serializer from 'travis/serializers/v3';

export default V3Serializer.extend({
attrs: {
permissions: { key: '@permissions' },
type: { key: '@type' },
},
});
2 changes: 1 addition & 1 deletion app/templates/owner.hbs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{{#travis-layout layoutName="layouts/center" class="owner"}}
<header class="owner-header row">
<div class="owner-avatar">
{{user-avatar url=owner.avatar name=owner.name size=75}}
{{user-avatar url=owner.avatarUrl name=owner.name size=75}}
</div>
<div class="owner-info">
<h1 class="owner-title">{{owner.name}}</h1>
Expand Down

0 comments on commit 0b7e30c

Please sign in to comment.