From b0962535db7efa116fbccc8f2e61f42684c4e5a8 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 00:05:26 +0100 Subject: [PATCH 01/11] controllers/crate/version: Use simpler toggleProperty() method --- app/controllers/crate/version.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/crate/version.js b/app/controllers/crate/version.js index 23f12b05243..999626e9081 100644 --- a/app/controllers/crate/version.js +++ b/app/controllers/crate/version.js @@ -101,7 +101,7 @@ export default Ember.Controller.extend({ toggleFollow() { this.set('fetchingFollowing', true); - this.set('following', !this.get('following')); + this.toggleProperty('following'); var url = `/api/v1/crates/${this.get('crate.name')}/follow`; var method; if (this.get('following')) { From 07e58b9920b26f1cdd7cdabad3c59f23fafbadee Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 00:20:51 +0100 Subject: [PATCH 02/11] controllers/crate/version: Move follow/unfollow calls into "crate" adapter --- app/adapters/crate.js | 15 +++++++++++++++ app/controllers/crate/version.js | 17 +++++------------ app/models/crate.js | 8 ++++++++ 3 files changed, 28 insertions(+), 12 deletions(-) create mode 100644 app/adapters/crate.js diff --git a/app/adapters/crate.js b/app/adapters/crate.js new file mode 100644 index 00000000000..60a68efaf60 --- /dev/null +++ b/app/adapters/crate.js @@ -0,0 +1,15 @@ +import ApplicationAdapter from './application'; + +export default ApplicationAdapter.extend({ + follow(id) { + return this.ajax(this.urlForFollowAction(id), 'PUT'); + }, + + unfollow(id) { + return this.ajax(this.urlForFollowAction(id), 'DELETE'); + }, + + urlForFollowAction(id) { + return `${this.buildURL('crate', id)}/follow`; + }, +}); diff --git a/app/controllers/crate/version.js b/app/controllers/crate/version.js index 999626e9081..00e89b93acb 100644 --- a/app/controllers/crate/version.js +++ b/app/controllers/crate/version.js @@ -101,19 +101,12 @@ export default Ember.Controller.extend({ toggleFollow() { this.set('fetchingFollowing', true); - this.toggleProperty('following'); - var url = `/api/v1/crates/${this.get('crate.name')}/follow`; - var method; - if (this.get('following')) { - method = 'put'; - } else { - method = 'delete'; - } - ajax({ - method, - url - }).finally(() => this.set('fetchingFollowing', false)); + let crate = this.get('crate'); + let op = this.toggleProperty('following') ? + crate.follow() : crate.unfollow(); + + return op.finally(() => this.set('fetchingFollowing', false)); }, }, diff --git a/app/models/crate.js b/app/models/crate.js index 2b77b512180..73061e89a12 100644 --- a/app/models/crate.js +++ b/app/models/crate.js @@ -21,4 +21,12 @@ export default DS.Model.extend({ version_downloads: DS.hasMany('version-download', { async: true }), keywords: DS.hasMany('keywords', { async: true }), reverse_dependencies: DS.hasMany('dependency', { async: true }), + + follow() { + return this.store.adapterFor('crate').follow(this.get('id')); + }, + + unfollow() { + return this.store.adapterFor('crate').unfollow(this.get('id')); + }, }); From 2b23b0c399abafadf89753f34ad0e16876d293a7 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 00:29:41 +0100 Subject: [PATCH 03/11] controllers/crate/version: Move download ajax call into "version" adapter --- app/adapters/version.js | 7 +++++++ app/controllers/crate/version.js | 8 ++------ app/models/version.js | 4 ++++ 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 app/adapters/version.js diff --git a/app/adapters/version.js b/app/adapters/version.js new file mode 100644 index 00000000000..3943087800a --- /dev/null +++ b/app/adapters/version.js @@ -0,0 +1,7 @@ +import ApplicationAdapter from './application'; + +export default ApplicationAdapter.extend({ + getDownloadUrl(dlPath) { + return this.ajax(dlPath, 'GET').then(response => response.url); + }, +}); diff --git a/app/controllers/crate/version.js b/app/controllers/crate/version.js index 00e89b93acb..66058961464 100644 --- a/app/controllers/crate/version.js +++ b/app/controllers/crate/version.js @@ -1,6 +1,5 @@ import Ember from 'ember'; import DS from 'ember-data'; -import ajax from 'ic-ajax'; import moment from 'moment'; const NUM_VERSIONS = 5; @@ -89,13 +88,10 @@ export default Ember.Controller.extend({ download(version) { this.set('isDownloading', true); - return ajax({ - url: version.get('dl_path'), - dataType: 'json', - }).then((data) => { + version.getDownloadUrl().then(url => { this.incrementProperty('crate.downloads'); this.incrementProperty('currentVersion.downloads'); - Ember.$('#download-frame').attr('src', data.url); + Ember.$('#download-frame').attr('src', url); }).finally(() => this.set('isDownloading', false)); }, diff --git a/app/models/version.js b/app/models/version.js index 6dd8ed4a7d2..0876d3cdf89 100644 --- a/app/models/version.js +++ b/app/models/version.js @@ -14,4 +14,8 @@ export default DS.Model.extend({ authors: DS.hasMany('users', { async: true }), dependencies: DS.hasMany('dependency', { async: true }), version_downloads: DS.hasMany('version-download', { async: true }), + + getDownloadUrl() { + return this.store.adapterFor('version').getDownloadUrl(this.get('dl_path')); + }, }); From 5e16673ca7d420fef84114935058dbe3f7195c1f Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 00:31:20 +0100 Subject: [PATCH 04/11] routes/index: Fix indentation --- app/routes/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/routes/index.js b/app/routes/index.js index 8204574bcf5..9363b6714ab 100644 --- a/app/routes/index.js +++ b/app/routes/index.js @@ -4,10 +4,10 @@ import ajax from 'ic-ajax'; export default Ember.Route.extend({ model() { function addCrates(store, crates) { - for (var i = 0; i < crates.length; i++) { - crates[i] = store.push(store.normalize('crate', crates[i])); + for (var i = 0; i < crates.length; i++) { + crates[i] = store.push(store.normalize('crate', crates[i])); + } } - } return ajax('/summary').then((data) => { addCrates(this.store, data.new_crates); From 6d56cb9c5fffe755e8cdb80c29aec384d3ef4f81 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 00:45:54 +0100 Subject: [PATCH 05/11] routes/crate/version: Simplify serialize() method --- app/routes/crate/version.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/routes/crate/version.js b/app/routes/crate/version.js index cc538bc142a..cf5ac9fccd5 100644 --- a/app/routes/crate/version.js +++ b/app/routes/crate/version.js @@ -57,10 +57,7 @@ export default Ember.Route.extend({ }, serialize(model) { - if (!model) { - return { version_num: '' }; - } else { - return { version_num: model.get('num') }; - } + let version_num = model ? model.get('num') : ''; + return { version_num }; }, }); From 2a433f8cde427a0c5f81aabe822b758086789bf8 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 00:49:04 +0100 Subject: [PATCH 06/11] controllers/crate/version: Convert "keywords" to computed property --- app/controllers/crate/version.js | 2 +- app/routes/crate/version.js | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/controllers/crate/version.js b/app/controllers/crate/version.js index 66058961464..bc8183856e9 100644 --- a/app/controllers/crate/version.js +++ b/app/controllers/crate/version.js @@ -16,7 +16,7 @@ export default Ember.Controller.extend({ following: false, currentVersion: computed.alias('model'), requestedVersion: null, - keywords: [], + keywords: computed.alias('crate.keywords'), sortedVersions: computed.readOnly('crate.versions'), diff --git a/app/routes/crate/version.js b/app/routes/crate/version.js index cf5ac9fccd5..7ca37b6bf13 100644 --- a/app/routes/crate/version.js +++ b/app/routes/crate/version.js @@ -19,9 +19,6 @@ export default Ember.Route.extend({ controller.set('requestedVersion', requestedVersion); controller.set('fetchingFollowing', true); - crate.get('keywords') - .then((keywords) => controller.set('keywords', keywords)); - if (this.session.get('currentUser')) { ajax(`/api/v1/crates/${crate.get('name')}/following`) .then((d) => controller.set('following', d.following)) From 3daca1aaaf57e101bb187d3ec67566859023bd5b Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 01:22:51 +0100 Subject: [PATCH 07/11] controllers/crate/version: Extract "downloadsContext" property --- app/controllers/crate/version.js | 3 +++ app/templates/crate/version.hbs | 6 +----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/controllers/crate/version.js b/app/controllers/crate/version.js index bc8183856e9..f633f22d5a4 100644 --- a/app/controllers/crate/version.js +++ b/app/controllers/crate/version.js @@ -8,6 +8,9 @@ const { computed } = Ember; export default Ember.Controller.extend({ isDownloading: false, + downloadsContext: Ember.computed('requestedVersion', 'model', 'crate', function() { + return this.get('requestedVersion') ? this.get('model') : this.get('crate'); + }), extraDownloads: Ember.computed('downloads.meta.extra_downloads', function() { return this.get('downloads.meta.extra_downloads') || []; }), diff --git a/app/templates/crate/version.hbs b/app/templates/crate/version.hbs index 4324b4ab355..4fc675fb804 100644 --- a/app/templates/crate/version.hbs +++ b/app/templates/crate/version.hbs @@ -185,11 +185,7 @@
- {{#if requestedVersion}} - {{ format-num currentVersion.downloads }} - {{else}} - {{ format-num crate.downloads }} - {{/if}} + {{ format-num downloadsContext.downloads }} Downloads all time
From abe1b303c997198656e4da2c0f71a72fd7c61fff Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 01:37:46 +0100 Subject: [PATCH 08/11] controllers/crate/version: Fix "downloadData" property dependencies --- app/controllers/crate/version.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/crate/version.js b/app/controllers/crate/version.js index f633f22d5a4..4606b465b7c 100644 --- a/app/controllers/crate/version.js +++ b/app/controllers/crate/version.js @@ -109,7 +109,7 @@ export default Ember.Controller.extend({ }, }, - downloadData: Ember.computed('downloads', 'extraDownloads', function() { + downloadData: Ember.computed('downloads', 'extraDownloads', 'requestedVersion', function() { let { downloads, extraDownloads: extra } = this.getProperties('downloads', 'extraDownloads'); if (!downloads || !extra) { return; From 5de89d2d13d5e8e6d59180cc48e07cb5faa4a4b4 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 01:38:11 +0100 Subject: [PATCH 09/11] routes/crate/version: Replace afterModel() hack with computed property --- app/controllers/crate/version.js | 5 +++-- app/routes/crate/version.js | 13 ------------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/app/controllers/crate/version.js b/app/controllers/crate/version.js index 4606b465b7c..9e84ba26c62 100644 --- a/app/controllers/crate/version.js +++ b/app/controllers/crate/version.js @@ -11,8 +11,9 @@ export default Ember.Controller.extend({ downloadsContext: Ember.computed('requestedVersion', 'model', 'crate', function() { return this.get('requestedVersion') ? this.get('model') : this.get('crate'); }), - extraDownloads: Ember.computed('downloads.meta.extra_downloads', function() { - return this.get('downloads.meta.extra_downloads') || []; + downloads: computed.alias('downloadsContext.version_downloads'), + extraDownloads: Ember.computed('downloads.content.meta.extra_downloads', function() { + return this.get('downloads.content.meta.extra_downloads') || []; }), fetchingFollowing: true, diff --git a/app/routes/crate/version.js b/app/routes/crate/version.js index 7ca37b6bf13..99fcf7a1ace 100644 --- a/app/routes/crate/version.js +++ b/app/routes/crate/version.js @@ -40,19 +40,6 @@ export default Ember.Route.extend({ }); }, - // can't do this in setupController because it won't be called - // when going from "All Versions" to the current version - afterModel(model) { - this._super(...arguments); - - const controller = this.controllerFor(this.routeName); - const context = controller.get('requestedVersion') ? model : this.modelFor('crate'); - - context.get('version_downloads').then(downloads => { - controller.set('downloads', downloads); - }); - }, - serialize(model) { let version_num = model ? model.get('num') : ''; return { version_num }; From 4bafb5dafa15ccabb985767f24a1a50abb5df78a Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 01:39:07 +0100 Subject: [PATCH 10/11] controllers/crate/version: Use destructured computed() method --- app/controllers/crate/version.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/crate/version.js b/app/controllers/crate/version.js index 9e84ba26c62..ae518259233 100644 --- a/app/controllers/crate/version.js +++ b/app/controllers/crate/version.js @@ -8,11 +8,11 @@ const { computed } = Ember; export default Ember.Controller.extend({ isDownloading: false, - downloadsContext: Ember.computed('requestedVersion', 'model', 'crate', function() { + downloadsContext: computed('requestedVersion', 'model', 'crate', function() { return this.get('requestedVersion') ? this.get('model') : this.get('crate'); }), downloads: computed.alias('downloadsContext.version_downloads'), - extraDownloads: Ember.computed('downloads.content.meta.extra_downloads', function() { + extraDownloads: computed('downloads.content.meta.extra_downloads', function() { return this.get('downloads.content.meta.extra_downloads') || []; }), @@ -110,7 +110,7 @@ export default Ember.Controller.extend({ }, }, - downloadData: Ember.computed('downloads', 'extraDownloads', 'requestedVersion', function() { + downloadData: computed('downloads', 'extraDownloads', 'requestedVersion', function() { let { downloads, extraDownloads: extra } = this.getProperties('downloads', 'extraDownloads'); if (!downloads || !extra) { return; From 5feda69c39acea17794268a89a44b70c79d68e10 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Mon, 8 Feb 2016 01:41:23 +0100 Subject: [PATCH 11/11] controllers/crate/version: Simplify "extraDownloads" property --- app/controllers/crate/version.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/crate/version.js b/app/controllers/crate/version.js index ae518259233..701edc846f5 100644 --- a/app/controllers/crate/version.js +++ b/app/controllers/crate/version.js @@ -12,9 +12,7 @@ export default Ember.Controller.extend({ return this.get('requestedVersion') ? this.get('model') : this.get('crate'); }), downloads: computed.alias('downloadsContext.version_downloads'), - extraDownloads: computed('downloads.content.meta.extra_downloads', function() { - return this.get('downloads.content.meta.extra_downloads') || []; - }), + extraDownloads: computed.alias('downloads.content.meta.extra_downloads'), fetchingFollowing: true, following: false, @@ -111,11 +109,13 @@ export default Ember.Controller.extend({ }, downloadData: computed('downloads', 'extraDownloads', 'requestedVersion', function() { - let { downloads, extraDownloads: extra } = this.getProperties('downloads', 'extraDownloads'); - if (!downloads || !extra) { + let downloads = this.get('downloads'); + if (!downloads) { return; } + let extra = this.get('extraDownloads') || []; + var dates = {}; var versions = []; for (var i = 0; i < 90; i++) {