Sha256: a5b9d090afb07134f9be3341c5742257c2cf2d044dd3728affedc6618cf4c59e
Contents?: true
Size: 1.98 KB
Versions: 2
Compression:
Stored size: 1.98 KB
Contents
# frozen_string_literal: true class Serega module SeregaValidations # # Validations that take place when initializing serializer # module Initiate # # Modifiers validation # class CheckModifiers class << self # Validates provided fields names are existing attributes # # @param serializer_class [Serega] # @param fields [Hash] validated fields # # @raise [Serega::AttributeNotExist] when modifier not exist as attribute # # @return [void] # def call(serializer_class, fields) return unless fields validate(serializer_class, fields, []) end private def validate(serializer_class, fields, prev_names) fields.each do |name, nested_fields| attribute = serializer_class.attributes[name] raise_error(name, prev_names) unless attribute next if nested_fields.empty? raise_nested_error(name, prev_names, nested_fields) unless attribute.relation? nested_serializer = attribute.serializer validate(nested_serializer, nested_fields, prev_names + [name]) end end def raise_error(name, prev_names) field_name = field_name(name, prev_names) raise Serega::AttributeNotExist, "Attribute #{field_name} not exists" end def raise_nested_error(name, prev_names, nested_fields) field_name = field_name(name, prev_names) first_nested = nested_fields.keys.first raise Serega::AttributeNotExist, "Attribute #{field_name} has no :serializer option specified to add nested '#{first_nested}' attribute" end def field_name(name, prev_names) res = "'#{name}'" res += " ('#{prev_names.join(".")}.#{name}')" if prev_names.any? res end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
serega-0.8.0 | lib/serega/validations/initiate/check_modifiers.rb |
serega-0.7.0 | lib/serega/validations/initiate/check_modifiers.rb |