From fcff3f549d2745df74a3e2bd9e0f283421a49cbc Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 19 Aug 2015 15:38:16 +0200 Subject: [PATCH 01/14] Update ember-cli to 1.13.8, ember.js to 1.13.8 and ember-data to 1.13.9 --- bower.json | 8 ++++---- package.json | 21 +++++++++++---------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/bower.json b/bower.json index 8e938bf4..ca6fd06e 100644 --- a/bower.json +++ b/bower.json @@ -2,11 +2,11 @@ "name": "travis", "dependencies": { "handlebars": "2.0.0", - "jquery": "^1.11.1", - "ember": "1.13.6", - "ember-data": "1.0.0-beta.16.1", + "jquery": "^1.11.3", + "ember": "1.13.8", + "ember-data": "1.13.9", "ember-resolver": "~0.1.15", - "loader.js": "ember-cli/loader.js#1.0.1", + "loader.js": "ember-cli/loader.js#3.2.1", "ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3", "ember-cli-test-loader": "ember-cli/ember-cli-test-loader#0.1.0", "ember-load-initializers": "ember-cli/ember-load-initializers#0.1.4", diff --git a/package.json b/package.json index 974b3fbf..55c88689 100644 --- a/package.json +++ b/package.json @@ -19,27 +19,28 @@ "author": "", "license": "MIT", "devDependencies": { - "broccoli-asset-rev": "^2.0.2", + "broccoli-asset-rev": "^2.1.2", "broccoli-sass": "0.6.6", - "ember-cli": "1.13.7", - "ember-cli-app-version": "0.4.0", + "ember-cli": "1.13.8", + "ember-cli-app-version": "0.5.0", "ember-cli-autoprefixer": "^0.3.0", - "ember-cli-babel": "5.0.0", + "ember-cli-babel": "5.1.3", "ember-cli-coffeescript": "0.10.0", "ember-cli-content-security-policy": "0.4.0", - "ember-cli-dependency-checker": "0.0.8", + "ember-cli-dependency-checker": "1.0.1", "ember-cli-document-title": "0.1.0", "ember-cli-htmlbars": "0.7.9", - "ember-cli-htmlbars-inline-precompile": "^0.1.1", + "ember-cli-htmlbars-inline-precompile": "^0.2.0", "ember-cli-ic-ajax": "0.2.1", - "ember-cli-inject-live-reload": "^1.3.0", + "ember-cli-inject-live-reload": "^1.3.1", "ember-cli-inline-images": "^0.0.4", "ember-cli-pretender": "0.3.1", - "ember-cli-qunit": "0.3.20", + "ember-cli-qunit": "1.0.0", + "ember-cli-sri": "^1.0.3", "ember-cli-release": "0.2.3", "ember-cli-sauce": "^1.1.0", - "ember-cli-uglify": "1.0.1", - "ember-data": "1.13.5", + "ember-cli-uglify": "1.2.0", + "ember-data": "1.13.9", "ember-export-application-global": "^1.0.2", "ember-try": "0.0.7" } From 2e5c3c8a2d1e12b075c6ba9be9d9af30bc6d5680 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Thu, 20 Aug 2015 10:54:13 +0200 Subject: [PATCH 02/14] Remove some more deprecations --- app/app.coffee | 13 -------- app/controllers/flash.coffee | 2 +- app/helpers/capitalize.coffee | 10 ------- app/helpers/format-commit.coffee | 3 +- app/helpers/format-duration.coffee | 4 +-- app/helpers/format-sha.coffee | 4 +-- app/helpers/format-time.coffee | 4 +-- app/helpers/github-commit-link.coffee | 4 ++- app/helpers/humanize-state.coffee | 3 +- app/helpers/input.coffee | 30 ------------------- .../landing-page-last-build-time.coffee | 4 +-- app/helpers/pretty-date.coffee | 4 +-- app/helpers/short-compare-shas.coffee | 3 +- app/helpers/travis-errors.coffee | 24 --------------- app/helpers/travis-field.coffee | 25 ---------------- app/helpers/{mb.coffee => travis-mb.coffee} | 2 +- app/initializers/auth.coffee | 2 +- app/initializers/pusher.coffee | 5 +--- app/instance-initializers/pusher.coffee | 10 +++++++ app/{ => services}/store.coffee | 2 -- app/templates/components/caches-item.hbs | 2 +- 21 files changed, 34 insertions(+), 126 deletions(-) delete mode 100644 app/helpers/capitalize.coffee delete mode 100644 app/helpers/input.coffee delete mode 100644 app/helpers/travis-errors.coffee delete mode 100644 app/helpers/travis-field.coffee rename app/helpers/{mb.coffee => travis-mb.coffee} (63%) create mode 100644 app/instance-initializers/pusher.coffee rename app/{ => services}/store.coffee (99%) diff --git a/app/app.coffee b/app/app.coffee index 8aa55baa..3c0e0168 100644 --- a/app/app.coffee +++ b/app/app.coffee @@ -3,19 +3,6 @@ `import loadInitializers from 'ember/load-initializers'` `import config from './config/environment'` -`import mb from 'travis/helpers/mb'` -`import label from 'travis/helpers/label'` -`import travisField from 'travis/helpers/travis-field'` -`import travisErrors from 'travis/helpers/travis-errors'` -#`import input from 'travis/helpers/input'` -`import filterInput from 'travis/helpers/filter-input'` -Ember.HTMLBars._registerHelper('label', label) -Ember.HTMLBars._registerHelper('travis-field', travisField) -Ember.HTMLBars._registerHelper('travis-errors', travisErrors) -#Ember.Handlebars.registerHelper('input', input) -Ember.HTMLBars._registerHelper('filter-input', filterInput) -Ember.Handlebars.registerBoundHelper('mb', mb) - Ember.MODEL_FACTORY_INJECTIONS = true App = Ember.Application.extend(Ember.Evented, diff --git a/app/controllers/flash.coffee b/app/controllers/flash.coffee index 650d2081..63db2451 100644 --- a/app/controllers/flash.coffee +++ b/app/controllers/flash.coffee @@ -36,7 +36,7 @@ Controller = Ember.ArrayController.extend loadFlashes: (msgs) -> for msg in msgs - type = Ember.keys(msg)[0] + 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) diff --git a/app/helpers/capitalize.coffee b/app/helpers/capitalize.coffee deleted file mode 100644 index aacda844..00000000 --- a/app/helpers/capitalize.coffee +++ /dev/null @@ -1,10 +0,0 @@ -`import { safe } from 'travis/utils/helpers'` -`import Ember from "ember"` - -helper = Ember.Handlebars.makeBoundHelper (value, options) -> - if value? - safe $.capitalize(value) - else - '' - -`export default helper` diff --git a/app/helpers/format-commit.coffee b/app/helpers/format-commit.coffee index aaf63643..1e488ac0 100644 --- a/app/helpers/format-commit.coffee +++ b/app/helpers/format-commit.coffee @@ -1,6 +1,7 @@ `import { safe, formatCommit as formatCommitHelper } from 'travis/utils/helpers'` -helper = Ember.Handlebars.makeBoundHelper (commit) -> +helper = Ember.HTMLBars.makeBoundHelper (params) -> + commit = params[0] safe formatCommitHelper(commit.get('sha'), commit.get('branch')) if commit `export default helper` diff --git a/app/helpers/format-duration.coffee b/app/helpers/format-duration.coffee index 2e5b6e12..9e39dc53 100644 --- a/app/helpers/format-duration.coffee +++ b/app/helpers/format-duration.coffee @@ -1,7 +1,7 @@ `import { timeInWords, safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (duration, options) -> - safe timeInWords(duration) +helper = Ember.HTMLBars.makeBoundHelper (params) -> + safe timeInWords(params[0]) `export default helper` diff --git a/app/helpers/format-sha.coffee b/app/helpers/format-sha.coffee index 30f6e444..d0c622bd 100644 --- a/app/helpers/format-sha.coffee +++ b/app/helpers/format-sha.coffee @@ -1,7 +1,7 @@ `import { formatSha as _formatSha, safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (sha) -> - safe _formatSha(sha) +helper = Ember.HTMLBars.makeBoundHelper (params) -> + safe _formatSha(params[0]) `export default helper` diff --git a/app/helpers/format-time.coffee b/app/helpers/format-time.coffee index 19d21b1a..73078609 100644 --- a/app/helpers/format-time.coffee +++ b/app/helpers/format-time.coffee @@ -1,7 +1,7 @@ `import { timeAgoInWords, safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (value, options) -> - safe timeAgoInWords(value) || '-' +helper = Ember.HTMLBars.makeBoundHelper (params) -> + safe timeAgoInWords(params[0]) || '-' `export default helper` diff --git a/app/helpers/github-commit-link.coffee b/app/helpers/github-commit-link.coffee index e274f270..1b50db32 100644 --- a/app/helpers/github-commit-link.coffee +++ b/app/helpers/github-commit-link.coffee @@ -1,7 +1,9 @@ `import { formatCommit, safe } from 'travis/utils/helpers'` `import { githubCommit as githubCommitUrl } from 'travis/utils/urls'` -helper = Ember.Handlebars.makeBoundHelper (slug, commitSha) -> +helper = Ember.HTMLBars.makeBoundHelper (params) -> + slug = params[0] + commitSha = params[1] return '' unless commitSha sha = Ember.Handlebars.Utils.escapeExpression formatCommit(commitSha) return sha unless slug diff --git a/app/helpers/humanize-state.coffee b/app/helpers/humanize-state.coffee index ad01c870..f7083b15 100644 --- a/app/helpers/humanize-state.coffee +++ b/app/helpers/humanize-state.coffee @@ -1,7 +1,8 @@ `import { safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (state) -> +helper = Ember.HTMLBars.makeBoundHelper (params) -> + state = params[0] if state == 'received' 'booting' else diff --git a/app/helpers/input.coffee b/app/helpers/input.coffee deleted file mode 100644 index dc817a07..00000000 --- a/app/helpers/input.coffee +++ /dev/null @@ -1,30 +0,0 @@ -`import Ember from 'ember'` - -originalInputHelper = Ember.Handlebars.helpers.input - -input = (options) -> - # for now I can match label only with the property name - # passed here matches the label - name = (options.hash.value || options.hash.checked) - id = options.hash.id - - # generate id only if it's not given - if name && !name.match(/\./) && !id - labels = @get('_labels') - unless labels - labels = Ember.Object.create() - @set('_labels', labels) - - # for now I support only label + input in their own context - id = labels.get(name) - unless id - id = "#{name}-#{Math.round(Math.random() * 1000000)}" - labels.set(name, id) - - options.hash.id = id - options.hashTypes.id = 'STRING' - options.hashContexts.id = this - - originalInputHelper.call(this, options) - -`export default input` diff --git a/app/helpers/landing-page-last-build-time.coffee b/app/helpers/landing-page-last-build-time.coffee index 424bcde3..83b57769 100644 --- a/app/helpers/landing-page-last-build-time.coffee +++ b/app/helpers/landing-page-last-build-time.coffee @@ -1,7 +1,7 @@ `import { timeAgoInWords, safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (value, options) -> - safe timeAgoInWords(value) || 'currently running' +helper = Ember.HTMLBars.makeBoundHelper (params) -> + safe timeAgoInWords(params[0]) || 'currently running' `export default helper` diff --git a/app/helpers/pretty-date.coffee b/app/helpers/pretty-date.coffee index b100b1db..455e9a2b 100644 --- a/app/helpers/pretty-date.coffee +++ b/app/helpers/pretty-date.coffee @@ -1,7 +1,7 @@ `import { timeAgoInWords, safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (value, options) -> - safe moment(value).format('MMMM D, YYYY H:mm:ss') || '-' +helper = Ember.HTMLBars.makeBoundHelper (params) -> + safe moment(params[0]).format('MMMM D, YYYY H:mm:ss') || '-' `export default helper` diff --git a/app/helpers/short-compare-shas.coffee b/app/helpers/short-compare-shas.coffee index 606dc491..5d462170 100644 --- a/app/helpers/short-compare-shas.coffee +++ b/app/helpers/short-compare-shas.coffee @@ -1,7 +1,8 @@ `import { pathFrom } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (url, options) -> +helper = Ember.HTMLBars.makeBoundHelper (params) -> + url = params[0] path = pathFrom(url) if path.indexOf('...') >= 0 shas = path.split('...') diff --git a/app/helpers/travis-errors.coffee b/app/helpers/travis-errors.coffee deleted file mode 100644 index 445a6cad..00000000 --- a/app/helpers/travis-errors.coffee +++ /dev/null @@ -1,24 +0,0 @@ -`import Ember from 'ember'` - -ErrorsView = Ember.View.extend - tagName: 'span' - templateName: 'helpers/travis-errors' - classNames: ['error'] - classNameBindings: ['codes', 'show'] - codes: (-> - @get('errors').mapBy('code') - ).property('@errors', 'errors.length') - show: Ember.computed.notEmpty('errors.[]') - -fn = (params, hash, options, env) -> - name = params[0] - controller = env.data.view.get('controller') - errors = controller.get('errors').for(name) - view = ErrorsView.create( - controller: controller - errors: errors - ) - - env.helpers.view.helperFunction.call(this, [view], hash, options, env) - -`export default fn` diff --git a/app/helpers/travis-field.coffee b/app/helpers/travis-field.coffee deleted file mode 100644 index 60a85fa1..00000000 --- a/app/helpers/travis-field.coffee +++ /dev/null @@ -1,25 +0,0 @@ -`import Ember from 'ember'` - -FormFieldRowView = Ember.View.extend - invalid: Ember.computed.notEmpty('errors.[]') - classNameBindings: ['invalid'] - classNames: 'field' - -fn = (params, hash, options, env) -> - name = params[0] - controller = env.data.view.get('controller') - errors = controller.get('errors').for(name) - template = options.template - delete options.template - - view = FormFieldRowView.create( - controller: controller - template: template - errors: errors - name: name - classNameBindings: ['name'] - ) - - env.helpers.view.helperFunction.call(this, [view], hash, options, env) - -`export default fn` diff --git a/app/helpers/mb.coffee b/app/helpers/travis-mb.coffee similarity index 63% rename from app/helpers/mb.coffee rename to app/helpers/travis-mb.coffee index 59fd38d7..069b1ba8 100644 --- a/app/helpers/mb.coffee +++ b/app/helpers/travis-mb.coffee @@ -4,4 +4,4 @@ fn = (size) -> if size (size / 1024 / 1024).toFixed(2) -`export default fn` +`export default Ember.HTMLBars.makeBoundHelper(fn)` diff --git a/app/initializers/auth.coffee b/app/initializers/auth.coffee index fd167d55..d3706644 100644 --- a/app/initializers/auth.coffee +++ b/app/initializers/auth.coffee @@ -9,7 +9,7 @@ initialize = (container, app) -> app.inject('application', 'auth', 'auth:main') app.inject('component', 'auth', 'auth:main') - app.inject('auth', 'store', 'store:main') + app.inject('auth', 'store', 'service:store') AuthInitializer = name: 'auth' diff --git a/app/initializers/pusher.coffee b/app/initializers/pusher.coffee index 3505c271..857d2d41 100644 --- a/app/initializers/pusher.coffee +++ b/app/initializers/pusher.coffee @@ -1,7 +1,7 @@ `import config from 'travis/config/environment'` `import TravisPusher from 'travis/utils/pusher'` -initialize = (container, application) -> +initialize = (registry, application) -> if config.pusher.key application.pusher = new TravisPusher(config.pusher) @@ -9,9 +9,6 @@ initialize = (container, application) -> application.inject('route', 'pusher', 'pusher:main') - application.pusher.store = container.lookup('store:main') - - PusherInitializer = name: 'pusher' after: 'ember-data' diff --git a/app/instance-initializers/pusher.coffee b/app/instance-initializers/pusher.coffee new file mode 100644 index 00000000..b3e5c38e --- /dev/null +++ b/app/instance-initializers/pusher.coffee @@ -0,0 +1,10 @@ +initialize = (data) -> + data.application.pusher.store = data.container.lookup('service:store') + +PusherInitializer = + name: 'pusher' + after: 'ember-data' + initialize: initialize + +`export {initialize}` +`export default PusherInitializer` diff --git a/app/store.coffee b/app/services/store.coffee similarity index 99% rename from app/store.coffee rename to app/services/store.coffee index a76332c7..0fa61b0e 100644 --- a/app/store.coffee +++ b/app/services/store.coffee @@ -87,6 +87,4 @@ Store = DS.Store.extend data = json.repository || json.repo @pushPayload(repos: [data]) - - `export default Store` diff --git a/app/templates/components/caches-item.hbs b/app/templates/components/caches-item.hbs index eb77701f..4221bd21 100644 --- a/app/templates/components/caches-item.hbs +++ b/app/templates/components/caches-item.hbs @@ -5,7 +5,7 @@

{{format-time cache.last_modified}}

-

{{mb cache.size}}MB

+

{{travis-mb cache.size}}MB

From 94a018769d5f9e087166f24b4639fefaf0d8c591 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 2 Sep 2015 10:36:00 +0200 Subject: [PATCH 03/14] [specs] auth.refreshUserData returns a promise now --- app/utils/test-auth.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/utils/test-auth.coffee b/app/utils/test-auth.coffee index 64010270..a0dab1fc 100644 --- a/app/utils/test-auth.coffee +++ b/app/utils/test-auth.coffee @@ -48,6 +48,7 @@ Auth = Ember.Object.extend if @get('state') == 'signed-in' 'a-token' - refreshUserData: (->) + refreshUserData: -> + return Ember.RSVP.Promise.resolve() `export default Auth` From c7f412f63697c99d0496412129944885cee6abe5 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 2 Sep 2015 12:49:33 +0200 Subject: [PATCH 04/14] Remove unused ssh-key controller --- app/controllers/ssh-key.coffee | 73 ---------------------------------- 1 file changed, 73 deletions(-) delete mode 100644 app/controllers/ssh-key.coffee diff --git a/app/controllers/ssh-key.coffee b/app/controllers/ssh-key.coffee deleted file mode 100644 index bfa2297f..00000000 --- a/app/controllers/ssh-key.coffee +++ /dev/null @@ -1,73 +0,0 @@ -`import Ember from 'ember'` -`import Validations from 'travis/utils/validations'` - -Controller = Ember.ObjectController.extend Validations, - isEditing: false - isSaving: false - isDeleting: false - defaultKey: null - - needs: ['repo'] - repo: Ember.computed.alias('controllers.repo.repo') - - validates: - value: ['presence'] - - reset: -> - @set('isEditing', false) - - actions: - add: -> - id = @get('repo.id') - model = @store.recordForId('sshKey', id) - # TODO: this can be removed in favor of simply unloading record - # once https://github.com/emberjs/data/pull/2867 - # and https://github.com/emberjs/data/pull/2870 are merged - if model - @store.dematerializeRecord(model) - typeMap = @store.typeMapFor('sshKey') - idToRecord = typeMap.idToRecord - delete idToRecord[id] - - model = @store.createRecord('sshKey', id: id) - @set('model', model) - @set('isEditing', true) - - save: -> - return if @get('isSaving') - @set('isSaving', true) - - if @isValid() - @get('model').save().then => - @set('isEditing', false) - @set('isSaving', false) - , (error) => - @set('isSaving', false) - if error.errors - @addErrorsFromResponse(error.errors) - else - @set('isSaving', false) - - delete: -> - return if @get('isDeleting') - @set('isDeleting', true) - - deletingDone = => @set('isDeleting', false) - - @get('model').deleteRecord() - @get('model').save().then(deletingDone, deletingDone).then => - @set('model', null) - - cancel: -> - if model = @get('model') - if model.get('currentState.stateName') == 'root.empty' || - model.get('currentState.stateName').indexOf('root.loaded.created') != -1 - @store.dematerializeRecord(model) - - @set('model', null) - @set('isEditing', false) - - edit: -> - @set('isEditing', true) - -`export default Controller` From 507dcc73765476d01a5bc9c224cdb71df9c174d9 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 2 Sep 2015 12:50:10 +0200 Subject: [PATCH 05/14] [specs] Properly use internal ember-data methods We need to use a few internal methods until we switch to ED 2.0, this commit fixes their usage. --- app/components/add-ssh-key.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/add-ssh-key.coffee b/app/components/add-ssh-key.coffee index 38bada68..fc926589 100644 --- a/app/components/add-ssh-key.coffee +++ b/app/components/add-ssh-key.coffee @@ -15,8 +15,8 @@ AddSshKeyComponent = Ember.Component.extend # once https://github.com/emberjs/data/pull/2867 # and https://github.com/emberjs/data/pull/2870 are merged if model - @get('store').dematerializeRecord(model) - typeMap = @get('store').typeMapFor('sshKey') + @get('store').dematerializeRecord(model._internalModel) + typeMap = @get('store').typeMapFor(model.constructor) idToRecord = typeMap.idToRecord delete idToRecord[id] From 8aac1c062da7a188a9c3d6c3e5e5a84d6bfe64b2 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 2 Sep 2015 12:53:10 +0200 Subject: [PATCH 06/14] Rename sshKey to ssh_key for ember-data lookups --- app/components/add-ssh-key.coffee | 4 ++-- app/routes/settings.coffee | 2 +- app/routes/ssh-key.coffee | 2 +- tests/integration/components/add-ssh-key-test.js | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/components/add-ssh-key.coffee b/app/components/add-ssh-key.coffee index fc926589..0a77c7b7 100644 --- a/app/components/add-ssh-key.coffee +++ b/app/components/add-ssh-key.coffee @@ -10,7 +10,7 @@ AddSshKeyComponent = Ember.Component.extend didInsertElement: () -> id = @get('repo.id') - model = @get('store').recordForId('sshKey', id) + model = @get('store').recordForId('ssh_key', id) # TODO: this can be removed in favor of simply unloading record # once https://github.com/emberjs/data/pull/2867 # and https://github.com/emberjs/data/pull/2870 are merged @@ -20,7 +20,7 @@ AddSshKeyComponent = Ember.Component.extend idToRecord = typeMap.idToRecord delete idToRecord[id] - model = @get('store').createRecord('sshKey', id: id) + model = @get('store').createRecord('ssh_key', id: id) @set('model', model) isValid: () -> diff --git a/app/routes/settings.coffee b/app/routes/settings.coffee index 2c94c1da..226f4de8 100644 --- a/app/routes/settings.coffee +++ b/app/routes/settings.coffee @@ -18,7 +18,7 @@ Route = TravisRoute.extend fetchCustomSshKey: () -> repo = @modelFor('repo') self = this - @store.find('sshKey', repo.get('id')).then ( (result) -> result unless result.get('isNew') ), (xhr) -> + @store.find('ssh_key', repo.get('id')).then ( (result) -> result unless result.get('isNew') ), (xhr) -> if xhr.status == 404 # if there is no model, just return null. I'm not sure if this is the # best answer, maybe we should just redirect to different route, like diff --git a/app/routes/ssh-key.coffee b/app/routes/ssh-key.coffee index b86db4d1..f97d323b 100644 --- a/app/routes/ssh-key.coffee +++ b/app/routes/ssh-key.coffee @@ -8,7 +8,7 @@ Route = TravisRoute.extend model: (params) -> repo = @modelFor('repo') self = this - @store.find('sshKey', repo.get('id')).then ( (result) -> result unless result.get('isNew') ), (xhr) -> + @store.find('ssh_key', repo.get('id')).then ( (result) -> result unless result.get('isNew') ), (xhr) -> if xhr.status == 404 # if there is no model, just return null. I'm not sure if this is the # best answer, maybe we should just redirect to different route, like diff --git a/tests/integration/components/add-ssh-key-test.js b/tests/integration/components/add-ssh-key-test.js index 8e47afe3..f182ecf2 100644 --- a/tests/integration/components/add-ssh-key-test.js +++ b/tests/integration/components/add-ssh-key-test.js @@ -22,7 +22,7 @@ test('it adds an ssh key on submit', function(assert) { this.render(hbs`{{add-ssh-key repo=repo sshKeyAdded="sshKeyAdded"}}`); - var sshKey = store.all('sshKey').objectAt(0); + var sshKey = store.all('ssh_key').objectAt(0); assert.ok(! sshKey.get('description'), 'description should be blank'); assert.ok(! sshKey.get('value'), 'value should be blank'); @@ -54,7 +54,7 @@ test('it throws an error if value for ssh key is blank', function(assert) { this.render(hbs`{{add-ssh-key repo=repo sshKeyAdded="sshKeyAdded"}}`); - var sshKey = store.all('sshKey').objectAt(0); + var sshKey = store.all('ssh_key').objectAt(0); assert.ok(! sshKey.get('description'), 'description should be blank'); assert.ok(! sshKey.get('value'), 'value should be blank'); From 4e0790e504c29c2d176dc038151560826534dea5 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 2 Sep 2015 13:13:08 +0200 Subject: [PATCH 07/14] Don't warn about unused vars, it's annoying with function arguments --- .jshintrc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.jshintrc b/.jshintrc index 45569263..d7283329 100644 --- a/.jshintrc +++ b/.jshintrc @@ -28,6 +28,5 @@ "strict": false, "white": false, "eqnull": true, - "esnext": true, - "unused": true + "esnext": true } From d6cbdba40190e9cb633a3e1709ef5636f487a258 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 2 Sep 2015 13:13:34 +0200 Subject: [PATCH 08/14] [specs] Fix repo owner tile test --- app/components/ssh-key.coffee | 1 - app/templates/components/owner-repo-tile.hbs | 2 +- tests/unit/components/owner-repo-tile-test.coffee | 12 +++++------- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/app/components/ssh-key.coffee b/app/components/ssh-key.coffee index 33475041..d17b3a03 100644 --- a/app/components/ssh-key.coffee +++ b/app/components/ssh-key.coffee @@ -17,5 +17,4 @@ SshKeyComponent = Ember.Component.extend @get('key').save().then(deletingDone, deletingDone).then => @sendAction('sshKeyDeleted') - `export default SshKeyComponent` diff --git a/app/templates/components/owner-repo-tile.hbs b/app/templates/components/owner-repo-tile.hbs index 5b79dc44..e67440c4 100644 --- a/app/templates/components/owner-repo-tile.hbs +++ b/app/templates/components/owner-repo-tile.hbs @@ -31,7 +31,7 @@

{{else}}

there is no build

diff --git a/tests/unit/components/owner-repo-tile-test.coffee b/tests/unit/components/owner-repo-tile-test.coffee index b96e89ed..7b705ddf 100644 --- a/tests/unit/components/owner-repo-tile-test.coffee +++ b/tests/unit/components/owner-repo-tile-test.coffee @@ -35,10 +35,8 @@ test 'it renders', -> @append() ok component.$().hasClass('passed'), 'component should have state class (passed)' - ok component.$('.icon-status').hasClass('passed'), 'status icon should have state class (passed)' - ok component.$('.request-kind').hasClass('push'), 'reuqest icon should have event type class (push)' - equal component.$('.tile-main h2 a').text().trim(), 'travis-chat', 'should display correct repo name' - equal component.$('.build-status a').text().trim(), '25 passed', 'should display correct build number and state' - equal component.$('.tile-commit a').text().trim(), '16fff34', 'should display correct commit sha' - equal component.$('.tile-timeago').text().trim(), '2 years ago', 'should display correct build duration' - equal component.$('.tile-duration').text().trim(), '4 min 12 sec', 'should display correct build finished at time' + equal component.$('.repo-title a').text().trim(), 'travis-chat', 'should display correct repo name' + equal component.$('.build a').text().trim(), '25', 'should display correct build numbee' + equal component.$('.build-status').text().trim(), 'passed', 'should display a last build state' + equal component.$('.commit a').text().trim(), '16fff34', 'should display correct commit sha' + equal component.$('.finished-at').text().trim(), '2 years ago', 'should display correct build duration' From 9de0df7cbd3214e21b46bdba275f0aef6cb0bf1f Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 2 Sep 2015 13:14:04 +0200 Subject: [PATCH 09/14] [specs] Fix ssh key deletion test We need to wait till the record is deleted, because otherwise it will throw an error after the tests is finished. For now I just wait without checking anything, but in the future we could actually check if the request was sent etc. --- tests/integration/components/ssh-key-test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/integration/components/ssh-key-test.js b/tests/integration/components/ssh-key-test.js index ebdf5390..9da6d50a 100644 --- a/tests/integration/components/ssh-key-test.js +++ b/tests/integration/components/ssh-key-test.js @@ -59,6 +59,9 @@ test('it deletes a custom key if permissions are right', function(assert) { assert.ok(key.get('isDeleted'), 'key should be deleted'); + // we don't deal with saving records for now, so at least wait till it's done + stop(); + setTimeout(function() { start(); }, 50); }); test('it does not delete the custom key if permissions are insufficient', function(assert) { From 7b655eee614f32c63019651efe467cf08f075e8c Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 2 Sep 2015 13:16:53 +0200 Subject: [PATCH 10/14] [specs] Fix caches-item-test by using the correct helper name --- tests/integration/components/ssh-key-test.js | 2 +- tests/unit/components/caches-item-test.coffee | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/components/ssh-key-test.js b/tests/integration/components/ssh-key-test.js index 9da6d50a..b2ad2ea8 100644 --- a/tests/integration/components/ssh-key-test.js +++ b/tests/integration/components/ssh-key-test.js @@ -79,4 +79,4 @@ test('it does not delete the custom key if permissions are insufficient', functi assert.ok(Ember.isEmpty(this.$('.ssh-key-action').find('a')), 'delete link should not be displayed'); -}); \ No newline at end of file +}); diff --git a/tests/unit/components/caches-item-test.coffee b/tests/unit/components/caches-item-test.coffee index dae8b87b..9ac7e57c 100644 --- a/tests/unit/components/caches-item-test.coffee +++ b/tests/unit/components/caches-item-test.coffee @@ -1,7 +1,7 @@ `import { test, moduleForComponent } from 'ember-qunit'` moduleForComponent 'caches-item', 'CachesItemComponent', { - needs: ['helper:format-time', 'helper:mb'] + needs: ['helper:format-time', 'helper:travis-mb'] } test 'it renders', -> From e64ceab8c4d8c62e978caedb9bf00d58249df5ef Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 2 Sep 2015 15:16:42 +0200 Subject: [PATCH 11/14] [specs] Wait longer after tests using models finish --- tests/integration/components/add-env-var-test.js | 6 ++++++ tests/integration/components/add-ssh-key-test.js | 2 ++ tests/integration/components/ssh-key-test.js | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/integration/components/add-env-var-test.js b/tests/integration/components/add-env-var-test.js index 9e719926..ece34ae6 100644 --- a/tests/integration/components/add-env-var-test.js +++ b/tests/integration/components/add-env-var-test.js @@ -36,6 +36,9 @@ test('it adds an env var on submit', function(assert) { assert.equal(envVar.get('value'), 'bar', 'value should be set for the env var'); assert.equal(envVar.get('repo.slug'), 'travis-ci/travis-web', 'repo should be set for the env var'); assert.ok(!envVar.get('public'), 'env var should be private'); + + var done = assert.async(); + setTimeout(function() { done(); }, 500); }); test('it shows an error if no name is present', function(assert) { @@ -86,4 +89,7 @@ test('it adds a public env var on submit', function(assert) { assert.equal(envVar.get('value'), 'bar', 'value should be set for the env var'); assert.equal(envVar.get('repo.slug'), 'travis-ci/travis-web', 'repo should be set for the env var'); assert.ok(envVar.get('public'), 'env var should be public'); + + var done = assert.async(); + setTimeout(function() { done(); }, 500); }); diff --git a/tests/integration/components/add-ssh-key-test.js b/tests/integration/components/add-ssh-key-test.js index f182ecf2..118b35a0 100644 --- a/tests/integration/components/add-ssh-key-test.js +++ b/tests/integration/components/add-ssh-key-test.js @@ -37,6 +37,8 @@ test('it adds an ssh key on submit', function(assert) { assert.equal(sshKey.get('value'), 'bar', 'value should be set'); assert.equal(sshKey.get('id'), 1, 'ssh key id should still be repo id'); + var done = assert.async(); + setTimeout(function() { done(); }, 500); }); diff --git a/tests/integration/components/ssh-key-test.js b/tests/integration/components/ssh-key-test.js index b2ad2ea8..79d0176e 100644 --- a/tests/integration/components/ssh-key-test.js +++ b/tests/integration/components/ssh-key-test.js @@ -60,8 +60,8 @@ test('it deletes a custom key if permissions are right', function(assert) { assert.ok(key.get('isDeleted'), 'key should be deleted'); // we don't deal with saving records for now, so at least wait till it's done - stop(); - setTimeout(function() { start(); }, 50); + var done = assert.async(); + setTimeout(function() { done(); }, 500); }); test('it does not delete the custom key if permissions are insufficient', function(assert) { From df4b715ce9e7ebf7b37cf845411f36039b188ac8 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Thu, 3 Sep 2015 11:22:07 +0200 Subject: [PATCH 12/14] Fix broadcasts For some reason using property.[] stopped working in flash controller, so I'm using length for now, which should work properly in case of broadcasts as they're loaded only once anyway. --- app/controllers/flash.coffee | 8 ++++---- app/templates/layouts/flash.hbs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/flash.coffee b/app/controllers/flash.coffee index 63db2451..5d22d884 100644 --- a/app/controllers/flash.coffee +++ b/app/controllers/flash.coffee @@ -2,7 +2,7 @@ `import LimitedArray from 'travis/utils/limited-array'` `import Broadcast from 'travis/models/broadcast'` -Controller = Ember.ArrayController.extend +Controller = Ember.Controller.extend needs: ['currentUser'] currentUserBinding: 'controllers.currentUser.model' @@ -10,19 +10,19 @@ Controller = Ember.ArrayController.extend @_super.apply this, arguments @set('flashes', LimitedArray.create(limit: 1, content: [])) - model: (-> + 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.[]') + ).property('unseenBroadcasts.[]', 'flashes.[]', 'unseenBroadcasts.length', 'flashes.length') unseenBroadcasts: (-> @get('broadcasts').filter (broadcast) -> !broadcast.get('isSeen') - ).property('broadcasts.[]') + ).property('broadcasts.[]', 'broadcasts.length') broadcasts: (-> broadcasts = Ember.ArrayProxy.create(content: []) diff --git a/app/templates/layouts/flash.hbs b/app/templates/layouts/flash.hbs index 635ad6a1..a155045a 100644 --- a/app/templates/layouts/flash.hbs +++ b/app/templates/layouts/flash.hbs @@ -1,4 +1,4 @@ -{{#each flash in controller}} +{{#each flash in messages}} {{#view "flash-item" flashBinding="flash"}}

{{{flash.message}}}

From ea88a6271ad3e1468f3b4c897768469269d1a3d4 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Thu, 3 Sep 2015 13:13:45 +0200 Subject: [PATCH 13/14] Fix redirecting to getting started page --- app/controllers/repos.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/repos.coffee b/app/controllers/repos.coffee index ccecfba8..41565100 100644 --- a/app/controllers/repos.coffee +++ b/app/controllers/repos.coffee @@ -23,11 +23,11 @@ Controller = Ember.Controller.extend tabOrIsLoadedDidChange: (-> @possiblyRedirectToGettingStartedPage() - ).observes('isLoaded', 'tab', 'length') + ).observes('isLoaded', 'tab', 'repos.length') possiblyRedirectToGettingStartedPage: -> Ember.run.scheduleOnce 'routerTransitions', this, -> - if @get('tab') == 'owned' && @get('isLoaded') && @get('length') == 0 + if @get('tab') == 'owned' && @get('isLoaded') && @get('repos.length') == 0 @container.lookup('router:main').send('redirectToGettingStarted') isLoadedBinding: 'repos.isLoaded' From 15709350997a9ba242294c661a6b27bb9c5b4bb9 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Fri, 4 Sep 2015 09:03:50 +0200 Subject: [PATCH 14/14] Fix closing broadcast messages --- .../flash-display.coffee} | 19 +++++++++++-------- app/{views => components}/flash-item.coffee | 8 ++++---- app/templates/components/flash-display.hbs | 3 +++ app/templates/components/flash-item.hbs | 2 ++ app/templates/layouts/flash.hbs | 7 +------ app/templates/layouts/home.hbs | 2 +- app/templates/layouts/landing-page.hbs | 2 +- app/templates/layouts/profile.hbs | 4 ++-- app/templates/layouts/simple.hbs | 4 ++-- app/views/flash.coffee | 8 -------- 10 files changed, 27 insertions(+), 32 deletions(-) rename app/{controllers/flash.coffee => components/flash-display.coffee} (78%) rename app/{views => components}/flash-item.coffee (51%) create mode 100644 app/templates/components/flash-display.hbs create mode 100644 app/templates/components/flash-item.hbs delete mode 100644 app/views/flash.coffee diff --git a/app/controllers/flash.coffee b/app/components/flash-display.coffee similarity index 78% rename from app/controllers/flash.coffee rename to app/components/flash-display.coffee index 5d22d884..dcf379a0 100644 --- a/app/controllers/flash.coffee +++ b/app/components/flash-display.coffee @@ -1,10 +1,13 @@ `import Ember from 'ember'` `import LimitedArray from 'travis/utils/limited-array'` -`import Broadcast from 'travis/models/broadcast'` -Controller = Ember.Controller.extend - needs: ['currentUser'] - currentUserBinding: 'controllers.currentUser.model' +FlashDisplayComponent = Ember.Component.extend + auth: Ember.inject.service() + store: Ember.inject.service() + currentUserBinding: 'auth.currentUser' + + classNames: ['flash'] + tagName: 'ul' init: -> @_super.apply this, arguments @@ -28,7 +31,7 @@ Controller = Ember.Controller.extend broadcasts = Ember.ArrayProxy.create(content: []) if @get('currentUser.id') - @store.find('broadcast').then (result) -> + @get('store').find('broadcast').then (result) -> broadcasts.pushObjects(result.toArray()) broadcasts @@ -42,14 +45,14 @@ Controller = Ember.Controller.extend Ember.run.later(this, (-> @get('flashes.content').removeObject(msg)), 15000) close: (msg) -> - if msg instanceof Broadcast + if msg.constructor.modelName == "broadcast" msg.setSeen() @notifyPropertyChange('unseenBroadcasts') else @get('flashes').removeObject(msg) actions: - close: (msg) -> + closeMessage: (msg) -> @close(msg) -`export default Controller` +`export default FlashDisplayComponent` diff --git a/app/views/flash-item.coffee b/app/components/flash-item.coffee similarity index 51% rename from app/views/flash-item.coffee rename to app/components/flash-item.coffee index 9b8107f4..5f6df701 100644 --- a/app/views/flash-item.coffee +++ b/app/components/flash-item.coffee @@ -1,6 +1,6 @@ -`import BasicView from 'travis/views/basic'` +`import Ember from 'ember'` -View = BasicView.extend +FlashItemComponent = Ember.Component.extend tagName: 'li' classNameBindings: ['type'] @@ -10,6 +10,6 @@ View = BasicView.extend actions: close: -> - @get('controller').close(@get('flash')) + this.attrs.close(@get('flash')) -`export default View` +`export default FlashItemComponent` diff --git a/app/templates/components/flash-display.hbs b/app/templates/components/flash-display.hbs new file mode 100644 index 00000000..c61c8b3f --- /dev/null +++ b/app/templates/components/flash-display.hbs @@ -0,0 +1,3 @@ +{{#each flash in messages}} + {{flash-item flash=flash close=(action 'closeMessage')}} +{{/each}} diff --git a/app/templates/components/flash-item.hbs b/app/templates/components/flash-item.hbs new file mode 100644 index 00000000..f8d0528d --- /dev/null +++ b/app/templates/components/flash-item.hbs @@ -0,0 +1,2 @@ +

{{{flash.message}}}

+ diff --git a/app/templates/layouts/flash.hbs b/app/templates/layouts/flash.hbs index a155045a..8b137891 100644 --- a/app/templates/layouts/flash.hbs +++ b/app/templates/layouts/flash.hbs @@ -1,6 +1 @@ -{{#each flash in messages}} - {{#view "flash-item" flashBinding="flash"}} -

{{{flash.message}}}

- - {{/view}} -{{/each}} + diff --git a/app/templates/layouts/home.hbs b/app/templates/layouts/home.hbs index 10517cdc..98a3b537 100644 --- a/app/templates/layouts/home.hbs +++ b/app/templates/layouts/home.hbs @@ -4,7 +4,7 @@ {{render "top"}} - {{render "flash"}} + {{flash-display}}
diff --git a/app/templates/layouts/landing-page.hbs b/app/templates/layouts/landing-page.hbs index 4a57bd79..d0ff4bd8 100644 --- a/app/templates/layouts/landing-page.hbs +++ b/app/templates/layouts/landing-page.hbs @@ -2,7 +2,7 @@ {{render "top"}}
-{{render "flash"}} +{{flash-display}} {{yield}} diff --git a/app/templates/layouts/profile.hbs b/app/templates/layouts/profile.hbs index 027246bc..707b4192 100644 --- a/app/templates/layouts/profile.hbs +++ b/app/templates/layouts/profile.hbs @@ -6,7 +6,7 @@
- {{render "flash"}} + {{flash-display}}
{{yield}} @@ -17,4 +17,4 @@
{{render "footer"}} -
\ No newline at end of file + diff --git a/app/templates/layouts/simple.hbs b/app/templates/layouts/simple.hbs index f5aff6ac..bb8f9cbc 100644 --- a/app/templates/layouts/simple.hbs +++ b/app/templates/layouts/simple.hbs @@ -6,7 +6,7 @@
- {{render "flash"}} + {{flash-display}}
{{yield}}
@@ -15,4 +15,4 @@ \ No newline at end of file + diff --git a/app/views/flash.coffee b/app/views/flash.coffee deleted file mode 100644 index 1d7d4f01..00000000 --- a/app/views/flash.coffee +++ /dev/null @@ -1,8 +0,0 @@ -`import BasicView from 'travis/views/basic'` - -View = BasicView.extend - classNames: ['flash'] - tagName: 'ul' - templateName: 'layouts/flash' - -`export default View`