Skip to content

Commit b4380a3

Browse files
committed
Go to the version index when changing ember-data versions across the 4.0
boundary 4.0 is somewhat arbitrarily chosen as a spot where ember-data is substantially different organization before and after.
1 parent b9c4ca8 commit b4380a3

File tree

2 files changed

+77
-15
lines changed

2 files changed

+77
-15
lines changed

app/controllers/project-version.js

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -189,30 +189,36 @@ export function findEndingRoute({
189189
break;
190190
}
191191

192-
let isEmberProject = project === 'ember';
193-
194-
// if the user is navigating to/from api versions >= 2.16, take them
192+
// if the user is navigating to/from api versions Ember >= 2.16 or Ember Data >= 4.0, take them
195193
// to the home page instead of trying to translate the url
196-
let shouldConvertPackages = _shouldConvertPackages(
194+
if (shouldGoToVersionIndex(project, targetVersion, currentVersion)) {
195+
return `/${project}/${projectVersionID}`;
196+
} else {
197+
return `/${project}/${projectVersionID}/${endingRoute}${currentAnchor}`;
198+
}
199+
}
200+
201+
function shouldGoToVersionIndex(project, targetVersion, currentVersion) {
202+
let boundaryVersion;
203+
if (project === 'ember') {
204+
boundaryVersion = '2.16';
205+
} else if (project === 'ember-data') {
206+
boundaryVersion = '4.0';
207+
}
208+
return isCrossingVersionBoundary(
197209
targetVersion,
198210
currentVersion,
211+
boundaryVersion,
199212
);
200-
201-
if (!isEmberProject || !shouldConvertPackages) {
202-
return `/${project}/${projectVersionID}/${endingRoute}${currentAnchor}`;
203-
} else {
204-
return `/${project}/${projectVersionID}`;
205-
}
206213
}
207214

208215
// Input some version info, returns a boolean based on
209-
// whether the user is switching versions for a 2.16 docs release or later.
210-
// The urls for pre-2.16 classes and later packages are quite different
211-
function _shouldConvertPackages(targetVer, previousVer) {
216+
// whether the user is switching versions for a release or later.
217+
function isCrossingVersionBoundary(targetVer, previousVer, boundaryVersion) {
212218
let targetVersion = getCompactVersion(targetVer);
213219
let previousVersion = getCompactVersion(previousVer);
214-
let previousComparison = semverCompare(previousVersion, '2.16');
215-
let targetComparison = semverCompare(targetVersion, '2.16');
220+
let previousComparison = semverCompare(previousVersion, boundaryVersion);
221+
let targetComparison = semverCompare(targetVersion, boundaryVersion);
216222
return (
217223
(previousComparison < 0 && targetComparison >= 0) ||
218224
(previousComparison >= 0 && targetComparison < 0)

tests/unit/controllers/project-version-test.js

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,61 @@ module('Unit | Controller | project version', function (hooks) {
8181
'/ember/6.4/modules/%40ember%2Fapplication#classes',
8282
);
8383
});
84+
85+
test('For ember project, it goes to version root when crossing 2.16 boundary', function (assert) {
86+
let endingRoute = findEndingRoute({
87+
project: 'ember',
88+
targetVersion: '2.15.0',
89+
currentVersion: '2.16.0',
90+
currentRouteName: 'project-version.classes.class',
91+
classModelName: 'Component',
92+
moduleModelName: null,
93+
namespaceModelName: null,
94+
currentAnchor: '#didInsertElement',
95+
});
96+
97+
assert.strictEqual(endingRoute, '/ember/2.15');
98+
99+
endingRoute = findEndingRoute({
100+
project: 'ember',
101+
targetVersion: '2.16.0',
102+
currentVersion: '2.15.0',
103+
currentRouteName: 'project-version.classes.class',
104+
classModelName: 'Component',
105+
moduleModelName: null,
106+
namespaceModelName: null,
107+
currentAnchor: '#didInsertElement',
108+
});
109+
110+
assert.strictEqual(endingRoute, '/ember/2.16');
111+
});
112+
113+
test('For ember-data project, it goes to version root when crossing 4.0 boundary', function (assert) {
114+
let endingRoute = findEndingRoute({
115+
project: 'ember-data',
116+
targetVersion: '3.28.0',
117+
currentVersion: '4.0.0',
118+
currentRouteName: 'project-version.classes.class',
119+
classModelName: 'Adapter',
120+
moduleModelName: null,
121+
namespaceModelName: null,
122+
currentAnchor: '',
123+
});
124+
125+
assert.strictEqual(endingRoute, '/ember-data/3.28');
126+
127+
endingRoute = findEndingRoute({
128+
project: 'ember-data',
129+
targetVersion: '4.0.0',
130+
currentVersion: '3.28.0',
131+
currentRouteName: 'project-version.classes.class',
132+
classModelName: 'DS.Adapter',
133+
moduleModelName: null,
134+
namespaceModelName: null,
135+
currentAnchor: '',
136+
});
137+
138+
assert.strictEqual(endingRoute, '/ember-data/4.0');
139+
});
84140
});
85141
});

0 commit comments

Comments
 (0)