@@ -207,11 +207,8 @@ def response_object(route, options)
207207
208208 next build_file_response ( memo [ value [ :code ] ] ) if file_response? ( value [ :model ] )
209209
210- if memo . key? ( 200 ) && route . request_method == 'DELETE' && value [ :model ] . nil?
211- memo [ 204 ] = memo . delete ( 200 )
212- value [ :code ] = 204
213- next
214- end
210+ next build_delete_response ( memo , value ) if delete_response? ( memo , route , value )
211+ next build_primitive_response ( memo , route , value , options ) if value [ :type ]
215212
216213 # Explicitly request no model with { model: '' }
217214 next if value [ :model ] == ''
@@ -284,6 +281,15 @@ def default_code_from_route(route)
284281 [ default_code ]
285282 end
286283
284+ def build_delete_response ( memo , value )
285+ memo [ 204 ] = memo . delete ( 200 )
286+ value [ :code ] = 204
287+ end
288+
289+ def delete_response? ( memo , route , value )
290+ memo . key? ( 200 ) && route . request_method == 'DELETE' && value [ :model ] . nil?
291+ end
292+
287293 def build_memo_schema ( memo , route , value , response_model , options )
288294 if memo [ value [ :code ] ] [ :schema ] && value [ :as ]
289295 memo [ value [ :code ] ] [ :schema ] [ :properties ] . merge! ( build_reference ( route , value , response_model , options ) )
@@ -304,6 +310,18 @@ def build_memo_schema(memo, route, value, response_model, options)
304310 end
305311 end
306312
313+ def build_primitive_response ( memo , _route , value , _options )
314+ type = GrapeSwagger ::DocMethods ::DataType . call ( value [ :type ] )
315+
316+ if memo [ value [ :code ] ] . include? ( :schema ) && value . include? ( :as )
317+ memo [ value [ :code ] ] [ :schema ] [ :properties ] . merge! ( value [ :as ] => { type : type } )
318+ elsif value . include? ( :as )
319+ memo [ value [ :code ] ] [ :schema ] = { type : :object , properties : { value [ :as ] => { type : type } } }
320+ else
321+ memo [ value [ :code ] ] [ :schema ] = { type : type }
322+ end
323+ end
324+
307325 def build_reference ( route , value , response_model , settings )
308326 # TODO: proof that the definition exist, if model isn't specified
309327 reference = if value . key? ( :as )
@@ -387,7 +405,7 @@ def get_path_params(stackable_values)
387405 return param unless stackable_values
388406 return params unless stackable_values . is_a? Grape ::Util ::StackableValues
389407
390- stackable_values &.new_values &.dig ( :namespace ) &.each do |namespace |
408+ stackable_values &.new_values &.dig ( :namespace ) &.each do |namespace | # rubocop:disable Style/SafeNavigationChainLength
391409 space = namespace . space . to_s . gsub ( ':' , '' )
392410 params [ space ] = namespace . options || { }
393411 end
@@ -464,6 +482,7 @@ def success_code_from_entity(route, entity)
464482 default_code [ :as ] = entity [ :as ] if entity [ :as ]
465483 default_code [ :is_array ] = entity [ :is_array ] if entity [ :is_array ]
466484 default_code [ :required ] = entity [ :required ] if entity [ :required ]
485+ default_code [ :type ] = entity [ :type ] if entity [ :type ]
467486 else
468487 default_code = GrapeSwagger ::DocMethods ::StatusCodes . get [ route . request_method . downcase . to_sym ]
469488 default_code [ :model ] = entity if entity
0 commit comments