diff --git a/lib/grape/dsl/inside_route.rb b/lib/grape/dsl/inside_route.rb index 281ff834ec..c76652478b 100644 --- a/lib/grape/dsl/inside_route.rb +++ b/lib/grape/dsl/inside_route.rb @@ -27,6 +27,10 @@ def self.post_filter_methods(type) # has completed module PostBeforeFilter def declared(passed_params, options = {}, declared_params = nil) + puts 'declared' + puts passed_params + puts passed_params.class + options = options.reverse_merge(include_missing: true, include_parent_namespaces: true) declared_params ||= optioned_declared_params(options) @@ -46,7 +50,7 @@ def declared_array(passed_params, options, declared_params) end def declared_hash(passed_params, options, declared_params) - declared_params.each_with_object({}) do |declared_param, memo| + declared_params.each_with_object(passed_params.class.new) do |declared_param, memo| # If it is not a Hash then it does not have children. # Find its value or set it to nil. if !declared_param.is_a?(Hash) @@ -56,7 +60,7 @@ def declared_hash(passed_params, options, declared_params) declared_param.each_pair do |declared_parent_param, declared_children_params| next unless options[:include_missing] || passed_params.key?(declared_parent_param) - passed_children_params = passed_params[declared_parent_param] || {} + passed_children_params = passed_params[declared_parent_param] || passed_params.class.new memo[optioned_param_key(declared_parent_param, options)] = declared(passed_children_params, options, declared_children_params) end end