Skip to content

Commit

Permalink
[ns.router] Роутер не добавляет дефолтные параметры при генерации URL.
Browse files Browse the repository at this point in the history
Fix #582
  • Loading branch information
doochik committed Nov 20, 2015
1 parent 088782c commit a4ab88f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 6 deletions.
18 changes: 15 additions & 3 deletions src/ns.router.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,11 @@ ns.router._generateUrl = function(def, params) {
var pvalue;
var param;

for (var i = 0; i < def.sections.length; i++) {
// флаг, что у урле есть хотя бы один указанный (не дефолтный) параметр
var hasDefinedValue = false;

// склеиваем урл с конца, чтобы убирать неуказанные дефолтные значения
for (var i = def.sections.length - 1; i >= 0; i--) {
section = def.sections[i];
svalue = '';

Expand All @@ -283,10 +287,16 @@ ns.router._generateUrl = function(def, params) {
if (!param.name) {
// Добавляем статический кусок урла как есть.
svalue += param.default_value;
hasDefinedValue = true;

} else {
pvalue = params[param.name];
var is_param_present = param.name in params;

if (is_param_present) {
hasDefinedValue = true;
}

// Выставляем дефолтное значение только необязательным параметрам.
if (param.is_optional && !is_param_present) {
pvalue = param.default_value;
Expand All @@ -303,7 +313,9 @@ ns.router._generateUrl = function(def, params) {
}

// Опциональный параметр не должен попасть в урл, если он не указан явно в params.
if (param.is_optional && !is_param_present) {
// Это происходит до тех пор, пока нет одного указанного параметра (hasDefinedValue === true)
// Опциональные части без дефолтного значения тоже пропускаем
if ((!hasDefinedValue || !pvalue) && param.is_optional && !is_param_present) {
continue;
}

Expand All @@ -322,7 +334,7 @@ ns.router._generateUrl = function(def, params) {
continue;
}

result.push(svalue);
result.unshift(svalue);
}

url = result.join('/');
Expand Down
7 changes: 4 additions & 3 deletions test/spec/ns.router.generateUrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ describe('generate url', function() {
});
});

describe('optional parameter', function() {
describe('optional parameter ->', function() {

beforeEach(function() {
ns.router.routes = {
route: {
'/folder/{name=inbox}': 'folder',
'/{context=}/alert': 'alert-somewhere',
'/folder/{name=inbox}/file': 'folder-file'
'/folder/{name=inbox}/file/{id:int=1}': 'folder-file'
}
};
ns.router.init();
Expand All @@ -63,9 +63,10 @@ describe('generate url', function() {
});

it('middle optional parameter', function() {
expect( ns.router.generateUrl('folder-file') ).to.be.equal('/folder/file');
expect( ns.router.generateUrl('folder-file') ).to.be.equal('/folder/inbox/file');
expect( ns.router.generateUrl('folder-file', { name: 'inbox' }) ).to.be.equal('/folder/inbox/file');
expect( ns.router.generateUrl('folder-file', { name: 'favorites' }) ).to.be.equal('/folder/favorites/file');
expect( ns.router.generateUrl('folder-file', { name: 'favorites', id: 2 }) ).to.be.equal('/folder/favorites/file/2');
});
});

Expand Down

0 comments on commit a4ab88f

Please sign in to comment.