Module: Breakpoint::CommandBundle

Defined in:
lib/breakpoint.rb

Defined Under Namespace

Classes: Client

Instance Method Summary collapse

Instance Method Details

#clientObject

Lets an object that will forward method calls to the breakpoint client. This is useful for outputting longer things at the client and so on. You can for example do these things:

client.puts "Hello" # outputs "Hello" at client console
# outputs "Hello" into the file temp.txt at the client
client.File.open("temp.txt", "w") { |f| f.puts "Hello" }


218
219
220
221
222
223
224
225
# File 'lib/breakpoint.rb', line 218

def client()
  if Breakpoint.use_drb? then
    sleep(0.5) until Breakpoint.drb_service.eval_handler
    Client.new(Breakpoint.drb_service.eval_handler)
  else
    Client.new(lambda { |code| eval(code, TOPLEVEL_BINDING) })
  end
end

#show_call_stack(depth = 10) ⇒ Object

Prints the call stack.



200
201
202
203
204
205
206
207
208
209
# File 'lib/breakpoint.rb', line 200

def show_call_stack(depth = 10)
  base = Pathname.new(RAILS_ROOT).cleanpath.to_s
  caller[1..depth].each do |line|
    line.sub!(/^[^:]*/) do |path|
      Pathname.new(path).cleanpath.to_s
    end
    client.puts(line.index(base) == 0 ? line[(base.length + 1)..-1] : line)
  end
  "#{Pathname.new(@__bp_file).cleanpath.to_s}:#{@__bp_line}"
end

#show_source_list(context = 5) ⇒ Object

Prints the source code surrounding the location where the breakpoint was issued.



189
190
191
192
193
194
195
196
197
# File 'lib/breakpoint.rb', line 189

def show_source_list(context = 5)
  start_line, break_line, result = source_lines(context, true)
  offset = [(break_line + context).to_s.length, 4].max
  result.each_with_index do |line, i|
    mark = (start_line + i == break_line ? '->' : '  ')
    client.puts("%0#{offset}d%s#{line}" % [start_line + i, mark])
  end
  Pathname.new(@__bp_file).cleanpath.to_s
end

#source_lines(context = 5, return_line_numbers = false) ⇒ Object

Returns the source code surrounding the location where the breakpoint was issued.



171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/breakpoint.rb', line 171

def source_lines(context = 5, return_line_numbers = false)
  lines = File.readlines(@__bp_file).map { |line| line.chomp }

  break_line = @__bp_line
  start_line = [break_line - context, 1].max
  end_line = break_line + context

  result = lines[(start_line - 1) .. (end_line - 1)]

  if return_line_numbers then
    return [start_line, break_line, result]
  else
    return result
  end
end