Low commit activity in last 3 years
No release in over a year
a wrapper of binding_of_caller, for easy use
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.0
~> 5.0
~> 10.0

Runtime

>= 0.10.0
 Project Readme

BindingOfCallers

Something like binding_of_caller, but collect all binding of callers at once, and provide convenient methods to inject variable or code in bindings

Installation

Add this line to your application's Gemfile:

gem 'binding_of_callers'

And then execute:

$ bundle

Or install it yourself as:

$ gem install binding_of_callers

Usage

binding.of_callers # => an array of wrapped binding of callers
binding.of_callers! # => an array of extended binding of callers

binding.partial_callers(4) # => get closest four frames
binding.partial_callers(-2) # => get frames excluding the bottom two

Inspect and modify a binding

require 'binding_of_callers'

class Test
  def a
    var, @ivar, arr = 1, 2, []
    b
    p var, @ivar
    p arr
  end

  def b
    c
  end

  def c
    a_bind = binding.of_callers![2]
    p a_bind
    p a_bind.iv, a_bind.lv

    a_bind.lv :var, 'hello'
    a_bind.iv :@ivar, 'world'
    a_bind.lv(:arr) << 'bye' << 'world'
  end
end

Test.new.a

# OUTPUT
#  #<Binding:78145200 Test#a test.rb:6>
#  {:@ivar=>2}
#  {:var=>1, :arr=>[]}
#  "hello"
#  "world"
#  ["bye", "world"]

Work with pry, get binding of callers from _bs_ or _bsi_(with index)

require 'binding_of_callers/pry'

class Test
  def a
    var, @ivar, arr = 1, 2, []
    b
    p var, @ivar
    p arr
  end

  def b
    c
  end

  def c
    binding.pry
  end
end

Test.new.a

# IN PRY
#  From: /tmp/test_pry.rb @ line 16 Test#c:
#
#      15: def c
#   => 16:   binding.pry
#      17: end
#
#  [1] pry(#<Test>)> _bs_
#  [#<Binding:76752040 Test#c test_pry.rb:16>,
#   #<Binding:76751000 Test#b test_pry.rb:12>,
#   #<Binding:76734010 Test#a test_pry.rb:6>,
#   #<Binding:76732930 Object#<main> test_pry.rb:20>]