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<Binding> 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;
    }

}