@@ -123,106 +123,110 @@ Resolver.prototype.resolve = function (spec, arg1, arg2, arg3) {
123123 var method , operation , responseCode ;
124124 path = spec . paths [ name ] ;
125125
126- for ( method in path ) {
127- // operation reference
128- if ( method === '$ref' ) {
129- // location = path[method];
130- location = '/paths' + name ;
131- this . resolveInline ( root , spec , path , resolutionTable , unresolvedRefs , location ) ;
132- }
133- else {
134- operation = path [ method ] ;
135- var sharedParameters = path . parameters || [ ] ;
136- var parameters = operation . parameters || [ ] ;
137-
138- for ( i in sharedParameters ) {
139- var parameter = sharedParameters [ i ] ;
140- parameters . unshift ( parameter ) ;
141- }
142- if ( method !== 'parameters' && _ . isObject ( operation ) ) {
143- operation . parameters = operation . parameters || parameters ;
126+ if ( typeof path === 'object' ) {
127+ for ( method in path ) {
128+ // operation reference
129+ if ( method === '$ref' ) {
130+ // location = path[method];
131+ location = '/paths' + name ;
132+ this . resolveInline ( root , spec , path , resolutionTable , unresolvedRefs , location ) ;
144133 }
134+ else {
135+ operation = path [ method ] ;
136+ var sharedParameters = path . parameters || [ ] ;
137+ var parameters = operation . parameters || [ ] ;
145138
146- for ( i in parameters ) {
147- var parameter = parameters [ i ] ;
148- location = '/paths' + name + '/' + method + '/parameters' ;
149-
150- if ( parameter . in === 'body' && parameter . schema ) {
151- if ( _ . isArray ( parameter . schema . allOf ) ) {
152- // move to a definition
153- var modelName = 'inline_model' ;
154- var name = modelName ;
155- var done = false ; var counter = 0 ;
156- while ( ! done ) {
157- if ( typeof spec . definitions [ name ] === 'undefined' ) {
158- done = true ;
159- break ;
160- }
161- name = modelName + '_' + counter ;
162- counter ++ ;
163- }
164- spec . definitions [ name ] = { allOf : parameter . schema . allOf } ;
165- delete parameter . schema . allOf ;
166- parameter . schema . $ref = '#/definitions/' + name ;
167- this . processAllOf ( root , name , spec . definitions [ name ] , resolutionTable , unresolvedRefs , spec ) ;
168- }
169- else {
170- this . resolveTo ( root , parameter . schema , resolutionTable , location ) ;
171- }
139+ for ( i in sharedParameters ) {
140+ var parameter = sharedParameters [ i ] ;
141+ parameters . unshift ( parameter ) ;
172142 }
173-
174- if ( parameter . $ref ) {
175- // parameter reference
176- this . resolveInline ( root , spec , parameter , resolutionTable , unresolvedRefs , parameter . $ref ) ;
143+ if ( method !== 'parameters' && _ . isObject ( operation ) ) {
144+ operation . parameters = operation . parameters || parameters ;
177145 }
178- }
179146
180- for ( responseCode in operation . responses ) {
181- var response = operation . responses [ responseCode ] ;
182- location = '/paths' + name + '/' + method + '/responses/' + responseCode ;
147+ for ( i in parameters ) {
148+ var parameter = parameters [ i ] ;
149+ location = '/paths' + name + '/' + method + '/parameters' ;
183150
184- if ( _ . isObject ( response ) ) {
185- if ( response . $ref ) {
186- // response reference
187- this . resolveInline ( root , spec , response , resolutionTable , unresolvedRefs , location ) ;
188- }
189- if ( response . schema ) {
190- var responseObj = response ;
191- if ( _ . isArray ( responseObj . schema . allOf ) ) {
151+ if ( parameter . in === 'body' && parameter . schema ) {
152+ if ( _ . isArray ( parameter . schema . allOf ) ) {
192153 // move to a definition
193154 var modelName = 'inline_model' ;
194155 var name = modelName ;
195- var done = false ; var counter = 0 ;
196- while ( ! done ) {
197- if ( typeof spec . definitions [ name ] === 'undefined' ) {
156+ var done = false ;
157+ var counter = 0 ;
158+ while ( ! done ) {
159+ if ( typeof spec . definitions [ name ] === 'undefined' ) {
198160 done = true ;
199161 break ;
200162 }
201163 name = modelName + '_' + counter ;
202- counter ++ ;
164+ counter ++ ;
203165 }
204- spec . definitions [ name ] = { allOf : responseObj . schema . allOf } ;
205- delete responseObj . schema . allOf ;
206- delete responseObj . schema . type ;
207- responseObj . schema . $ref = '#/definitions/' + name ;
166+ spec . definitions [ name ] = { allOf : parameter . schema . allOf } ;
167+ delete parameter . schema . allOf ;
168+ parameter . schema . $ref = '#/definitions/' + name ;
208169 this . processAllOf ( root , name , spec . definitions [ name ] , resolutionTable , unresolvedRefs , spec ) ;
209170 }
210- else if ( 'array' === responseObj . schema . type ) {
211- if ( responseObj . schema . items && responseObj . schema . items . $ref ) {
212- // response reference
213- this . resolveInline ( root , spec , responseObj . schema . items , resolutionTable , unresolvedRefs , location ) ;
214- }
215- }
216171 else {
217- this . resolveTo ( root , response . schema , resolutionTable , location ) ;
172+ this . resolveTo ( root , parameter . schema , resolutionTable , location ) ;
173+ }
174+ }
175+
176+ if ( parameter . $ref ) {
177+ // parameter reference
178+ this . resolveInline ( root , spec , parameter , resolutionTable , unresolvedRefs , parameter . $ref ) ;
179+ }
180+ }
181+
182+ for ( responseCode in operation . responses ) {
183+ var response = operation . responses [ responseCode ] ;
184+ location = '/paths' + name + '/' + method + '/responses/' + responseCode ;
185+
186+ if ( _ . isObject ( response ) ) {
187+ if ( response . $ref ) {
188+ // response reference
189+ this . resolveInline ( root , spec , response , resolutionTable , unresolvedRefs , location ) ;
190+ }
191+ if ( response . schema ) {
192+ var responseObj = response ;
193+ if ( _ . isArray ( responseObj . schema . allOf ) ) {
194+ // move to a definition
195+ var modelName = 'inline_model' ;
196+ var name = modelName ;
197+ var done = false ;
198+ var counter = 0 ;
199+ while ( ! done ) {
200+ if ( typeof spec . definitions [ name ] === 'undefined' ) {
201+ done = true ;
202+ break ;
203+ }
204+ name = modelName + '_' + counter ;
205+ counter ++ ;
206+ }
207+ spec . definitions [ name ] = { allOf : responseObj . schema . allOf } ;
208+ delete responseObj . schema . allOf ;
209+ delete responseObj . schema . type ;
210+ responseObj . schema . $ref = '#/definitions/' + name ;
211+ this . processAllOf ( root , name , spec . definitions [ name ] , resolutionTable , unresolvedRefs , spec ) ;
212+ }
213+ else if ( 'array' === responseObj . schema . type ) {
214+ if ( responseObj . schema . items && responseObj . schema . items . $ref ) {
215+ // response reference
216+ this . resolveInline ( root , spec , responseObj . schema . items , resolutionTable , unresolvedRefs , location ) ;
217+ }
218+ }
219+ else {
220+ this . resolveTo ( root , response . schema , resolutionTable , location ) ;
221+ }
218222 }
219223 }
220224 }
221225 }
222226 }
227+ // clear them out to avoid multiple resolutions
228+ path . parameters = [ ] ;
223229 }
224- // clear them out to avoid multiple resolutions
225- path . parameters = [ ] ;
226230 }
227231
228232 var expectedCalls = 0 , toResolve = [ ] ;
0 commit comments