class Grape::Validations::AttributesIterator
Attributes
scope[R]
Public Class Methods
new(validator, scope, params)
click to toggle source
# File lib/grape/validations/attributes_iterator.rb, line 8 def initialize(validator, scope, params) @scope = scope @attrs = validator.attrs @original_params = scope.params(params) @params = Array.wrap(@original_params) end
Public Instance Methods
each(&block)
click to toggle source
# File lib/grape/validations/attributes_iterator.rb, line 15 def each(&block) do_each(@params, &block) # because we need recursion for nested arrays end
Private Instance Methods
do_each(params_to_process, parent_indicies = []) { |resource_params, attr_name, inside_array| ... }
click to toggle source
# File lib/grape/validations/attributes_iterator.rb, line 21 def do_each(params_to_process, parent_indicies = [], &block) params_to_process.each_with_index do |resource_params, index| # when we get arrays of arrays it means that target element located inside array # we need this because we want to know parent arrays indicies if resource_params.is_a?(Array) do_each(resource_params, [index] + parent_indicies, &block) next end if @scope.type == Array next unless @original_params.is_a?(Array) # do not validate content of array if it isn't array inside_array = true end if inside_array # fill current and parent scopes with correct array indicies parent_scope = @scope.parent parent_indicies.each do |parent_index| parent_scope.index = parent_index parent_scope = parent_scope.parent end @scope.index = index end @attrs.each do |attr_name| yield resource_params, attr_name, inside_array end end end