class Byebug::CatchCommand - byebug-9.0.6 Documentation

# 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 'off' == @match[1] ? 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