module Grape::DSL::InsideRoute::PostBeforeFilter

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

Public Instance Methods

declared(passed_params, options = {}, declared_params = nil) click to toggle source
# File lib/grape/dsl/inside_route.rb, line 29
def declared(passed_params, options = {}, declared_params = nil)
  options = options.reverse_merge(include_missing: true, include_parent_namespaces: true)
  declared_params ||= optioned_declared_params(options)

  if passed_params.is_a?(Array)
    declared_array(passed_params, options, declared_params)
  else
    declared_hash(passed_params, options, declared_params)
  end
end

Private Instance Methods

declared_array(passed_params, options, declared_params) click to toggle source
# File lib/grape/dsl/inside_route.rb, line 42
def declared_array(passed_params, options, declared_params)
  passed_params.map do |passed_param|
    declared(passed_param || {}, options, declared_params)
  end
end
declared_hash(passed_params, options, declared_params) click to toggle source
# File lib/grape/dsl/inside_route.rb, line 48
def declared_hash(passed_params, options, declared_params)
  declared_params.each_with_object(passed_params.class.new) do |declared_param, memo|
    if declared_param.is_a?(Hash)
      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_params.class.new
        memo_key = optioned_param_key(declared_parent_param, options)

        memo[memo_key] = handle_passed_param(declared_parent_param, passed_children_params) do
          declared(passed_children_params, options, declared_children_params)
        end
      end
    else
      # If it is not a Hash then it does not have children.
      # Find its value or set it to nil.
      has_alias = route_setting(:aliased_params) && route_setting(:aliased_params).find { |current| current[declared_param] }
      param_alias = has_alias[declared_param] if has_alias

      next unless options[:include_missing] || passed_params.key?(declared_param) || (param_alias && passed_params.key?(param_alias))

      if param_alias
        memo[optioned_param_key(param_alias, options)] = passed_params[param_alias]
      else
        memo[optioned_param_key(declared_param, options)] = passed_params[declared_param]
      end
    end
  end
end
declared_param_is_array?(declared_param) click to toggle source
# File lib/grape/dsl/inside_route.rb, line 86
def declared_param_is_array?(declared_param)
  route_options_params[declared_param.to_s] && route_options_params[declared_param.to_s][:type] == 'Array'
end
handle_passed_param(declared_param, passed_children_params) { || ... } click to toggle source
# File lib/grape/dsl/inside_route.rb, line 78
def handle_passed_param(declared_param, passed_children_params, &_block)
  should_be_empty_array?(declared_param, passed_children_params) ? [] : yield
end
optioned_declared_params(options) click to toggle source
# File lib/grape/dsl/inside_route.rb, line 98
def optioned_declared_params(options)
  declared_params = if options[:include_parent_namespaces]
                      # Declared params including parent namespaces
                      route_setting(:saved_declared_params).flatten | Array(route_setting(:declared_params))
                    else
                      # Declared params at current namespace
                      route_setting(:saved_declared_params).last & Array(route_setting(:declared_params))
                    end

  raise ArgumentError, 'Tried to filter for declared parameters but none exist.' unless declared_params
  declared_params
end
optioned_param_key(declared_param, options) click to toggle source
# File lib/grape/dsl/inside_route.rb, line 94
def optioned_param_key(declared_param, options)
  options[:stringify] ? declared_param.to_s : declared_param.to_sym
end
route_options_params() click to toggle source
# File lib/grape/dsl/inside_route.rb, line 90
def route_options_params
  options[:route_options][:params] || {}
end
should_be_empty_array?(declared_param, passed_children_params) click to toggle source
# File lib/grape/dsl/inside_route.rb, line 82
def should_be_empty_array?(declared_param, passed_children_params)
  declared_param_is_array?(declared_param) && passed_children_params.empty?
end