From 36058f79b95ed2113d21165a9399e698ed5c22f9 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 2 Sep 2015 09:49:45 +0200 Subject: [PATCH 1/7] Add error handling for the owner route --- app/controllers/error.coffee | 5 +++++ app/routes/basic.coffee | 5 +++++ app/routes/error.js | 10 ++++++++++ app/routes/owner.coffee | 14 +++++++++++++- app/templates/error.hbs | 5 +++++ app/templates/owner/error.hbs | 1 + app/views/error.coffee | 9 +++++++++ 7 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 app/controllers/error.coffee create mode 100644 app/routes/error.js create mode 100644 app/templates/error.hbs create mode 100644 app/templates/owner/error.hbs create mode 100644 app/views/error.coffee diff --git a/app/controllers/error.coffee b/app/controllers/error.coffee new file mode 100644 index 00000000..90babea0 --- /dev/null +++ b/app/controllers/error.coffee @@ -0,0 +1,5 @@ +`import Ember from 'ember'` + +Controller = Ember.Controller.extend() + +`export default Controller` diff --git a/app/routes/basic.coffee b/app/routes/basic.coffee index e6c5af54..3449337d 100644 --- a/app/routes/basic.coffee +++ b/app/routes/basic.coffee @@ -2,6 +2,11 @@ `import Ember from 'ember'` Route = Ember.Route.extend + activate: -> + if @routeName != 'error' + @controllerFor('error').set('layoutName', null) + return @_super.apply(this, arguments) + beforeModel: (transition) -> @auth.autoSignIn() unless @signedIn() diff --git a/app/routes/error.js b/app/routes/error.js new file mode 100644 index 00000000..5231b4cc --- /dev/null +++ b/app/routes/error.js @@ -0,0 +1,10 @@ +import TravisRoute from 'travis/routes/basic'; + +export default TravisRoute.extend({ + resetController(controller, isExiting, transition) { + if (isExiting) { + controller.set('message', null); + controller.set('layoutName', null); + } + } +}); diff --git a/app/routes/owner.coffee b/app/routes/owner.coffee index 2ae81837..8e134009 100644 --- a/app/routes/owner.coffee +++ b/app/routes/owner.coffee @@ -4,7 +4,6 @@ `import config from 'travis/config/environment'` Route = TravisRoute.extend - deactivate: -> @controllerFor('loading').set('layoutName', null) @@ -19,4 +18,17 @@ Route = TravisRoute.extend @_super.apply(this, arguments) + actions: + error: (error, transition, originRoute) -> + login = transition.params.owner.owner + message = if error.status == 404 + "Couldn't find an owner with login \"#{login}\"" + else + "There was an error while loading data, please try again." + + @controllerFor('error').set('layoutName', 'simple') + @controllerFor('error').set('message', message) + + return true + `export default Route` diff --git a/app/templates/error.hbs b/app/templates/error.hbs new file mode 100644 index 00000000..9653e44f --- /dev/null +++ b/app/templates/error.hbs @@ -0,0 +1,5 @@ +{{#if message}} + {{message}} +{{else}} + There was an error, please try again. +{{/if}} diff --git a/app/templates/owner/error.hbs b/app/templates/owner/error.hbs new file mode 100644 index 00000000..257cc564 --- /dev/null +++ b/app/templates/owner/error.hbs @@ -0,0 +1 @@ +foo diff --git a/app/views/error.coffee b/app/views/error.coffee new file mode 100644 index 00000000..fd4d7995 --- /dev/null +++ b/app/views/error.coffee @@ -0,0 +1,9 @@ +`import Ember from 'ember'` + +View = Ember.View.extend + layoutName: (-> + if name = @get('controller.layoutName') + 'layouts/' + name + ).property('controller.layoutName') + +`export default View` From 13ce7f88bd9a91b5647002806dcdb1dfd3976153 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Mon, 7 Sep 2015 13:21:57 +0200 Subject: [PATCH 2/7] Fix getting push access data on settings reload --- app/models/user.coffee | 6 ++++++ app/routes/settings.coffee | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/models/user.coffee b/app/models/user.coffee index 964098f1..a3524584 100644 --- a/app/models/user.coffee +++ b/app/models/user.coffee @@ -54,6 +54,12 @@ User = Model.extend permissions ).property() + # TODO: permissions are loading asynchronously at the moment, so this should + # be the way to return them for all types: + pushPermissionsPromise: (-> + @get('_rawPermissions').then (data) => data.pull + ).property() + hasAccessToRepo: (repo) -> id = if repo.get then repo.get('id') else repo diff --git a/app/routes/settings.coffee b/app/routes/settings.coffee index 226f4de8..0945c35e 100644 --- a/app/routes/settings.coffee +++ b/app/routes/settings.coffee @@ -43,10 +43,11 @@ Route = TravisRoute.extend ); hasPushAccess: -> - repoId = parseInt @modelFor('repo').get('id') + repoId = parseInt(@modelFor('repo').get('id')) - @auth.get('currentUser').get('pushPermissions').filter (item) -> - item == repoId + @auth.get('currentUser').get('pushPermissionsPromise').then (permissions) -> + permissions.filter (item) -> + item == repoId model: () -> return Ember.RSVP.hash({ From b047f4920db2c65fb1f127a14f615579c6c72b7d Mon Sep 17 00:00:00 2001 From: Lisa P Date: Mon, 7 Sep 2015 16:24:43 +0200 Subject: [PATCH 3/7] fix ssh-key errors handling --- app/components/add-ssh-key.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/add-ssh-key.coffee b/app/components/add-ssh-key.coffee index 0a77c7b7..1f414097 100644 --- a/app/components/add-ssh-key.coffee +++ b/app/components/add-ssh-key.coffee @@ -38,7 +38,7 @@ AddSshKeyComponent = Ember.Component.extend ).observes('value') addErrorsFromResponse: (errArr) -> - error = errArr[0] + error = errArr[0].detail if error.code == 'not_a_private_key' this.set('valueError', 'This key is not a private key.') else if error.code == 'key_with_a_passphrase' From dda11feb33a85925c2e16077bcf4c08cdcba94dd Mon Sep 17 00:00:00 2001 From: Lisa P Date: Mon, 7 Sep 2015 16:43:02 +0200 Subject: [PATCH 4/7] comment out SL ff and chrome stuff --- testem.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testem.json b/testem.json index 5f909db9..d5ce7e2c 100644 --- a/testem.json +++ b/testem.json @@ -2,8 +2,8 @@ "framework": "qunit", "test_page": "tests/index.html?hidepassed", "launch_in_ci": [ - "SL_chrome", - "SL_firefox", + // "SL_chrome", + // "SL_firefox", "PhantomJS" ], "launch_in_dev": [ From a8d585cb74a3ff9a2f8e4df40b16ea5d7481dc65 Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Tue, 8 Sep 2015 15:24:14 -0400 Subject: [PATCH 5/7] Remove invalid data --- testem.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/testem.json b/testem.json index d5ce7e2c..e5e2046a 100644 --- a/testem.json +++ b/testem.json @@ -2,8 +2,6 @@ "framework": "qunit", "test_page": "tests/index.html?hidepassed", "launch_in_ci": [ - // "SL_chrome", - // "SL_firefox", "PhantomJS" ], "launch_in_dev": [ From ca54a642116839f4fdf107093a3a3972c5446606 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 9 Sep 2015 10:36:12 +0200 Subject: [PATCH 6/7] Fix flash messages --- app/components/flash-display.coffee | 49 ++------------------------- app/controllers/flash.js | 9 +++++ app/initializers/auth.coffee | 1 + app/services/flashes.coffee | 51 +++++++++++++++++++++++++++++ app/templates/layouts/flash.hbs | 1 - 5 files changed, 64 insertions(+), 47 deletions(-) create mode 100644 app/controllers/flash.js create mode 100644 app/services/flashes.coffee delete mode 100644 app/templates/layouts/flash.hbs diff --git a/app/components/flash-display.coffee b/app/components/flash-display.coffee index dcf379a0..bb21f6a0 100644 --- a/app/components/flash-display.coffee +++ b/app/components/flash-display.coffee @@ -1,58 +1,15 @@ `import Ember from 'ember'` -`import LimitedArray from 'travis/utils/limited-array'` FlashDisplayComponent = Ember.Component.extend - auth: Ember.inject.service() - store: Ember.inject.service() - currentUserBinding: 'auth.currentUser' + flashes: Ember.inject.service() classNames: ['flash'] tagName: 'ul' - init: -> - @_super.apply this, arguments - @set('flashes', LimitedArray.create(limit: 1, content: [])) - - messages: (-> - broadcasts = @get('unseenBroadcasts') - flashes = @get('flashes') - model = [] - model.pushObjects(broadcasts) if broadcasts - model.pushObjects(flashes.toArray().reverse()) if flashes - model.uniq() - ).property('unseenBroadcasts.[]', 'flashes.[]', 'unseenBroadcasts.length', 'flashes.length') - - unseenBroadcasts: (-> - @get('broadcasts').filter (broadcast) -> - !broadcast.get('isSeen') - ).property('broadcasts.[]', 'broadcasts.length') - - broadcasts: (-> - broadcasts = Ember.ArrayProxy.create(content: []) - - if @get('currentUser.id') - @get('store').find('broadcast').then (result) -> - broadcasts.pushObjects(result.toArray()) - - broadcasts - ).property('currentUser.id') - - loadFlashes: (msgs) -> - for msg in msgs - type = Object.keys(msg)[0] - msg = { type: type, message: msg[type] } - @get('flashes').unshiftObject(msg) - Ember.run.later(this, (-> @get('flashes.content').removeObject(msg)), 15000) - - close: (msg) -> - if msg.constructor.modelName == "broadcast" - msg.setSeen() - @notifyPropertyChange('unseenBroadcasts') - else - @get('flashes').removeObject(msg) + messagesBinding: 'flashes.messages' actions: closeMessage: (msg) -> - @close(msg) + @get('flashes').close(msg) `export default FlashDisplayComponent` diff --git a/app/controllers/flash.js b/app/controllers/flash.js new file mode 100644 index 00000000..0b56c699 --- /dev/null +++ b/app/controllers/flash.js @@ -0,0 +1,9 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + flashes: Ember.inject.service(), + + loadFlashes() { + return this.get('flashes').loadFlashes(...arguments); + } +}); diff --git a/app/initializers/auth.coffee b/app/initializers/auth.coffee index d3706644..5f18a20f 100644 --- a/app/initializers/auth.coffee +++ b/app/initializers/auth.coffee @@ -8,6 +8,7 @@ initialize = (container, app) -> app.inject('controller', 'auth', 'auth:main') app.inject('application', 'auth', 'auth:main') app.inject('component', 'auth', 'auth:main') + app.inject('service:flashes', 'auth', 'auth:main') app.inject('auth', 'store', 'service:store') diff --git a/app/services/flashes.coffee b/app/services/flashes.coffee new file mode 100644 index 00000000..db3ad895 --- /dev/null +++ b/app/services/flashes.coffee @@ -0,0 +1,51 @@ +`import Ember from 'ember'` +`import LimitedArray from 'travis/utils/limited-array'` + +FlashesService = Ember.Service.extend + store: Ember.inject.service() + + currentUserBinding: 'auth.currentUser' + + init: -> + @_super.apply this, arguments + @set('flashes', LimitedArray.create(limit: 1, content: [])) + + messages: (-> + broadcasts = @get('unseenBroadcasts') + flashes = @get('flashes') + model = [] + model.pushObjects(broadcasts) if broadcasts + model.pushObjects(flashes.toArray().reverse()) if flashes + model.uniq() + ).property('unseenBroadcasts.[]', 'flashes.[]', 'unseenBroadcasts.length', 'flashes.length') + + unseenBroadcasts: (-> + @get('broadcasts').filter (broadcast) -> + !broadcast.get('isSeen') + ).property('broadcasts.[]', 'broadcasts.length') + + broadcasts: (-> + broadcasts = Ember.ArrayProxy.create(content: []) + + if @get('currentUser.id') + @get('store').find('broadcast').then (result) -> + broadcasts.pushObjects(result.toArray()) + + broadcasts + ).property('currentUser.id') + + loadFlashes: (msgs) -> + for msg in msgs + type = Object.keys(msg)[0] + msg = { type: type, message: msg[type] } + @get('flashes').unshiftObject(msg) + Ember.run.later(this, (-> @get('flashes.content').removeObject(msg)), 15000) + + close: (msg) -> + if msg.constructor.modelName == "broadcast" + msg.setSeen() + @notifyPropertyChange('unseenBroadcasts') + else + @get('flashes').removeObject(msg) + +`export default FlashesService` diff --git a/app/templates/layouts/flash.hbs b/app/templates/layouts/flash.hbs deleted file mode 100644 index 8b137891..00000000 --- a/app/templates/layouts/flash.hbs +++ /dev/null @@ -1 +0,0 @@ - From ad40e7b53a3c4bd61de91b0d16e73fec8a6933dd Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 9 Sep 2015 10:36:52 +0200 Subject: [PATCH 7/7] Try to disable sauce addon for now --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8f0481f8..0fa0207b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,8 +16,8 @@ matrix: fast_finish: true -addons: - sauce_connect: true +#addons: +# sauce_connect: true sudo: false