22
33require 'active_support'
44require 'active_support/core_ext/string/inflections'
5- require 'grape-swagger/endpoint/params_parser'
5+ require_relative 'request_param_parsers/headers'
6+ require_relative 'request_param_parsers/route'
7+ require_relative 'request_param_parsers/body'
68
79module Grape
810 class Endpoint # rubocop:disable Metrics/ClassLength
@@ -12,9 +14,7 @@ def content_types_for(target_class)
1214 if content_types . empty?
1315 formats = [ target_class . format , target_class . default_format ] . compact . uniq
1416 formats = GrapeSwagger ::FORMATTER_DEFAULTS . keys if formats . empty?
15- content_types = GrapeSwagger ::CONTENT_TYPE_DEFAULTS . select do |content_type , _mime_type | # rubocop:disable Style/HashSlice
16- formats . include? content_type
17- end . values
17+ content_types = formats . filter_map { |f | GrapeSwagger ::CONTENT_TYPE_DEFAULTS [ f ] }
1818 end
1919
2020 content_types . uniq
@@ -383,45 +383,15 @@ def build_file_response(memo)
383383 end
384384
385385 def build_request_params ( route , settings )
386- required = merge_params ( route )
387- required = GrapeSwagger ::DocMethods ::Headers . parse ( route ) + required unless route . headers . nil?
388-
389- default_type ( required )
390-
391- request_params = GrapeSwagger ::Endpoint ::ParamsParser . parse_request_params ( required , settings , self )
392-
393- request_params . empty? ? required : request_params
394- end
395-
396- def merge_params ( route )
397- path_params = get_path_params ( route . app &.inheritable_setting &.namespace_stackable )
398- param_keys = route . params . keys
399-
400- # Merge path params options into route params
401- route_params = route . params
402- route_params . each_key do |key |
403- path = path_params [ key ] || { }
404- params = route_params [ key ]
405- params = { } unless params . is_a? Hash
406- route_params [ key ] = path . merge ( params )
407- end
408-
409- route_params . delete_if { |key | key . is_a? ( String ) && param_keys . include? ( key . to_sym ) } . to_a
410- end
411-
412- # Iterates over namespaces recursively
413- # to build a hash of path params with options, including type
414- def get_path_params ( stackable_values )
415- params = { }
416- return param unless stackable_values
417- return params unless stackable_values . is_a? Grape ::Util ::StackableValues
418-
419- stackable_values &.new_values &.dig ( :namespace ) &.each do |namespace | # rubocop:disable Style/SafeNavigationChainLength
420- space = namespace . space . to_s . gsub ( ':' , '' )
421- params [ space ] = namespace . options || { }
386+ GrapeSwagger . request_param_parsers . each_with_object ( { } ) do |parser_klass , accum |
387+ params = parser_klass . parse (
388+ route ,
389+ accum ,
390+ settings ,
391+ self
392+ )
393+ accum . merge! ( params . stringify_keys )
422394 end
423- inherited_params = get_path_params ( stackable_values . inherited_values )
424- inherited_params . merge ( params )
425395 end
426396
427397 def default_type ( params )
0 commit comments