Variable Dump

I'd like to know how to grab a dump of all variable associated with a
script. Here is a test script I am using...

#!/usr/bin/env ruby

  class Binding
    def info_locals()
      vars = eval("local_variables", self)
      vars.each { |v| puts %(#{v} --> #{eval(v, self).inspect}) }
    end
  end

  def foo_def
    inside_foo_def = "hello there"
    binding.info_locals
  end

foo = 'hello'
bar = "goodbye"
array = [ 'one', 'two' ]

foo_def()

I get this output...

inside_foo_def --> "hello there"

That's the problem. I do not get all variables, just the variable in
the def foo_def scope. I'd like to be able to grab foo, bar, and
array also, much like this...

inside_foo_def --> "hello there"
foo --> "hello"
bar --> "bar"
array --> ['one', 'two']

Thanks in advance.

You would have to walk up the call stack to get locals of surrounding environments. Kernel.set_trace_func may help here.

Kind regards

    robert

···

Dan Smorey Jr. <dsmorey@gmail.com> wrote:

I'd like to know how to grab a dump of all variable associated with a
script. Here is a test script I am using...

#!/usr/bin/env ruby

  class Binding
    def info_locals()
      vars = eval("local_variables", self)
      vars.each { |v| puts %(#{v} --> #{eval(v, self).inspect}) }
    end
  end

  def foo_def
    inside_foo_def = "hello there"
    binding.info_locals
  end

foo = 'hello'
bar = "goodbye"
array = [ 'one', 'two' ]

foo_def()

I get this output...

inside_foo_def --> "hello there"

That's the problem. I do not get all variables, just the variable in
the def foo_def scope. I'd like to be able to grab foo, bar, and
array also, much like this...

inside_foo_def --> "hello there"
foo --> "hello"
bar --> "bar"
array --> ['one', 'two']

Thanks in advance.

this clumsy script gets you part of the way there.
maybe somebody else knows a recursive solution.

#!/usr/bin/env ruby

$top_level = binding

   class Binding
     def info_vars(b = self)
    vars = eval("local_variables", b)
           vars.each { |v| puts %(#{v} --> #{eval(v, b).inspect}) }
     end
   end

   def foo_def
     inside_foo_def = "hello there"

     binding.info_vars
     puts "\n# top level:"
     binding.info_vars $top_level
   end

foo = 'hello'
bar = "goodbye"
array = [ 'one', 'two' ]
foo_def()

Dan Smorey Jr. wrote:

···

I'd like to know how to grab a dump of all variable associated with a
script. Here is a test script I am using...

#!/usr/bin/env ruby

  class Binding
    def info_locals()
      vars = eval("local_variables", self)
      vars.each { |v| puts %(#{v} --> #{eval(v, self).inspect}) }
    end
  end

  def foo_def
    inside_foo_def = "hello there"
    binding.info_locals
  end

foo = 'hello'
bar = "goodbye"
array = [ 'one', 'two' ]

foo_def()

I get this output...

inside_foo_def --> "hello there"

That's the problem. I do not get all variables, just the variable in
the def foo_def scope. I'd like to be able to grab foo, bar, and
array also, much like this...

inside_foo_def --> "hello there"
foo --> "hello"
bar --> "bar"
array --> ['one', 'two']

Thanks in advance.