Module: Grape::DSL::InsideRoute::PostBeforeFilter

Defined in:
lib/grape/dsl/inside_route.rb

Overview

Methods which should not be available in filters until the before filter has completed

Instance Method Summary collapse

Instance Method Details

#declared(params, options = {}, declared_params = nil) ⇒ Object

Raises:

  • (ArgumentError)


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/grape/dsl/inside_route.rb', line 29

def declared(params, options = {}, declared_params = nil)
  options = options.reverse_merge(include_missing: true, include_parent_namespaces: true)

  all_declared_params = route_setting(:declared_params)
  current_namespace_declared_params = route_setting(:saved_declared_params).last

  declared_params ||= options[:include_parent_namespaces] ? all_declared_params : current_namespace_declared_params

  raise ArgumentError, 'Tried to filter for declared parameters but none exist.' unless declared_params

  if params.is_a? Array
    params.map do |param|
      declared(param || {}, options, declared_params)
    end
  else
    declared_params.each_with_object(Hashie::Mash.new) do |key, hash|
      key = { key => nil } unless key.is_a? Hash

      key.each_pair do |parent, children|
        output_key = options[:stringify] ? parent.to_s : parent.to_sym

        next unless options[:include_missing] || params.key?(parent)

        hash[output_key] = if children
                             children_params = params[parent] || (children.is_a?(Array) ? [] : {})
                             declared(children_params, options, Array(children))
                           else
                             params[parent]
                           end
      end
    end
  end
end