Sha256: 3732c3d08bbf58c8b1771263180bfe8a620e2a5097ec9a91349ad60b782f94c8
Contents?: true
Size: 1.24 KB
Versions: 1
Compression:
Stored size: 1.24 KB
Contents
module ForeignKeyValidation class Validator attr_accessor :validate_against_key, :reflection_names, :object def initialize(opt={}) self.validate_against_key = opt[:validate_against_key] self.reflection_names = opt[:reflection_names] || [] self.object = opt[:object] end def validate to_enum(:invalid_reflection_names).map {|n| attach_error(n) }.any? end private def invalid_reflection_names(&block) reflection_names.each do |reflection_name| next unless keys_present?(reflection_name) if keys_different?(reflection_name) yield reflection_name end end end def key_on_relation(relation) object.public_send(relation).try(validate_against_key) end def key_on_object object.try(validate_against_key) end def keys_present?(relation) key_on_object.present? and key_on_relation(relation).present? end def keys_different?(relation) key_on_object != key_on_relation(relation) end def attach_error(reflection_name) object.errors.add(validate_against_key, ForeignKeyValidation.configuration.error_message.call(validate_against_key, reflection_name, object)) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
foreign_key_validation-1.1.2 | lib/foreign_key_validation/validator.rb |