Search in sources :

Example 6 with ThreadContext

use of org.jruby.runtime.ThreadContext in project gocd by gocd.

the class NokogiriHandler method startElement.

/*
     * This has to call either "start_element" or
     * "start_element_namespace" depending on whether there are any
     * namespace attributes.
     *
     * Attributes that define namespaces are passed in a separate
     * array of of <code>[:prefix, :uri]</code> arrays and are not
     * passed with the other attributes.
     */
@Override
public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
    // for attributes other than namespace attrs
    RubyArray rubyAttr = RubyArray.newArray(ruby);
    // for namespace defining attributes
    RubyArray rubyNSAttr = RubyArray.newArray(ruby);
    ThreadContext context = ruby.getCurrentContext();
    // isFromFragmentHandler();
    boolean fromFragmentHandler = false;
    for (int i = 0; i < attrs.getLength(); i++) {
        String u = attrs.getURI(i);
        String qn = attrs.getQName(i);
        String ln = attrs.getLocalName(i);
        String val = attrs.getValue(i);
        String pre;
        pre = getPrefix(qn);
        if (ln == null || ln.equals(""))
            ln = getLocalPart(qn);
        if (isNamespace(qn) && !fromFragmentHandler) {
            // I haven't figured the reason out yet, but, in somewhere,
            // namespace is converted to array in array in array and cause
            // TypeError at line 45 in fragment_handler.rb
            RubyArray ns = RubyArray.newArray(ruby, 2);
            if (ln.equals("xmlns"))
                ln = null;
            ns.add(stringOrNil(ruby, ln));
            ns.add(ruby.newString(val));
            rubyNSAttr.add(ns);
        } else {
            IRubyObject[] args = null;
            if (needEmptyAttrCheck) {
                if (isEmptyAttr(ln)) {
                    args = new IRubyObject[3];
                    args[0] = stringOrNil(ruby, ln);
                    args[1] = stringOrNil(ruby, pre);
                    args[2] = stringOrNil(ruby, u);
                }
            }
            if (args == null) {
                args = new IRubyObject[4];
                args[0] = stringOrNil(ruby, ln);
                args[1] = stringOrNil(ruby, pre);
                args[2] = stringOrNil(ruby, u);
                args[3] = stringOrNil(ruby, val);
            }
            IRubyObject attr = RuntimeHelpers.invoke(context, attrClass, "new", args);
            rubyAttr.add(attr);
        }
    }
    if (localName == null || localName.equals(""))
        localName = getLocalPart(qName);
    call("start_element_namespace", stringOrNil(ruby, localName), rubyAttr, stringOrNil(ruby, getPrefix(qName)), stringOrNil(ruby, uri), rubyNSAttr);
}
Also used : RubyArray(org.jruby.RubyArray) ThreadContext(org.jruby.runtime.ThreadContext) IRubyObject(org.jruby.runtime.builtin.IRubyObject)

Example 7 with ThreadContext

use of org.jruby.runtime.ThreadContext in project nokogiri by sparklemotion.

the class NokogiriXPathFunction method evaluate.

public Object evaluate(List args) throws XPathFunctionException {
    if (args.size() != this.arity) {
        throw new XPathFunctionException("arity does not match");
    }
    final Ruby runtime = this.handler.getRuntime();
    ThreadContext context = runtime.getCurrentContext();
    IRubyObject result = RuntimeHelpers.invoke(context, this.handler, this.name, fromObjectToRubyArgs(runtime, args));
    return fromRubyToObject(runtime, result);
}
Also used : XPathFunctionException(javax.xml.xpath.XPathFunctionException) ThreadContext(org.jruby.runtime.ThreadContext) IRubyObject(org.jruby.runtime.builtin.IRubyObject) Ruby(org.jruby.Ruby)

Example 8 with ThreadContext

use of org.jruby.runtime.ThreadContext in project nokogiri by sparklemotion.

the class NokogiriHandler method call.

private void call(String methodName) {
    ThreadContext context = ruby.getCurrentContext();
    RuntimeHelpers.invoke(context, document(context), methodName);
}
Also used : ThreadContext(org.jruby.runtime.ThreadContext)

Example 9 with ThreadContext

use of org.jruby.runtime.ThreadContext in project gocd by gocd.

the class NokogiriHandler method call.

private void call(String methodName, IRubyObject arg1, IRubyObject arg2) {
    ThreadContext context = ruby.getCurrentContext();
    RuntimeHelpers.invoke(context, document(context), methodName, arg1, arg2);
}
Also used : ThreadContext(org.jruby.runtime.ThreadContext)

Example 10 with ThreadContext

use of org.jruby.runtime.ThreadContext in project nokogiri by sparklemotion.

the class NokogiriHandler method call.

private void call(String methodName, IRubyObject arg1, IRubyObject arg2) {
    ThreadContext context = ruby.getCurrentContext();
    RuntimeHelpers.invoke(context, document(context), methodName, arg1, arg2);
}
Also used : ThreadContext(org.jruby.runtime.ThreadContext)

Aggregations

ThreadContext (org.jruby.runtime.ThreadContext)10 IRubyObject (org.jruby.runtime.builtin.IRubyObject)6 Ruby (org.jruby.Ruby)3 XPathFunctionException (javax.xml.xpath.XPathFunctionException)2 RubyArray (org.jruby.RubyArray)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Method (java.lang.reflect.Method)1 RubyClass (org.jruby.RubyClass)1 RubyString (org.jruby.RubyString)1 ByteList (org.jruby.util.ByteList)1