mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 07:03:44 +08:00
b58867b6e9
Includes support for flags, reviewable users and queued posts, with REST API backwards compatibility. Co-Authored-By: romanrizzi <romanalejandro@gmail.com> Co-Authored-By: jjaffeux <j.jaffeux@gmail.com>
42 lines
841 B
Ruby
42 lines
841 B
Ruby
# Helper functions for dealing with errors and objects that have
|
|
# child objects with errors
|
|
module HasErrors
|
|
attr_reader :errors
|
|
attr_accessor :forbidden, :not_found, :conflict
|
|
|
|
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.add(:base, error)
|
|
rollback_from_errors!(obj)
|
|
end
|
|
|
|
def rollback_from_errors!(obj)
|
|
add_errors_from(obj)
|
|
raise ActiveRecord::Rollback.new
|
|
end
|
|
|
|
def add_error(msg)
|
|
errors[:base] << msg unless errors[:base].include?(msg)
|
|
end
|
|
|
|
def add_errors_from(obj)
|
|
return if obj.blank?
|
|
|
|
if obj.is_a?(StandardError)
|
|
return add_error(obj.message)
|
|
end
|
|
|
|
obj.errors.full_messages.each { |msg| add_error(msg) }
|
|
end
|
|
|
|
end
|