module Grape::DSL::InsideRoute::PostBeforeFilter

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

Public Instance Methods

declared(params, options = {}, declared_params = nil) click to toggle source
# 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)

  declared_params ||= (!options[:include_parent_namespaces] ? route_setting(:declared_params) : (route_setting(:saved_declared_params) || [])).flatten(1) || []

  fail 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