Skip to content

Commit

Permalink
Reintroduce "Handle /release requests (ember-learn#209)"
Browse files Browse the repository at this point in the history
  • Loading branch information
MartinMalinda committed Jun 27, 2017
1 parent f2aae9b commit 96b409d
Show file tree
Hide file tree
Showing 15 changed files with 157 additions and 36 deletions.
20 changes: 3 additions & 17 deletions app/controllers/project-version.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
import Ember from 'ember';
import _ from 'lodash';
import semverCompare from 'npm:semver-compare';
import getMinorVersion from "../utils/get-minor-version";
import FilterParams from '../mixins/filter-params';

const { Controller, computed, A, inject: {service} } = Ember;
Expand Down Expand Up @@ -42,7 +39,7 @@ export default Controller.extend(FilterParams, {
let relations = this.getRelations(moduleType);
return relations.map(id => id.substring(versionId.length + 1))
},

getRelations(relationship) {
return this.get('model').hasMany(relationship).ids().sort();
},
Expand All @@ -53,6 +50,8 @@ export default Controller.extend(FilterParams, {
return A(sorted).toArray().map(id => id.split('-').pop());
},

projectVersions: computed.alias('model.project.sortedProjectVersions'),

shownClassesIDs: computed('showPrivateClasses', 'classesIDs', 'publicClassesIDs', function() {
return this.get('showPrivateClasses') ? this.get('classesIDs') : this.get('publicClassesIDs');
}),
Expand All @@ -65,19 +64,6 @@ export default Controller.extend(FilterParams, {
return this.get('showPrivateClasses') ? this.get('namespaceIDs') : this.get('publicNamespaceIDs');
}),

projectVersions: computed('metaStore.availableProjectVersions', 'model.project.id', function() {
const projectVersions = this.get('metaStore.availableProjectVersions')[this.get('model.project.id')];
let versions = projectVersions.sort((a, b) => semverCompare(b, a));

versions = versions.map((version) => {
const minorVersion = getMinorVersion(version);
return { id: version, minorVersion };
});
let groupedVersions = _.groupBy(versions, version => version.minorVersion);

return _.values(groupedVersions).map(groupedVersion => groupedVersion[0]);
}),

selectedProjectVersion:computed('projectVersions.[]', 'model.version', function() {
return this.get('projectVersions').filter(pV => pV.id === this.get('model.version'))[0];
}),
Expand Down
1 change: 0 additions & 1 deletion app/controllers/project-version/classes/class.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ const { Controller } = Ember;

export default Controller.extend(ParentNameMixin, {
filterData: Ember.inject.service(),

actions: {
updateFilter(filter) {
this.toggleProperty(`filterData.${filter}`);
Expand Down
12 changes: 12 additions & 0 deletions app/helpers/url-param.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import Ember from 'ember';

const { inject } = Ember;

export default Ember.Helper.extend({

router: inject.service(),

compute([modelName, paramName]) {
return this.get(`router.router.state.params.${modelName}.${paramName}`);
}
});
36 changes: 35 additions & 1 deletion app/models/project.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,43 @@
import DS from 'ember-data';
import Ember from 'ember';
import semverCompare from 'npm:semver-compare';
import getMinorVersion from "../utils/get-minor-version";
import _ from 'lodash';
import config from 'ember-api-docs/config/environment';


const {Model, attr, hasMany} = DS;
const {computed,A} = Ember;

export default Model.extend({
name: attr(),
githubUrl: attr(),
projectVersions: hasMany('project-version', {async: true})
projectVersions: hasMany('project-version', {async: true}),

latestProjectVersion: computed.alias('sortedProjectVersions.firstObject'),
sortedProjectVersions: computed(function() {
let projectVersions = this.hasMany('projectVersions').ids().map(id => {
return id.replace(this.id, '').split('-')[1];
});
let sortedVersions = projectVersions.sort((a, b) => semverCompare(b, a));
sortedVersions = sortedVersions.map((version) => {
const minorVersion = getMinorVersion(version);
return { id: version, minorVersion };
});

let groupedVersions = _.groupBy(sortedVersions, version => version.minorVersion);

return A(_.values(groupedVersions).map(groupedVersion => groupedVersion[0]));
}),

getProjectVersion(version) {
if (version === 'release') {
return this.get('latestProjectVersion.id');
}
if (version === 'lts') {
return config.ltsVersion;
}
return version;
}

});
5 changes: 3 additions & 2 deletions app/routes/project-version.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ export default Ember.Route.extend({
},

async model(params) {
const id = `${params.project}-${params.project_version}`;
this.get('projectService').setVersion(params.project_version);
await this.store.findRecord('project', params.project);
const project = await this.store.findRecord('project', params.project);
const version = project.getProjectVersion(params.project_version);
const id = `${params.project}-${version}`;
return this.store.findRecord('project-version', id, { includes: 'project' });
},

Expand Down
3 changes: 2 additions & 1 deletion app/routes/project-version/classes/class.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ export default Ember.Route.extend(ScrollTracker, {
},

getModel(typeName, params, transition) {
const projectModel = this.modelFor('project-version').get('project.content');
const projectID = transition.params['project-version'].project;
const version = transition.params['project-version'].project_version;
const version = projectModel.getProjectVersion(transition.params['project-version'].project_version);
const klass = params[typeName];
return this.find(typeName, `${projectID}-${version}-${klass}`);
},
Expand Down
3 changes: 2 additions & 1 deletion app/routes/project-version/modules/module.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ export default ClassRoute.extend(ScrollTracker, {
},

getModel(typeName, params, transition) {
const projectModel = this.modelFor('project-version').get('project.content');
const projectID = transition.params['project-version'].project;
const version = transition.params['project-version'].project_version;
const version = projectModel.getProjectVersion(transition.params['project-version'].project_version);
let klass = params[typeName];
if (!~klass.indexOf(projectID)) {
klass = `${projectID}-${klass}`;
Expand Down
3 changes: 2 additions & 1 deletion app/templates/class-index.hbs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

{{#api-index-filter model=model filterData=filterData as |filteredModel|}}
{{#api-index itemData=filteredModel classNames="api__index__content" as |sectionData|}}
{{#each sectionData.sections as |section|}}
Expand All @@ -8,7 +9,7 @@
<li data-test-item={{item.name}}>
{{#link-to (concat parentName section.routeSuffix)
model.project.id
model.projectVersion.version
(url-param "project-version" "project_version")
model.name
item.name
(query-params anchor=item.name)}}
Expand Down
6 changes: 3 additions & 3 deletions app/templates/components/table-of-contents.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<ol class="toc-level-1 modules" style="display: block">
{{#each moduleIDs as |moduleID|}}
<li class="toc-level-1" data-test-module={{moduleID}}>
{{#link-to 'project-version.modules.module' version moduleID}}{{moduleID}}{{/link-to}}
{{#link-to 'project-version.modules.module' (url-param "project-version" "project_version") moduleID}}{{moduleID}}{{/link-to}}
</li>
{{/each}}
</ol>
Expand All @@ -14,7 +14,7 @@
<ol class="toc-level-1 namespaces" style="display: block">
{{#each namespaceIDs as |namespaceID|}}
<li class="toc-level-1" data-test-namespace={{namespaceID}}>
{{#link-to 'project-version.namespaces.namespace' version namespaceID}}{{namespaceID}}{{/link-to}}
{{#link-to 'project-version.namespaces.namespace' (url-param "project-version" "project_version") namespaceID}}{{namespaceID}}{{/link-to}}
</li>
{{/each}}
</ol>
Expand All @@ -24,7 +24,7 @@
<ol class="toc-level-1 classes" style="display: block">
{{#each classesIDs as |classID|}}
<li class="toc-level-1" data-test-class={{classID}}>
{{#link-to 'project-version.classes.class' version classID}}{{classID}}{{/link-to}}
{{#link-to 'project-version.classes.class' (url-param "project-version" "project_version") classID}}{{classID}}{{/link-to}}
</li>
{{/each}}
</ol>
Expand Down
16 changes: 8 additions & 8 deletions app/templates/project-version/classes/class.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
{{#if model.extends}}
<div class="attribute">
<span class="attribute-label">Extends:</span>
<span class="attribute-value">{{#link-to 'project-version.classes.class' model.projectVersion.version model.extends}}{{model.extends}}{{/link-to}}</span>
<span class="attribute-value">{{#link-to 'project-version.classes.class' (url-param "project-version" "project_version") model.extends}}{{model.extends}}{{/link-to}}</span>
</div>
{{/if}}
{{#if model.uses}}
Expand All @@ -17,7 +17,7 @@
<span class="attribute-value">
{{#each model.uses as |parentClass idx|}}
{{#unless (eq idx 0)}}<span class="comma">,</span>{{/unless}}
{{#link-to 'project-version.classes.class' model.projectVersion.version parentClass}}{{parentClass}}{{/link-to}}
{{#link-to 'project-version.classes.class' (url-param "project-version" "project_version") parentClass}}{{parentClass}}{{/link-to}}
{{/each}}
</span>
</div>
Expand All @@ -26,14 +26,14 @@
<div class="attribute">
<span class="attribute-label">Defined in:</span>
<span class="attribute-value">
<a href="{{github-link model.project.id model.projectVersion.version model.file model.line}}" target="_blank" rel="noopener">{{model.file}}:{{model.line}}</a>
<a href="{{github-link model.project.id (url-param "project-version" "project_version") model.file model.line}}" target="_blank" rel="noopener">{{model.file}}:{{model.line}}</a>
</span>
</div>
{{/if}}
{{#if model.module}}
<div class="attribute">
<span class="attribute-label">Module:</span>
<span class="attribute-value">{{#link-to 'project-version.modules.module' model.projectVersion.version model.module}}{{model.module}}{{/link-to}}</span>
<span class="attribute-value">{{#link-to 'project-version.modules.module' (url-param "project-version" "project_version") model.module}}{{model.module}}{{/link-to}}</span>
</div>
{{/if}}
</div>
Expand All @@ -45,7 +45,7 @@
<ul class="tabbed-layout__menu">
{{#link-to (concat parentName ".index")
model.project.id
model.projectVersion.version
(url-param "project-version" "project_version")
model.name
(query-params anchor="")
tagName="li"
Expand All @@ -59,7 +59,7 @@
{{#if model.methods}}
{{#link-to (concat parentName ".methods")
model.project.id
model.projectVersion.version
(url-param "project-version" "project_version")
model.name
(query-params anchor="")
tagName="li"
Expand All @@ -74,7 +74,7 @@
{{#if model.properties}}
{{#link-to (concat parentName ".properties")
model.project.id
model.projectVersion.version
(url-param "project-version" "project_version")
model.name
(query-params anchor="")
tagName="li"
Expand All @@ -89,7 +89,7 @@
{{#if model.events}}
{{#link-to (concat parentName ".events")
model.project.id
model.projectVersion.version
(url-param "project-version" "project_version")
model.name
(query-params anchor="")
tagName="li"
Expand Down
2 changes: 1 addition & 1 deletion app/templates/project-version/modules/module.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{{#if model.parent}}
<div class="attribute">
<span class="attribute-label">Parent:</span>
<span class="attribute-value">{{#link-to 'project-version.modules.module' model.projectVersion.version model.parent}}{{model.parent}}{{/link-to}}</span>
<span class="attribute-value">{{#link-to 'project-version.modules.module' (url-param "project-version" "project_version") model.parent}}{{model.parent}}{{/link-to}}</span>
</div>
{{/if}}
</p>
Expand Down
1 change: 1 addition & 0 deletions config/environment.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ module.exports = function(environment) {
var ALGOLIA_API_KEY = process.env.ALGOLIA_API_KEY || '760969ef081fcadc7e0e60faefdb0907';

var ENV = {
ltsVersion: process.env.LTS_VERSION || '2.8.3',
modulePrefix: 'ember-api-docs',
environment: environment,
rootURL: '/',
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@
"ember-power-select": "^1.8.5",
"ember-resolver": "^4.1.0",
"ember-route-action-helper": "^2.0.3",
"ember-router-service": "^1.0.2",
"ember-service-worker": "0.6.7",
"ember-service-worker-asset-cache": "0.6.1",
"ember-service-worker-cache-fallback": "0.6.1",
Expand Down
78 changes: 78 additions & 0 deletions tests/acceptance/release-lts-project-versions-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { test } from 'qunit';
import moduleForAcceptance from 'ember-api-docs/tests/helpers/module-for-acceptance';
import { click } from 'ember-native-dom-helpers';
import Ember from 'ember';

const {$} = Ember;

moduleForAcceptance('Acceptance | release lts project versions');

test('release url param', function(assert) {
visit('/ember/release/namespaces/Ember');

let checkLinks = (label, selector, versionString) => {
return $('.attributes a').toArray().forEach(el => {
let href = el.attributes.href.value;
if (href[0] === '/') {

assert.ok(href.indexOf(versionString) > -1, `${label} link contains ${versionString} - ${href}`);
}
});
};

let checkSidebarLinks = versionString => {
return checkLinks('side',
'.toc-level-1.modules li:first-child a, .toc-level-1.namespaces li:first-child a, .toc-level-1.classes li:first-child a',
versionString);
};

let checkAttributeLinks = versionString => {
return checkLinks('attributes', '.attributes a', versionString);
};

let checkIndexListLinks = versionString => {
return checkLinks('index-list', '.api-index-filter a', versionString);
};

let checkActiveClass = versionString => {
return assert.ok($('.tabbed-layout__menu li:first-child').hasClass('tabbed-layout__menu__item_selected'), `active class works with ${versionString}`)
};

andThen(function() {
assert.equal(currentURL(), '/ember/release/namespaces/Ember');

checkSidebarLinks('release');
checkActiveClass('release');
checkIndexListLinks('release');
checkAttributeLinks('release');

return click('.tabbed-layout__menu__item:nth-child(2)'); //clicking methods
});

andThen(() => {
assert.equal(currentURL(), '/ember/release/namespaces/Ember/methods?anchor=');
return visit('/ember-data/release/namespaces/DS');
});

andThen(() => {
assert.equal(currentURL(), '/ember-data/release/namespaces/DS');

checkSidebarLinks('release');
checkActiveClass('release');
checkIndexListLinks('release');
checkAttributeLinks('release');

return visit('/ember/lts/namespaces/Ember');
});

return andThen(() => {
assert.equal(currentURL(), '/ember/lts/namespaces/Ember');

checkSidebarLinks('lts');
checkActiveClass('lts');
checkIndexListLinks('lts');
checkAttributeLinks('lts');

return this;
});
});
6 changes: 6 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3484,6 +3484,12 @@ ember-router-generator@^1.0.0:
dependencies:
recast "^0.11.3"

ember-router-service@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/ember-router-service/-/ember-router-service-1.0.2.tgz#8e84dc9ed59b11f89605bd60af16180978ebfde7"
dependencies:
ember-cli-babel "^5.1.7"

ember-runtime-enumerable-includes-polyfill@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ember-runtime-enumerable-includes-polyfill/-/ember-runtime-enumerable-includes-polyfill-2.0.0.tgz#6e9ba118bc909d1d7762de1b03a550d8955308a9"
Expand Down

0 comments on commit 96b409d

Please sign in to comment.