Sha256: d4bc6a0a858520c2281fa61233d183ab60a5226aa921b10fd1f96c578ce5f927

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 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
      has_errors = false
      reflection_names.each do |reflection_name|
        next unless keys_present?(reflection_name)
        if keys_different?(reflection_name)
          attach_error(reflection_name)
          has_errors = true
        end
      end
      has_errors
    end

    private

    def key_on_relation(relation)
      object.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

2 entries across 2 versions & 1 rubygems

Version Path
foreign_key_validation-1.1.1 lib/foreign_key_validation/validator.rb
foreign_key_validation-1.1.0 lib/foreign_key_validation/validator.rb