Remove *Binding(s) from project
These bindings can be replaced wholesale with the more idiomatic alternative: aliases. In addition, avoid passing in user to components where it can be injected directly. One of the perceived downsides of dependency injection can be that it can make debugging feel more difficult because it's not immediately clear where the value is coming from, which the explicit variant we previously used does not suffer from. It might also be argued that we also lose out on a seam that could be useful in the future where a component doesn't care about the specific type of user, just that one is passed in. While explicitness is often a virtue, it comes at the cost of increased noise that pervades multiple layers of components. I'd argue this makes the parent components more difficult to understand, given they are littered with unnecessary references to data they themselves do not need. This decreases the noise/ceremony around accessing userPermissions/auth data and restricts access to that data to the child components that actually need to know about it. As to losing a seam, it appears 1) that this isn't currently necessary and 2) we can use an internal computed property should the need arise in the future.
This commit is contained in:
parent
1c49615a2d
commit
142a7217d4
|
@ -1,10 +1,13 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
const { service } = Ember.inject;
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
flashes: Ember.inject.service(),
|
flashes: service(),
|
||||||
classNames: ['flash'],
|
classNames: ['flash'],
|
||||||
tagName: 'ul',
|
tagName: 'ul',
|
||||||
messagesBinding: 'flashes.messages',
|
messages: alias('flashes.messages'),
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
closeMessage(msg) {
|
closeMessage(msg) {
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
tagName: 'a',
|
tagName: 'a',
|
||||||
classNames: ['switch--icon'],
|
classNames: ['switch--icon'],
|
||||||
classNameBindings: ['active'],
|
classNameBindings: ['active'],
|
||||||
activeBinding: "hook.active",
|
active: alias('hook.active'),
|
||||||
click() {
|
click() {
|
||||||
var hook;
|
|
||||||
this.sendAction('onToggle');
|
this.sendAction('onToggle');
|
||||||
hook = this.get('hook');
|
let hook = this.get('hook');
|
||||||
return hook.toggle().then((function() {}), () => {
|
return hook.toggle().then((function() {}), () => {
|
||||||
this.toggleProperty('hook.active');
|
this.toggleProperty('hook.active');
|
||||||
return this.sendAction('onToggleError', hook);
|
return this.sendAction('onToggleError', hook);
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
logBinding: 'job.log',
|
logBinding: 'job.log',
|
||||||
classNames: ['job-log'],
|
classNames: ['job-log'],
|
||||||
|
|
|
@ -5,8 +5,6 @@ import Polling from 'travis/mixins/polling';
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
pollModels: 'job.build',
|
pollModels: 'job.build',
|
||||||
commitBinding: 'job.commit',
|
|
||||||
currentItemBinding: 'job',
|
|
||||||
|
|
||||||
color: function() {
|
color: function() {
|
||||||
return colorForState(this.get('job.state'));
|
return colorForState(this.get('job.state'));
|
||||||
|
|
|
@ -4,6 +4,9 @@ import LogFolder from 'travis/utils/log-folder';
|
||||||
import config from 'travis/config/environment';
|
import config from 'travis/config/environment';
|
||||||
import { plainTextLog as plainTextLogUrl } from 'travis/utils/urls';
|
import { plainTextLog as plainTextLogUrl } from 'travis/utils/urls';
|
||||||
|
|
||||||
|
const { service } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
Log.DEBUG = false;
|
Log.DEBUG = false;
|
||||||
|
|
||||||
Log.LIMIT = 10000;
|
Log.LIMIT = 10000;
|
||||||
|
@ -59,10 +62,12 @@ Object.defineProperty(Log.Limit.prototype, 'limited', {
|
||||||
});
|
});
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
popup: Ember.inject.service(),
|
auth: service(),
|
||||||
|
popup: service(),
|
||||||
classNameBindings: ['logIsVisible:is-open'],
|
classNameBindings: ['logIsVisible:is-open'],
|
||||||
logIsVisible: false,
|
logIsVisible: false,
|
||||||
currentUserBinding: 'auth.currentUser',
|
|
||||||
|
currentUser: alias('auth.currentUser'),
|
||||||
|
|
||||||
didInsertElement() {
|
didInsertElement() {
|
||||||
if (Log.DEBUG) {
|
if (Log.DEBUG) {
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
export default Ember.Component.extend();
|
const { service } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
|
export default Ember.Component.extend({
|
||||||
|
auth: service(),
|
||||||
|
user: alias('auth.currentUser')
|
||||||
|
});
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
classNames: ['media', 'account'],
|
classNames: ['media', 'account'],
|
||||||
tagName: 'li',
|
tagName: 'li',
|
||||||
classNameBindings: ['type', 'selected'],
|
classNameBindings: ['type', 'selected'],
|
||||||
typeBinding: 'account.type',
|
type: alias('account.type'),
|
||||||
selectedBinding: 'account.selected',
|
selected: alias('account.selected'),
|
||||||
tokenIsVisible: false,
|
tokenIsVisible: false,
|
||||||
|
|
||||||
name: function() {
|
name: function() {
|
||||||
|
|
|
@ -2,12 +2,18 @@ import Ember from 'ember';
|
||||||
import config from 'travis/config/environment';
|
import config from 'travis/config/environment';
|
||||||
import { hasPermission, hasPushPermission } from 'travis/utils/permission';
|
import { hasPermission, hasPushPermission } from 'travis/utils/permission';
|
||||||
|
|
||||||
|
const { service } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
popup: Ember.inject.service(),
|
auth: service(),
|
||||||
|
popup: service(),
|
||||||
classNames: ['option-button'],
|
classNames: ['option-button'],
|
||||||
classNameBindings: ['isOpen:display'],
|
classNameBindings: ['isOpen:display'],
|
||||||
isOpen: false,
|
isOpen: false,
|
||||||
|
|
||||||
|
currentUser: alias('auth.currentUser'),
|
||||||
|
|
||||||
click(event) {
|
click(event) {
|
||||||
if ($(event.target).is('a') && $(event.target).parents('.settings-dropdown').length) {
|
if ($(event.target).is('a') && $(event.target).parents('.settings-dropdown').length) {
|
||||||
return this.closeMenu();
|
return this.closeMenu();
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
const { service } = Ember.inject;
|
||||||
auth: Ember.inject.service(),
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
currentUserBinding: 'auth.currentUser',
|
export default Ember.Component.extend({
|
||||||
|
auth: service(),
|
||||||
|
|
||||||
|
currentUser: alias('auth.currentUser'),
|
||||||
|
|
||||||
classRecent: function() {
|
classRecent: function() {
|
||||||
if (this.get('tab') === 'recent') {
|
if (this.get('tab') === 'recent') {
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
tagName: 'button',
|
tagName: 'button',
|
||||||
classNames: ['showmore-button'],
|
classNames: ['showmore-button'],
|
||||||
classNameBindings: ['isLoading', 'showMore'],
|
classNameBindings: ['isLoading', 'showMore'],
|
||||||
showMore: true,
|
showMore: true,
|
||||||
attributeBindings: ['disabled'],
|
attributeBindings: ['disabled'],
|
||||||
disabledBinding: 'isLoading',
|
disabled: alias('isLoading'),
|
||||||
|
|
||||||
buttonLabel: function() {
|
buttonLabel: function() {
|
||||||
if (this.get('isLoading')) {
|
if (this.get('isLoading')) {
|
||||||
|
|
|
@ -2,10 +2,13 @@ import Ember from 'ember';
|
||||||
import { format as formatStatusImage } from 'travis/utils/status-image-formats';
|
import { format as formatStatusImage } from 'travis/utils/status-image-formats';
|
||||||
import Config from 'travis/config/environment';
|
import Config from 'travis/config/environment';
|
||||||
|
|
||||||
|
const { service } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
popup: Ember.inject.service(),
|
popup: service(),
|
||||||
auth: Ember.inject.service(),
|
auth: service(),
|
||||||
popupNameBinding: 'popup.popupName',
|
popupName: alias('popup.popupName'),
|
||||||
|
|
||||||
id: 'status-images',
|
id: 'status-images',
|
||||||
attributeBindings: ['id'],
|
attributeBindings: ['id'],
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { service } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
export default Ember.Component.extend({
|
||||||
|
auth: service(),
|
||||||
|
user: alias('auth.currentUser'),
|
||||||
classNames: ["sync-button"],
|
classNames: ["sync-button"],
|
||||||
actions: {
|
actions: {
|
||||||
sync() {
|
sync() {
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { service } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
|
auth: service(),
|
||||||
allHooks: [],
|
allHooks: [],
|
||||||
userBinding: 'auth.currentUser',
|
user: alias('auth.currentUser'),
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
var self;
|
var self;
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
const { controller, service } = Ember.inject;
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
repos: Ember.inject.controller(),
|
auth: service(),
|
||||||
userBinding: 'auth.currentUser'
|
repos: controller(),
|
||||||
|
|
||||||
|
user: alias('auth.currentUser'),
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
import GithubUrlProperties from 'travis/mixins/github-url-properties';
|
import GithubUrlProperties from 'travis/mixins/github-url-properties';
|
||||||
|
|
||||||
|
const { service, controller } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Controller.extend(GithubUrlProperties, {
|
export default Ember.Controller.extend(GithubUrlProperties, {
|
||||||
repoController: Ember.inject.controller('repo'),
|
auth: service(),
|
||||||
repoBinding: 'repoController.repo',
|
repoController: controller('repo'),
|
||||||
commitBinding: 'build.commit',
|
|
||||||
currentUserBinding: 'auth.currentUser',
|
repo: alias('repoController.repo'),
|
||||||
tabBinding: 'repoController.tab',
|
currentUser: alias('auth.currentUser'),
|
||||||
|
tab: alias('repoController.tab'),
|
||||||
sendFaviconStateChanges: true,
|
sendFaviconStateChanges: true,
|
||||||
currentItemBinding: 'build',
|
|
||||||
|
|
||||||
jobsLoaded: function() {
|
jobsLoaded: function() {
|
||||||
var jobs;
|
var jobs;
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { controller } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
buildsSorting: ['number:desc'],
|
buildsSorting: ['number:desc'],
|
||||||
builds: Ember.computed.sort('model', 'buildsSorting'),
|
builds: Ember.computed.sort('model', 'buildsSorting'),
|
||||||
repoController: Ember.inject.controller('repo'),
|
repoController: controller('repo'),
|
||||||
repoBinding: 'repoController.repo',
|
repo: alias('repoController.repo'),
|
||||||
tabBinding: 'repoController.tab',
|
tab: alias('repoController.tab'),
|
||||||
isLoadedBinding: 'model.isLoaded',
|
isLoaded: alias('model.isLoaded'),
|
||||||
isLoadingBinding: 'model.isLoading',
|
isLoading: alias('model.isLoading'),
|
||||||
|
|
||||||
showMore() {
|
showMore() {
|
||||||
var id, number, type;
|
var id, number, type;
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
import { githubCommit } from 'travis/utils/urls';
|
import { githubCommit } from 'travis/utils/urls';
|
||||||
|
|
||||||
|
const { service, controller } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
repoController: Ember.inject.controller('repo'),
|
auth: service(),
|
||||||
repoBinding: 'repoController.repo',
|
repoController: controller('repo'),
|
||||||
commitBinding: 'job.commit',
|
repo: alias('repoController.repo'),
|
||||||
currentUserBinding: 'auth.currentUser',
|
currentUser: alias('auth.currentUser'),
|
||||||
tabBinding: 'repoController.tab',
|
tab: alias('repoController.tab'),
|
||||||
currentItemBinding: 'job',
|
|
||||||
|
|
||||||
urlGithubCommit: function() {
|
urlGithubCommit: function() {
|
||||||
return githubCommit(this.get('repo.slug'), this.get('commit.sha'));
|
return githubCommit(this.get('repo.slug'), this.get('commit.sha'));
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { service, controller } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
name: 'profile',
|
name: 'profile',
|
||||||
accountController: Ember.inject.controller('account'),
|
auth: service(),
|
||||||
accountsController: Ember.inject.controller('accounts'),
|
accountController: controller('account'),
|
||||||
userBinding: 'auth.currentUser',
|
accountsController: controller('accounts'),
|
||||||
accountBinding: 'accountController.model',
|
|
||||||
|
user: alias('auth.currentUser'),
|
||||||
|
account: alias('accountController.model'),
|
||||||
|
|
||||||
activate(action, params) {
|
activate(action, params) {
|
||||||
return this[("view_" + action).camelize()]();
|
return this[("view_" + action).camelize()]();
|
||||||
|
|
|
@ -2,17 +2,19 @@ import Ember from 'ember';
|
||||||
import { githubRepo, statusImage } from 'travis/utils/urls';
|
import { githubRepo, statusImage } from 'travis/utils/urls';
|
||||||
import config from 'travis/config/environment';
|
import config from 'travis/config/environment';
|
||||||
|
|
||||||
|
const { service, controller } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
updateTimesService: Ember.inject.service('updateTimes'),
|
updateTimesService: service('updateTimes'),
|
||||||
popup: Ember.inject.service(),
|
popup: service(),
|
||||||
|
|
||||||
jobController: Ember.inject.controller('job'),
|
jobController: controller('job'),
|
||||||
buildController: Ember.inject.controller('build'),
|
buildController: controller('build'),
|
||||||
buildsController: Ember.inject.controller('builds'),
|
buildsController: controller('builds'),
|
||||||
reposController: Ember.inject.controller('repos'),
|
reposController: controller('repos'),
|
||||||
reposBinding: 'reposController.repos',
|
repos: alias('reposController.repos'),
|
||||||
currentUserBinding: 'auth.currentUser',
|
currentUser: alias('auth.currentUser'),
|
||||||
|
|
||||||
classNames: ['repo'],
|
classNames: ['repo'],
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,9 @@ import Ember from 'ember';
|
||||||
import Repo from 'travis/models/repo';
|
import Repo from 'travis/models/repo';
|
||||||
import Config from 'travis/config/environment';
|
import Config from 'travis/config/environment';
|
||||||
|
|
||||||
|
const { service, controller } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
var sortCallback = function(repo1, repo2) {
|
var sortCallback = function(repo1, repo2) {
|
||||||
// this function could be made simpler, but I think it's clearer this way
|
// this function could be made simpler, but I think it's clearer this way
|
||||||
// what're we really trying to achieve
|
// what're we really trying to achieve
|
||||||
|
@ -50,8 +53,9 @@ var sortCallback = function(repo1, repo2) {
|
||||||
|
|
||||||
|
|
||||||
var Controller = Ember.Controller.extend({
|
var Controller = Ember.Controller.extend({
|
||||||
ajax: Ember.inject.service(),
|
auth: service(),
|
||||||
updateTimesService: Ember.inject.service('updateTimes'),
|
ajax: service(),
|
||||||
|
updateTimesService: service('updateTimes'),
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
activate: function(name) {
|
activate: function(name) {
|
||||||
|
@ -82,8 +86,8 @@ var Controller = Ember.Controller.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
isLoaded: false,
|
isLoaded: false,
|
||||||
repoController: Ember.inject.controller('repo'),
|
repoController: controller('repo'),
|
||||||
currentUserBinding: 'auth.currentUser',
|
currentUser: alias('auth.currentUser'),
|
||||||
|
|
||||||
selectedRepo: function() {
|
selectedRepo: function() {
|
||||||
return this.get('repoController.repo.content') || this.get('repoController.repo');
|
return this.get('repoController.repo.content') || this.get('repoController.repo');
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
import config from 'travis/config/environment';
|
import config from 'travis/config/environment';
|
||||||
|
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
const { service } = Ember.inject;
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
userBinding: 'auth.currentUser',
|
auth: service(),
|
||||||
store: Ember.inject.service(),
|
store: service(),
|
||||||
storage: Ember.inject.service(),
|
storage: service(),
|
||||||
currentUserBinding: 'auth.currentUser',
|
|
||||||
|
user: alias('auth.currentUser'),
|
||||||
|
|
||||||
userName: function() {
|
userName: function() {
|
||||||
return this.get('user.name') || this.get('user.login');
|
return this.get('user.name') || this.get('user.login');
|
||||||
|
|
|
@ -2,6 +2,8 @@ import Ember from 'ember';
|
||||||
import attr from 'ember-data/attr';
|
import attr from 'ember-data/attr';
|
||||||
import Model from 'travis/models/model';
|
import Model from 'travis/models/model';
|
||||||
|
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Model.extend({
|
export default Model.extend({
|
||||||
name: attr(),
|
name: attr(),
|
||||||
type: attr(),
|
type: attr(),
|
||||||
|
@ -9,5 +11,5 @@ export default Model.extend({
|
||||||
reposCount: attr('number'),
|
reposCount: attr('number'),
|
||||||
subscribed: attr('boolean'),
|
subscribed: attr('boolean'),
|
||||||
education: attr('boolean'),
|
education: attr('boolean'),
|
||||||
loginBinding: 'id'
|
login: alias('id')
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,45 @@
|
||||||
import BasicRoute from 'travis/routes/basic';
|
import BasicRoute from 'travis/routes/basic';
|
||||||
|
import limit from 'travis/utils/computed-limit';
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default BasicRoute.extend({
|
export default BasicRoute.extend({
|
||||||
|
init: function() {
|
||||||
|
var repos, store;
|
||||||
|
|
||||||
|
store = this.store;
|
||||||
|
repos = Ember.ArrayProxy.extend({
|
||||||
|
isLoaded: alias('repos.isLoaded'),
|
||||||
|
repos: [],
|
||||||
|
sorted: Ember.computed.sort('repos', 'sortedReposKeys'),
|
||||||
|
content: limit('sorted', 'limit'),
|
||||||
|
sortedReposKeys: ['sortOrderForLandingPage:desc'],
|
||||||
|
limit: 3
|
||||||
|
}).create();
|
||||||
|
|
||||||
|
this.set('repos', repos);
|
||||||
|
this.loadMoreRepos();
|
||||||
|
|
||||||
|
return this._super.apply(this, arguments);
|
||||||
|
},
|
||||||
|
|
||||||
|
loadMoreRepos() {
|
||||||
|
return this.store.findAll('build').then( (builds) => {
|
||||||
|
var repoIds, repos;
|
||||||
|
repoIds = builds.mapBy('data.repo').uniq();
|
||||||
|
repos = this.get('repos.repos');
|
||||||
|
return this.store.query('repo', {
|
||||||
|
ids: repoIds
|
||||||
|
}).then(function(reposFromRequest) {
|
||||||
|
return reposFromRequest.toArray().forEach(function(repo) {
|
||||||
|
if (!repos.contains(repo)) {
|
||||||
|
return repos.pushObject(repo);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
activate() {
|
activate() {
|
||||||
return this.controllerFor('top').set('landingPage', true);
|
return this.controllerFor('top').set('landingPage', true);
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
import LimitedArray from 'travis/utils/limited-array';
|
import LimitedArray from 'travis/utils/limited-array';
|
||||||
|
|
||||||
|
const { service } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Service.extend({
|
export default Ember.Service.extend({
|
||||||
store: Ember.inject.service(),
|
auth: service(),
|
||||||
currentUserBinding: 'auth.currentUser',
|
store: service(),
|
||||||
|
currentUser: alias('auth.currentUser'),
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<h1>{{accountName}}</h1>
|
<h1>{{accountName}}</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{sync-button user=auth.currentUser}}
|
{{sync-button}}
|
||||||
|
|
||||||
{{#if user.isSyncing}}
|
{{#if user.isSyncing}}
|
||||||
{{#unless config.enterprise}}
|
{{#unless config.enterprise}}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
{{loading-indicator}}
|
{{loading-indicator}}
|
||||||
{{else}}
|
{{else}}
|
||||||
|
|
||||||
{{build-header item=build user=auth.currentUser commit=commit repo=repo}}
|
{{build-header item=build commit=build.commit repo=repo}}
|
||||||
|
|
||||||
{{#if build.isMatrix}}
|
{{#if build.isMatrix}}
|
||||||
{{#if jobsLoaded}}
|
{{#if jobsLoaded}}
|
||||||
|
|
|
@ -82,8 +82,8 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="build-tools">
|
<div class="build-tools">
|
||||||
{{#if isJob}}
|
{{#if isJob}}
|
||||||
{{repo-actions job=item repo=item.repo user=auth.currentUser}}
|
{{repo-actions job=item repo=item.repo}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{repo-actions build=item repo=item.repo user=user}}
|
{{repo-actions build=item repo=item.repo}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{{! TODO: when `component` helper is available we could just use
|
{{! TODO: when `component` helper is available we could just use
|
||||||
with a component name based on type that is passed here }}
|
with a component name based on type that is passed here }}
|
||||||
{{#if job}}
|
{{#if job}}
|
||||||
{{job-repo-actions job=job user=user repo=repo}}
|
{{job-repo-actions job=job repo=repo}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{build-repo-actions build=build user=user repo=repo}}
|
{{build-repo-actions build=build repo=repo}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<div class="dashboard-header">
|
<div class="dashboard-header">
|
||||||
{{orgs-filter orgs=orgs selected=selectedOrg action="selectOrg"}}
|
{{orgs-filter orgs=orgs selected=selectedOrg action="selectOrg"}}
|
||||||
{{sync-button user=auth.currentUser}}
|
{{sync-button}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="dashboard-repos">
|
<div class="dashboard-repos">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{{#job-wrapper repo=repo job=job}}
|
{{#job-wrapper repo=repo job=job}}
|
||||||
{{#if job.isLoaded}}
|
{{#if job.isLoaded}}
|
||||||
|
|
||||||
{{build-header item=job user=auth.currentUser commit=job.commit repo=repo}}
|
{{build-header item=job commit=job.commit repo=repo}}
|
||||||
|
|
||||||
{{job-log job=job}}
|
{{job-log job=job}}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
</header>
|
</header>
|
||||||
<main class="repo-main">
|
<main class="repo-main">
|
||||||
<div class="repo-navigation">
|
<div class="repo-navigation">
|
||||||
{{repo-show-tools repo=repo build=build job=job tab=tab currentUser=auth.currentUser}}
|
{{repo-show-tools repo=repo build=build job=job tab=tab}}
|
||||||
|
|
||||||
{{repo-show-tabs repo=repo tab=tab build=build job=job}}
|
{{repo-show-tabs repo=repo tab=tab build=build job=job}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{{not-active user=currentUser repo=repo}}
|
{{not-active repo=repo}}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
import limit from 'travis/utils/computed-limit';
|
import limit from 'travis/utils/computed-limit';
|
||||||
|
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.ArrayProxy.extend({
|
export default Ember.ArrayProxy.extend({
|
||||||
limit: 10,
|
limit: 10,
|
||||||
isLoadedBinding: 'content.isLoaded',
|
isLoaded: alias('content.isLoaded'),
|
||||||
arrangedContent: limit('content', 'limit'),
|
arrangedContent: limit('content', 'limit'),
|
||||||
|
|
||||||
totalLength: function() {
|
totalLength: function() {
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
const { service } = Ember.inject;
|
||||||
|
const { alias } = Ember.computed;
|
||||||
|
|
||||||
export default Ember.Mixin.create({
|
export default Ember.Mixin.create({
|
||||||
|
auth: service(),
|
||||||
restarting: false,
|
restarting: false,
|
||||||
cancelling: false,
|
cancelling: false,
|
||||||
|
|
||||||
|
user: alias('auth.currentUser'),
|
||||||
|
|
||||||
userHasPermissionForRepo: function() {
|
userHasPermissionForRepo: function() {
|
||||||
var repo, user;
|
var repo, user;
|
||||||
repo = this.get('repo');
|
repo = this.get('repo');
|
||||||
|
|
|
@ -1,7 +1,24 @@
|
||||||
import { test, moduleForComponent } from 'ember-qunit';
|
import { test, moduleForComponent } from 'ember-qunit';
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
let userStub = Ember.Object.extend({
|
||||||
|
hasAccessToRepo: function(repo) {
|
||||||
|
ok(repo.get('id', 44));
|
||||||
|
ok(true, 'hasAccessToRepo was called');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}).create();
|
||||||
|
|
||||||
|
// stub auth service
|
||||||
|
const authStub = Ember.Service.extend({
|
||||||
|
currentUser: userStub
|
||||||
|
});
|
||||||
|
|
||||||
moduleForComponent('build-repo-actions', 'BuildRepoActionsComponent', {
|
moduleForComponent('build-repo-actions', 'BuildRepoActionsComponent', {
|
||||||
unit: true
|
unit: true,
|
||||||
|
beforeEach() {
|
||||||
|
this.register('service:auth', authStub);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('it shows cancel button if canCancel is true', function() {
|
test('it shows cancel button if canCancel is true', function() {
|
||||||
|
@ -62,15 +79,7 @@ test('it properly checks for user permissions for a repo', function() {
|
||||||
repo = Ember.Object.create({
|
repo = Ember.Object.create({
|
||||||
id: 44
|
id: 44
|
||||||
});
|
});
|
||||||
user = Ember.Object.extend({
|
|
||||||
hasAccessToRepo: function(repo) {
|
|
||||||
ok(repo.get('id', 44));
|
|
||||||
ok(true, 'hasAccessToRepo was called');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}).create();
|
|
||||||
component = this.subject({
|
component = this.subject({
|
||||||
user: user,
|
|
||||||
repo: repo
|
repo: repo
|
||||||
});
|
});
|
||||||
return ok(!component.get('userHasPermissionForRepo'), 'user should not have access to a repo');
|
return ok(!component.get('userHasPermissionForRepo'), 'user should not have access to a repo');
|
||||||
|
|
|
@ -1,8 +1,24 @@
|
||||||
import { test, moduleForComponent } from 'ember-qunit';
|
import { test, moduleForComponent } from 'ember-qunit';
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
|
||||||
|
let userStub = Ember.Object.extend({
|
||||||
|
hasAccessToRepo: function(repo) {
|
||||||
|
ok(repo.get('id', 44));
|
||||||
|
ok(true, 'hasAccessToRepo was called');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}).create();
|
||||||
|
|
||||||
|
// stub auth service
|
||||||
|
const authStub = Ember.Service.extend({
|
||||||
|
currentUser: userStub
|
||||||
|
});
|
||||||
|
|
||||||
moduleForComponent('job-repo-actions', 'JobRepoActionsComponent', {
|
moduleForComponent('job-repo-actions', 'JobRepoActionsComponent', {
|
||||||
unit: true
|
unit: true,
|
||||||
|
beforeEach() {
|
||||||
|
this.register('service:auth', authStub);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('it shows cancel button if canCancel is true', function() {
|
test('it shows cancel button if canCancel is true', function() {
|
||||||
|
@ -63,15 +79,7 @@ test('it properly checks for user permissions for a repo', function() {
|
||||||
repo = Ember.Object.create({
|
repo = Ember.Object.create({
|
||||||
id: 44
|
id: 44
|
||||||
});
|
});
|
||||||
user = Ember.Object.extend({
|
|
||||||
hasAccessToRepo: function(repo) {
|
|
||||||
ok(repo.get('id', 44));
|
|
||||||
ok(true, 'hasAccessToRepo was called');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}).create();
|
|
||||||
component = this.subject({
|
component = this.subject({
|
||||||
user: user,
|
|
||||||
repo: repo
|
repo: repo
|
||||||
});
|
});
|
||||||
return ok(!component.get('userHasPermissionForRepo'), 'user should not have access to a repo');
|
return ok(!component.get('userHasPermissionForRepo'), 'user should not have access to a repo');
|
||||||
|
|
Loading…
Reference in New Issue
Block a user