aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2006-07-05 02:02:30 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2006-07-05 02:02:30 +0000
commit06411f4261cd0507be7b25883ed761ece9e8337f (patch)
treece0c586aa2b656b3e11950d1e94a4ef344f09cf5
parent750ca7998bc3d749f54a767065693cb94c2f6f47 (diff)
downloadrails-06411f4261cd0507be7b25883ed761ece9e8337f.tar.gz
rails-06411f4261cd0507be7b25883ed761ece9e8337f.tar.bz2
rails-06411f4261cd0507be7b25883ed761ece9e8337f.zip
Added show_source_list and show_call_stack to breakpoints to make it easier to get context (closes #5476) [takiuchi@drecom.co.jp]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4545 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--railties/CHANGELOG19
-rw-r--r--railties/lib/breakpoint.rb24
2 files changed, 43 insertions, 0 deletions
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index d4c2b3cc40..a2f0fbe8a2 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,24 @@
*SVN*
+* Added show_source_list and show_call_stack to breakpoints to make it easier to get context #5476 [takiuchi@drecom.co.jp]. Examples:
+
+ irb(#<TopController:0x40822a68>):002:0> show_source_list
+ 0001 class TopController < ApplicationController
+ 0002 def show
+ 0003-> breakpoint
+ 0004 end
+ 0005
+ 0006 def index
+ 0007 end
+ 0008
+ => "/path/to/rails/root/app/controllers/top_controller.rb"
+
+ irb(#<TopController:0x40822a68>):004:0> show_call_stack 3
+ vendor/rails/railties/lib/breakpoint.rb:536:in `breakpoint'
+ vendor/rails/railties/lib/breakpoint.rb:536:in `breakpoint'
+ app/controllers/top_controller.rb:3:in `show'
+ => "/path/to/rails/root/app/controllers/top_controller.rb:3"
+
* Generate scaffold layout in subdirectory appropriate to its module nesting. #5511 [nils@alumni.rice.edu]
* Mongrel: script/server tails the rails log like it does with lighttpd. Prefer mongrel over lighttpd. #5541 [mike@clarkware.com]
diff --git a/railties/lib/breakpoint.rb b/railties/lib/breakpoint.rb
index 327e43e8e3..60f7fdbbef 100644
--- a/railties/lib/breakpoint.rb
+++ b/railties/lib/breakpoint.rb
@@ -178,6 +178,30 @@ module Breakpoint
end
end
+ # Prints the source code surrounding the location where the
+ # breakpoint was issued.
+ 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
+
+ # Prints the call stack.
+ 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
+
# 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: