lib/conformista/validations.rb
module Conformista
# Adds validation behaviour to ActiveModel-compliant objects. This means that
# objects this module is mixed into will only run `save` if it responds
# positively to `valid?`.
#
# This model makes sure that all attributes are properly delegated before any
# validations run, and copies any presented model errors to the host object.
#
# You can override how specific models are validated by overriding the
# `validate_MODEL_NAME` method.
module Validations
def self.included(base)
base.before_validation :delegate_attributes
base.before_validation :validate_models
base.before_validation :copy_validation_errors
base.before_save :valid?
end
private
def validate_models
each_model do |record, name|
send :"validate_#{name}"
end
end
def copy_validation_errors
each_model do |record, name|
record.errors.each do |key, value|
errors.add key, value
end
end
end
end
end