Issue #8643 has been updated by ko1 (Koichi Sasada).

Assignee set to ko1 (Koichi Sasada)

What do you think about [Feature #8761]?

Usage:

  def get_empty_binding
    binding
  end
  ...
  b = get_empty_binding
  hash.each{|k, v|
    b.local_variable_set(k, v)
  }
  # use b

I think that Binding#local_variable_set() can be extended to accept one hash parameter (pairs of local variable name and value).

  b = get_empty_binding
  b.local_variable_set(hash)
  b.local_variable_set(a: 1, b: 2)


----------------------------------------
Feature #8643: Add Binding.from_hash
https://bugs.ruby-lang.org/issues/8643#change-41019

Author: rosenfeld (Rodrigo Rosenfeld Rosas)
Status: Open
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: 
Target version: 


Binding.from_hash would work like:

class Binding
  def self.from_hash(hash)
    OpenStruct.new(hash){ binding }
  end
end

It would simplify things like:

ERB.new(IO.read 'template.erb').result Binding.from_hash(template_local: 'example')

Or if you need to eval some code in another process (JRuby, for instance) and need to pass some arguments to the eval code in a hash form.

I didn't want to pollute Hash by adding Hash#to_binding. I believe Binding.from_hash is more appropriate.


-- 
http://bugs.ruby-lang.org/