Allow frozen_object.pry

This commit is contained in:
Conrad Irwin 2013-04-25 01:09:06 -07:00
parent b888d557e9
commit ab4cc3d826
3 changed files with 15 additions and 1 deletions

View File

@ -182,6 +182,15 @@ class Pry
end
end
# When we try to get a binding for an object, we try to define a method on
# that Object's singleton class. This doesn't work for "frozen" Object's, and
# the exception is just a vanilla RuntimeError.
module FrozenObjectException
def self.===(exception)
exception.message == (Pry::Helpers::BaseHelpers.jruby? ? "can't modify frozen class/module" : "can't modify frozen Class")
end
end
# Don't catch these exceptions
DEFAULT_EXCEPTION_WHITELIST = [SystemExit, SignalException, Pry::TooSafeException]

View File

@ -89,7 +89,7 @@ class Object
# If we can't define methods on the Object's singleton_class. Then we fall
# back to setting the default definee to be the Object's class. That seems
# nicer than having a REPL in which you can't define methods.
rescue TypeError
rescue TypeError, Pry::FrozenObjectException
# class_eval sets the default definee to self.class
self.class.class_eval(*Pry::BINDING_METHOD_IMPL)
end

View File

@ -64,6 +64,11 @@ describe Pry do
Pry.binding_for(obj).eval("local_variables").should.be.empty
end
end
it "should work on frozen objects" do
a = "hello".freeze
Pry.binding_for(a).eval("self").should.equal? a
end
end
describe "open a Pry session on an object" do