discourse/lib/json_error.rb

39 lines
1.1 KiB
Ruby

module JsonError
def create_errors_json(obj, opts = nil)
opts ||= {}
errors = create_errors_array obj
errors[:error_type] = opts[:type] if opts[:type]
errors[:extras] = opts[:extras] if opts[:extras]
errors
end
private
def create_errors_array(obj)
# If we're passed a string, assume that is the error message
return { errors: [obj] } if obj.is_a?(String)
# If it's an AR exception target the record
obj = obj.record if obj.is_a?(ActiveRecord::RecordInvalid)
# If it looks like an activerecord object, extract its messages
return { errors: obj.errors.full_messages } if obj.respond_to?(:errors) && obj.errors.present?
# If we're passed an array, it's an array of error messages
return { errors: obj.map(&:to_s) } if obj.is_a?(Array) && obj.present?
# Log a warning (unless obj is nil)
Rails.logger.warn("create_errors_json called with unrecognized type: #{obj.inspect}") if obj
# default to a generic error
JsonError.generic_error
end
def self.generic_error
{ errors: [I18n.t('js.generic_error')] }
end
end