module Pry::Byebug::Breakpoints

Wrapper for Byebug.breakpoints that respects our Processor and has better failure behavior. Acts as an Enumerable.

Public Instance Methods

add_file(file, line, expression = nil) click to toggle source

Adds a file breakpoint.

# File lib/pry/byebug/breakpoints.rb, line 61
def add_file(file, line, expression = nil)
  real_file = (file != Pry.eval_path)
  raise(ArgumentError, "Invalid file!") if real_file && !File.exist?(file)
  validate_expression expression

  path = (real_file ? File.expand_path(file) : file)
  bp = FileBreakpoint.new ::Byebug::Breakpoint.add(path, line, expression)
  breakpoints << bp
  bp
end
add_method(method, expression = nil) click to toggle source

Adds a method breakpoint.

# File lib/pry/byebug/breakpoints.rb, line 49
def add_method(method, expression = nil)
  validate_expression expression
  owner, name = method.split(/[\.#]/)
  byebug_bp = ::Byebug::Breakpoint.add(owner, name.to_sym, expression)
  bp = MethodBreakpoint.new byebug_bp, method
  breakpoints << bp
  bp
end
breakpoints() click to toggle source
# File lib/pry/byebug/breakpoints.rb, line 42
def breakpoints
  @breakpoints ||= []
end
change(id, expression = nil) click to toggle source

Changes the conditional expression for a breakpoint.

# File lib/pry/byebug/breakpoints.rb, line 75
def change(id, expression = nil)
  validate_expression expression

  breakpoint = find_by_id(id)
  breakpoint.expr = expression
  breakpoint
end
delete(id) click to toggle source

Deletes an existing breakpoint with the given ID.

# File lib/pry/byebug/breakpoints.rb, line 86
def delete(id)
  deleted =
    ::Byebug.started? &&
    ::Byebug::Breakpoint.remove(id) &&
    breakpoints.delete(find_by_id(id))

  raise(ArgumentError, "No breakpoint ##{id}") unless deleted
end
delete_all() click to toggle source

Deletes all breakpoints.

# File lib/pry/byebug/breakpoints.rb, line 98
def delete_all
  @breakpoints = []
  ::Byebug.breakpoints.clear if ::Byebug.started?
end
disable(id) click to toggle source

Disables a breakpoint with the given ID.

# File lib/pry/byebug/breakpoints.rb, line 113
def disable(id)
  change_status id, false
end
disable_all() click to toggle source

Disables all breakpoints.

# File lib/pry/byebug/breakpoints.rb, line 120
def disable_all
  each do |breakpoint|
    breakpoint.enabled = false
  end
end
each(&block) click to toggle source
# File lib/pry/byebug/breakpoints.rb, line 134
def each(&block)
  to_a.each(&block)
end
enable(id) click to toggle source

Enables a disabled breakpoint with the given ID.

# File lib/pry/byebug/breakpoints.rb, line 106
def enable(id)
  change_status id, true
end
find_by_id(id) click to toggle source
# File lib/pry/byebug/breakpoints.rb, line 142
def find_by_id(id)
  breakpoint = find { |b| b.id == id }
  raise(ArgumentError, "No breakpoint ##{id}!") unless breakpoint
  breakpoint
end
last() click to toggle source
# File lib/pry/byebug/breakpoints.rb, line 138
def last
  to_a.last
end
size() click to toggle source
# File lib/pry/byebug/breakpoints.rb, line 130
def size
  to_a.size
end
to_a() click to toggle source
# File lib/pry/byebug/breakpoints.rb, line 126
def to_a
  breakpoints
end

Private Instance Methods

change_status(id, enabled = true) click to toggle source
# File lib/pry/byebug/breakpoints.rb, line 150
def change_status(id, enabled = true)
  breakpoint = find_by_id(id)
  breakpoint.enabled = enabled
  breakpoint
end
validate_expression(exp) click to toggle source
# File lib/pry/byebug/breakpoints.rb, line 156
def validate_expression(exp)
  valid = exp && (exp.empty? || !Pry::Code.complete_expression?(exp))
  return unless valid

  raise("Invalid breakpoint conditional: #{expression}")
end