class Discordrb::Errors::CodeError

Generic class for errors denoted by API error codes

Attributes

code[R]

@return [Integer] The error code represented by this error class.

errors[R]

@return [Hash] More precise errors

message[R]

@return [String] This error’s represented message

Public Class Methods

new(message, errors = nil) click to toggle source

Create a new error with a particular message (the code should be defined by the class instance variable) @param message [String] the message to use @param errors [Hash] API errors

# File lib/discordrb/errors.rb, line 36
def initialize(message, errors = nil)
  @message = message

  @errors = errors ? flatten_errors(errors) : []
end

Public Instance Methods

code() click to toggle source

@return [Integer] The error code represented by this error.

# File lib/discordrb/errors.rb, line 43
def code
  self.class.code
end
full_message(*) click to toggle source

@return [String] A message including the message and flattened errors.

# File lib/discordrb/errors.rb, line 48
def full_message(*)
  error_list = @errors.collect { |err| "\t- #{err}" }

  "#{@message}\n#{error_list.join("\n")}"
end

Private Instance Methods

flatten_errors(err, prev_key = nil) click to toggle source

@!visibility hidden Flattens errors into a more easily read format. @example Flattening errors of a bad field

flatten_errors(data['errors'])
# => ["embed.fields[0].name: This field is required", "embed.fields[0].value: This field is required"]
# File lib/discordrb/errors.rb, line 67
def flatten_errors(err, prev_key = nil)
  err.collect do |key, sub_err|
    if prev_key
      key = /\A\d+\Z/.match?(key) ? "#{prev_key}[#{key}]" : "#{prev_key}.#{key}"
    end

    if (errs = sub_err['_errors'])
      "#{key}: #{errs.map { |e| e['message'] }.join(' ')}"
    elsif sub_err['message'] || sub_err['code']
      "#{sub_err['code'] ? "#{sub_err['code']}: " : nil}#{err_msg}"
    elsif sub_err.is_a? String
      sub_err
    else
      flatten_errors(sub_err, key)
    end
  end.flatten
end