class LIVR::Rules::Meta::ListOfDifferentObjects

Public Class Methods

new(selector_field, livrs) click to toggle source
# File lib/livr/rules/meta.rb, line 125
def initialize(selector_field, livrs)
  @selector_field = selector_field
  @validators = {}
  livrs.each do |selector_value, livr|
    @validators[selector_value] = Validator.new(livr).prepare
  end
end

Public Instance Methods

call(objects, user_data, field_results) click to toggle source
# File lib/livr/rules/meta.rb, line 133
def call(objects, user_data, field_results)
  return if is_no_value(objects)
  return 'FORMAT_ERROR' unless objects.is_a?(Array)

  results = []
  errors = []
  has_errors = false

  objects.each do |object|
    if !object.is_a?(Hash) || !object[@selector_field] || !@validators[ object[@selector_field] ]
      errors << 'FORMAT_ERROR'
      next
    end

    validator = @validators[ object[@selector_field] ]
    result = validator.validate(object)

    if result
      results << result
      errors << nil
    else
      has_errors = true
      errors << validator.get_errors
      results << nil
    end
  end

  if has_errors
    return errors
  else
    field_results << results
    return
  end
end