package com.gsamokovarov.bindex; import org.jruby.runtime.ThreadContext; import org.jruby.runtime.Binding; import org.jruby.runtime.DynamicScope; import org.jruby.runtime.builtin.IRubyObject; import org.jruby.RubyBinding; import org.jruby.RubyArray; import org.jruby.Ruby; import java.util.Iterator; public class RubyBindingsCollector { private final Ruby runtime; private Iterator iterator; public static RubyArray collectCurrentFor(ThreadContext context) { return new RubyBindingsCollector(context).collectCurrent(); } private RubyBindingsCollector(ThreadContext context) { this.iterator = new CurrentBindingsIterator(context); this.runtime = context.getRuntime(); } private RubyArray collectCurrent() { RubyArray bindings = RubyArray.newArray(runtime); while (iterator.hasNext()) { bindings.append(((IRubyObject) RubyBinding.newBinding(runtime, iterator.next()))); } return bindings; } }