Class: Object

Inherits:
BasicObject
Defined in:
lib/pry/core_extensions.rb

Instance Method Summary collapse

Instance Method Details

#__binding__Binding

Return a binding object for the receiver.

The self of the binding is set to the current object, and it contains no local variables.

The default definee (http://yugui.jp/articles/846) is set such that:

  • If self is a class or module, then new methods created in the binding will be defined in that class or module (as in class Foo; end).
  • If self is a normal object, then new methods created in the binding will be defined on its singleton class (as in class << self; end).
  • If self doesn't have a real singleton class (i.e. it is a Fixnum, Float, Symbol, nil, true, or false), then new methods will be created on the object's class (as in self.class.class_eval{ })

Newly created constants, including classes and modules, will also be added to the default definee.



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/pry/core_extensions.rb', line 68

def __binding__
  # If you ever feel like changing this method, be careful about variables
  # that you use. They shouldn't be inserted into the binding that will
  # eventually be returning.

  # When you're cd'd into a class, methods you define should be added to it.
  if is_a?(Module)
    # class_eval sets both self and the default definee to this class.
    return class_eval "binding"
  end

  unless respond_to?(:__pry__)
    # The easiest way to check whether an object has a working singleton class
    # is to try and define a method on it. (just checking for the presence of
    # the singleton class gives false positives for `true` and `false`).
    # __pry__ is just the closest method we have to hand, and using
    # it has the nice property that we can memoize this check.
    begin
      # instance_eval sets the default definee to the object's singleton class
      instance_eval(*Pry::BINDING_METHOD_IMPL)

    # 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, Pry::FrozenObjectException
      # class_eval sets the default definee to self.class
      self.class.class_eval(*Pry::BINDING_METHOD_IMPL)
    end
  end

  __pry__
end

#pry(object = nil, hash = {}) ⇒ Object

Start a Pry REPL on self.

If self is a Binding then that will be used to evaluate expressions; otherwise a new binding will be created.

Examples:

With a binding

binding.pry

On any object

"dummy".pry

With options

def my_method
  binding.pry :quiet => true
end
my_method()

See Also:



41
42
43
44
45
46
47
# File 'lib/pry/core_extensions.rb', line 41

def pry(object=nil, hash={})
  if object.nil? || Hash === object
    Pry.start(self, object || {})
  else
    Pry.start(object, hash)
  end
end