diff --git a/app/components/repo-show-tools.js b/app/components/repo-show-tools.js index de63a3cf..a5f8f016 100644 --- a/app/components/repo-show-tools.js +++ b/app/components/repo-show-tools.js @@ -1,7 +1,8 @@ import Ember from 'ember'; import config from 'travis/config/environment'; +import Permissions from 'travis/mixins/permissions'; -export default Ember.Component.extend({ +export default Ember.Component.extend(Permissions, { popup: Ember.inject.service(), classNames: ['option-button'], classNameBindings: ['isOpen:display'], @@ -22,37 +23,16 @@ export default Ember.Component.extend({ return this.toggleProperty('isOpen'); } }, - - hasPermission: function() { - var permissions; - if (permissions = this.get('currentUser.permissions')) { - return permissions.contains(parseInt(this.get('repo.id'))); - } - }.property('currentUser.permissions.length', 'repo.id'), - - hasPushPermission: function() { - var permissions; - if (permissions = this.get('currentUser.pushPermissions')) { - return permissions.contains(parseInt(this.get('repo.id'))); - } - }.property('currentUser.pushPermissions.length', 'repo.id'), - - hasAdminPermission: function() { - var permissions; - if (permissions = this.get('currentUser.adminPermissions')) { - return permissions.contains(parseInt(this.get('repo.id'))); - } - }.property('currentUser.adminPermissions.length', 'repo.id'), - displaySettingsLink: function() { - return this.get('hasPushPermission'); - }.property('hasPushPermission'), + return this.hasPushPermission(this.get('currentUser'), this.get('repo.id')); + }.property('currentUser.pushPermissions', 'repo.id'), displayCachesLink: function() { - return this.get('hasPushPermission') && config.endpoints.caches; - }.property('hasPushPermission'), + return this.hasPushPermission(this.get('currentUser'), this.get('repo.id')) && config.endpoints.caches; + }.property('currentUser.pushPermissions', 'repo.id'), displayStatusImages: function() { - return this.get('hasPermission'); - }.property('hasPermission') + return this.hasPermission(this.get('currentUser'), this.get('repo.id')); + }.property('currentUser.permissions', 'repo.id') + }); diff --git a/app/mixins/permissions.js b/app/mixins/permissions.js new file mode 100644 index 00000000..44d3eb0b --- /dev/null +++ b/app/mixins/permissions.js @@ -0,0 +1,26 @@ +import Ember from 'ember'; + +export default Ember.Mixin.create({ + + hasPermission: function(currentUser, repoId) { + var id = parseInt(repoId); + var permissions; + if (permissions = this.get('currentUser.permissions')) { + return permissions.contains(id); + } + }, + hasPushPermission: function(currentUser, repoId) { + var id = parseInt(repoId); + var permissions; + if (permissions = this.get('currentUser.pushPermissions')) { + return permissions.contains(id); + } + }, + hasAdminPermission: function(currentUser, repoId) { + var id = parseInt(repoId); + var permissions; + if (permissions = this.get('currentUser.adminPermissions')) { + return permissions.contains(id); + } + } +}); diff --git a/tests/unit/mixins/permissions-test.js b/tests/unit/mixins/permissions-test.js new file mode 100644 index 00000000..6428841f --- /dev/null +++ b/tests/unit/mixins/permissions-test.js @@ -0,0 +1,12 @@ +import Ember from 'ember'; +import PermissionsMixin from 'travis/mixins/permissions'; +import { module, test } from 'qunit'; + +module('Unit | Mixin | permissions'); + +// Replace this with your real tests. +test('it works', function(assert) { + let PermissionsObject = Ember.Object.extend(PermissionsMixin); + let subject = PermissionsObject.create(); + assert.ok(subject); +});