Skip to content

Commit 73aee4d

Browse files
committed
Merge pull request #667 from kendzi/issue-666
#666 fix for local base model properties
2 parents 1b5af99 + a2c180b commit 73aee4d

File tree

2 files changed

+80
-5
lines changed

2 files changed

+80
-5
lines changed

lib/resolver.js

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ Resolver.prototype.resolve = function (spec, arg1, arg2, arg3) {
248248
processedCalls += 1;
249249

250250
if(processedCalls === expectedCalls) {
251-
self.finish(spec, root, resolutionTable, resolvedRefs, unresolvedRefs, callback);
251+
self.finish(spec, root, resolutionTable, resolvedRefs, unresolvedRefs, callback, true);
252252
}
253253
}
254254
else {
@@ -344,7 +344,7 @@ Resolver.prototype.resolveItem = function(spec, root, resolutionTable, resolvedR
344344
}
345345
};
346346

347-
Resolver.prototype.finish = function (spec, root, resolutionTable, resolvedRefs, unresolvedRefs, callback) {
347+
Resolver.prototype.finish = function (spec, root, resolutionTable, resolvedRefs, unresolvedRefs, callback, localResolve) {
348348
// walk resolution table and replace with resolved refs
349349
var ref;
350350
for (ref in resolutionTable) {
@@ -355,8 +355,11 @@ Resolver.prototype.finish = function (spec, root, resolutionTable, resolvedRefs,
355355
if (resolvedTo) {
356356
spec.definitions = spec.definitions || {};
357357
if (item.resolveAs === 'ref') {
358-
for (key in resolvedTo.obj) {
359-
var abs = this.retainRoot(resolvedTo.obj[key], item.root);
358+
if (localResolve !== true) {
359+
// don't retain root for local definitions
360+
for (key in resolvedTo.obj) {
361+
var abs = this.retainRoot(resolvedTo.obj[key], item.root);
362+
}
360363
}
361364
spec.definitions[resolvedTo.name] = resolvedTo.obj;
362365
item.obj.$ref = '#/definitions/' + resolvedTo.name;
@@ -366,7 +369,12 @@ Resolver.prototype.finish = function (spec, root, resolutionTable, resolvedRefs,
366369
delete targetObj.$ref;
367370

368371
for (key in resolvedTo.obj) {
369-
var abs = this.retainRoot(resolvedTo.obj[key], item.root);
372+
var abs = resolvedTo.obj[key];
373+
374+
if (localResolve !== true) {
375+
// don't retain root for local definitions
376+
abs = this.retainRoot(resolvedTo.obj[key], item.root);
377+
}
370378
targetObj[key] = abs;
371379
}
372380
}

test/resolver.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,4 +1110,71 @@ describe('swagger resolver', function () {
11101110
done();
11111111
});
11121112
});
1113+
1114+
it('base model properties', function(done) {
1115+
1116+
var api = new Resolver();
1117+
var spec = {
1118+
1119+
swagger:'2.0',
1120+
info:{
1121+
},
1122+
host:"localhost:9000",
1123+
schemes:[
1124+
"http"
1125+
],
1126+
basePath:"/2.0",
1127+
paths:{
1128+
'/':{
1129+
get:{
1130+
responses:{
1131+
"200":{
1132+
description:"Pets",
1133+
schema:{
1134+
"$ref":"#/definitions/Pet"
1135+
}
1136+
}
1137+
},
1138+
parameters:[
1139+
]
1140+
}
1141+
}
1142+
},
1143+
definitions:{
1144+
Cat:{
1145+
allOf: [
1146+
{
1147+
"$ref": "#/definitions/Pet"
1148+
},
1149+
{
1150+
type: "object",
1151+
properties:{
1152+
size:{
1153+
type: "number"
1154+
}
1155+
}
1156+
}
1157+
]
1158+
},
1159+
Pet:{
1160+
type: "object",
1161+
properties:{
1162+
color:{
1163+
"$ref":"#/definitions/Color"
1164+
}
1165+
}
1166+
},
1167+
Color:{
1168+
"type": "string"
1169+
}
1170+
}
1171+
};
1172+
api.resolve(spec, 'http://localhost:8000/v2/swagger.json', function (spec, unresolved) {
1173+
1174+
expect(spec.definitions.Pet.properties.color['$ref']).toBe('#/definitions/Color');
1175+
expect(spec.definitions.Cat.properties.color['$ref']).toBe('#/definitions/Color');
1176+
1177+
done();
1178+
});
1179+
});
11131180
});

0 commit comments

Comments
 (0)