Skip to content

Commit

Permalink
Fixed some breakpoint issues and made breakpoint_client depend on act…
Browse files Browse the repository at this point in the history
…iverecord/support instead of duplicating the files in railties rails#441 [Florian Gross]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@424 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information
dhh committed Jan 15, 2005
1 parent fb13b7a commit c46e390
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 691 deletions.
59 changes: 24 additions & 35 deletions activesupport/lib/breakpoint.rb
Expand Up @@ -21,6 +21,9 @@
require 'drb/acl'

module Breakpoint
id = %q$Id$
Version = id.split(" ")[2].to_i

extend self

# This will pop up an interactive ruby session at a
Expand Down Expand Up @@ -133,15 +136,24 @@ def eval(code)
end

# Will execute the specified statement at the client.
def method_missing(method, *args)
if args.empty?
result = eval("#{method}")
def method_missing(method, *args, &block)
if args.empty? and not block
result = eval "#{method}"
else
result = eval("#{method}(*Marshal.load(#{Marshal.dump(args).inspect}))")
end

unless [true, false, nil].include?(result)
result.extend(DRbUndumped) if result
# This is a bit ugly. The alternative would be using an
# eval context instead of an eval handler for executing
# the code at the client. The problem with that approach
# is that we would have to handle special expressions
# like "self", "nil" or constants ourself which is hard.
remote = eval %{
result = lambda { |block, *args| #{method}(*args, &block) }
def result.call_with_block(*args, &block)
call(block, *args)
end
result
}
remote.call_with_block(*args, &block)
end

return result
Expand Down Expand Up @@ -175,6 +187,7 @@ def source_lines(context = 5, return_line_numbers = false)
# client.File.open("temp.txt", "w") { |f| f.puts "Hello" }
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) })
Expand Down Expand Up @@ -279,7 +292,7 @@ def collision
@collision_handler.call
end

def ping; end
def ping() end

def add_breakpoint(context, message)
workspace = IRB::WorkSpace.new(context)
Expand All @@ -290,31 +303,7 @@ def add_breakpoint(context, message)
@handler.call(workspace, message)
end

def register_handler(&block)
@handler = block
end

def unregister_handler
@handler = nil
end

attr_reader :eval_handler

def register_eval_handler(&block)
@eval_handler = block
end

def unregister_eval_handler
@eval_handler = lambda { }
end

def register_collision_handler(&block)
@collision_handler = block
end

def unregister_collision_handler
@collision_handler = lambda { }
end
attr_accessor :handler, :eval_handler, :collision_handler
end

# Will run Breakpoint in DRb mode. This will spawn a server
Expand Down Expand Up @@ -507,8 +496,8 @@ def self.eval(code, context, *more)

module DRb # :nodoc:
class DRbObject#:nodoc:
undef :inspect
undef :clone
undef :inspect if method_defined?(:inspect)
undef :clone if method_defined?(:clone)
end
end

Expand Down
1 change: 1 addition & 0 deletions railties/bin/breakpointer
@@ -1,3 +1,4 @@
#!/usr/local/bin/ruby
$LOAD_PATH << File.dirname(__FILE__) + '/../vendor/railties/lib'
$LOAD_PATH << File.dirname(__FILE__) + '/../vendor/activerecord/lib/support'
require 'breakpoint_client'
81 changes: 0 additions & 81 deletions railties/lib/binding_of_caller.rb

This file was deleted.

0 comments on commit c46e390

Please sign in to comment.