class ForeignKeyValidation::Validator

Attributes

object[RW]
reflection_names[RW]
validate_against_key[RW]

Public Class Methods

new(opt={}) click to toggle source
# File lib/foreign_key_validation/validator.rb, line 7
def initialize(opt={})
  self.validate_against_key = opt[:validate_against_key]
  self.reflection_names     = opt[:reflection_names] || []
  self.object               = opt[:object]
end

Public Instance Methods

validate() click to toggle source
# File lib/foreign_key_validation/validator.rb, line 13
def validate
  to_enum(:invalid_reflection_names).map {|n| attach_error(n) }.any?
end

Private Instance Methods

attach_error(reflection_name) click to toggle source
# File lib/foreign_key_validation/validator.rb, line 44
def attach_error(reflection_name)
  object.errors.add(validate_against_key, ForeignKeyValidation.configuration.error_message.call(validate_against_key, reflection_name, object))
end
invalid_reflection_names() { |reflection_name| ... } click to toggle source
# File lib/foreign_key_validation/validator.rb, line 19
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
key_on_object() click to toggle source
# File lib/foreign_key_validation/validator.rb, line 32
def key_on_object
  object.try(validate_against_key)
end
key_on_relation(relation) click to toggle source
# File lib/foreign_key_validation/validator.rb, line 28
def key_on_relation(relation)
  object.public_send(relation).try(validate_against_key)
end
keys_different?(relation) click to toggle source
# File lib/foreign_key_validation/validator.rb, line 40
def keys_different?(relation)
  key_on_object != key_on_relation(relation)
end
keys_present?(relation) click to toggle source
# File lib/foreign_key_validation/validator.rb, line 36
def keys_present?(relation)
  key_on_object.present? and key_on_relation(relation).present?
end