discourse/lib/has_errors.rb

32 lines
630 B
Ruby

# Helper functions for dealing with errors and objects that have
# child objects with errors
module HasErrors
def errors
@errors ||= ActiveModel::Errors.new(self)
end
def validate_child(obj)
return true if obj.valid?
add_errors_from(obj)
false
end
def rollback_with!(obj, error)
obj.errors[:base] << error
rollback_from_errors!(obj)
end
def rollback_from_errors!(obj)
add_errors_from(obj)
raise ActiveRecord::Rollback.new
end
def add_errors_from(obj)
obj.errors.full_messages.each do |msg|
errors[:base] << msg unless errors[:base].include?(msg)
end
end
end