class Byebug::CatchCommand

Implements exception catching.

Enables the user to catch unhandled assertion when they happen.

Public Class Methods

description() click to toggle source
# File lib/byebug/commands/catch.rb, line 19
def self.description
  <<-EOD
    cat[ch][ (off|<exception>[ off])]

    #{short_description}

    catch                 -- lists catchpoints
    catch off             -- deletes all catchpoints
    catch <exception>     -- enables handling <exception>
    catch <exception> off -- disables handling <exception>
  EOD
end
regexp() click to toggle source
# File lib/byebug/commands/catch.rb, line 15
def self.regexp
  /^\s* cat(?:ch)? (?:\s+(\S+))? (?:\s+(off))? \s*$/x
end
short_description() click to toggle source
# File lib/byebug/commands/catch.rb, line 32
def self.short_description
  'Handles exception catchpoints'
end

Public Instance Methods

execute() click to toggle source
# File lib/byebug/commands/catch.rb, line 36
def execute
  return info unless @match[1]

  return @match[1] == 'off' ? clear : add(@match[1]) unless @match[2]

  return errmsg pr('catch.errors.off', off: cmd) unless @match[2] == 'off'

  remove(@match[1])
end

Private Instance Methods

add(exception) click to toggle source
# File lib/byebug/commands/catch.rb, line 57
def add(exception)
  if warning_eval(exception.is_a?(Class).to_s)
    errmsg pr('catch.errors.not_class', class: exception)
  end

  puts pr('catch.added', exception: exception)
  Byebug.add_catchpoint(exception)
end
clear() click to toggle source
# File lib/byebug/commands/catch.rb, line 66
def clear
  Byebug.catchpoints.clear if confirm(pr('catch.confirmations.delete_all'))
end
info() click to toggle source
# File lib/byebug/commands/catch.rb, line 70
def info
  if Byebug.catchpoints && !Byebug.catchpoints.empty?
    Byebug.catchpoints.each do |exception, _hits|
      puts("#{exception}: #{exception.is_a?(Class)}")
    end
  else
    puts 'No exceptions set to be caught.'
  end
end
remove(exception) click to toggle source
# File lib/byebug/commands/catch.rb, line 48
def remove(exception)
  unless Byebug.catchpoints.member?(exception)
    return errmsg pr('catch.errors.not_found', exception: exception)
  end

  puts pr('catch.removed', exception: exception)
  Byebug.catchpoints.delete(exception)
end