src/org/jruby/ext/win32ole/RubyWIN32OLE.java in jruby-win32ole-0.8.2 vs src/org/jruby/ext/win32ole/RubyWIN32OLE.java in jruby-win32ole-0.8.3

- old
+ new

@@ -3,11 +3,10 @@ import org.racob.com.Dispatch; import org.racob.com.EnumVariant; import org.racob.com.Variant; import java.util.Calendar; import java.util.Date; -import java.util.List; import org.jruby.Ruby; import org.jruby.RubyArray; import org.jruby.RubyClass; import org.jruby.RubyInteger; import org.jruby.RubyObject; @@ -71,27 +70,25 @@ } @JRubyMethod(required = 3) public IRubyObject _getproperty(ThreadContext context, IRubyObject dispid, IRubyObject args, IRubyObject argTypes) { - RubyArray argsArray = args.convertToArray(); - Object[] objectArgs = makeObjectArgs(argsArray); - int dispatchId = (int) RubyInteger.num2long(dispid); + Object[] objectArgs = makeObjectArgs(args.convertToArray()); + int id = (int) RubyInteger.num2long(dispid); + Ruby runtime = context.getRuntime(); - if (objectArgs.length == 0) { - return fromObject(context.getRuntime(), Dispatch.callO(dispatch, dispatchId)); - } + if (objectArgs.length == 0) return fromObject(runtime, dispatch.callO(id)); - return fromVariant(context.getRuntime(), - Dispatch.call(dispatch, dispatchId, objectArgs)); + return fromVariant(runtime, dispatch.call(id, objectArgs)); } @JRubyMethod(required = 1, rest = true) public IRubyObject initialize(ThreadContext context, IRubyObject[] args) { String id = args[0].convertToString().asJavaString(); + String progId = toProgID(id); - dispatch = new Dispatch(toProgID(id)); + dispatch = new Dispatch(progId); return this; } @JRubyMethod(required = 1, rest = true) @@ -124,18 +121,19 @@ @JRubyMethod(name = "[]", required = 1) public IRubyObject op_aref(ThreadContext context, IRubyObject property) { String propertyName = property.asJavaString(); - return fromVariant(context.getRuntime(), Dispatch.get(dispatch, propertyName)); + return fromVariant(context.getRuntime(), dispatch.get(propertyName)); } @JRubyMethod(name = "[]=", required = 2) public IRubyObject op_aset(ThreadContext context, IRubyObject property, IRubyObject value) { String propertyName = property.asJavaString(); - Dispatch.put(dispatch, propertyName, toObject(value)); + dispatch.put(propertyName, toObject(value)); + return context.getRuntime().getNil(); } @JRubyMethod() public IRubyObject _setproperty(ThreadContext context, IRubyObject dispid, @@ -152,24 +150,23 @@ private IRubyObject invokeSet(ThreadContext context, String methodName, IRubyObject[] args) { Object[] objectArgs = makeObjectArgs(args, 1); int[] errorArgs = new int[objectArgs.length]; - Dispatch.invoke(dispatch, methodName, Dispatch.Put, objectArgs, errorArgs); + dispatch.invoke(methodName, Dispatch.Put, objectArgs, errorArgs); return context.getRuntime().getNil(); } private IRubyObject invokeInternal(ThreadContext context, IRubyObject dispid, IRubyObject args, IRubyObject argTypes, int dispatchType) { RubyArray argsArray = args.convertToArray(); int dispatchId = (int) RubyInteger.num2long(dispid); Object[] objectArgs = makeObjectArgs(argsArray); int[] errorArgs = makeErrorArgs(objectArgs.length); - Variant returnValue = Dispatch.invoke(dispatch, dispatchId, dispatchType, + Variant returnValue = dispatch.invoke(dispatchId, dispatchType, objectArgs, errorArgs); - System.out.println("INVOKEINTERNAL: " + returnValue); return fromVariant(context.getRuntime(), returnValue); } private int[] makeErrorArgs(int size) { return size <= 0 ? EMPTY_ERROR_ARGS : new int[size]; } @@ -199,14 +196,14 @@ return objectArgs; } private IRubyObject invokeMethodOrGet(ThreadContext context, String methodName, IRubyObject[] args) { if (args.length == 1) { // No-arg call - return fromObject(context.getRuntime(), Dispatch.callO(dispatch, methodName)); + return fromObject(context.getRuntime(), dispatch.callO(methodName)); } return fromVariant(context.getRuntime(), - Dispatch.callN(dispatch, methodName, makeObjectArgs(args, 1))); + dispatch.callN(methodName, makeObjectArgs(args, 1))); } @Override public Object toJava(Class klass) { return dispatch; @@ -298,11 +295,11 @@ return runtime.newTime(cal.getTimeInMillis()); } public static String toProgID(String id) { - if (id != null && id.startsWith("{{") && id.endsWith("}}")) { - return id.substring(2, id.length() - 2); + if (id != null && id.startsWith("{") && id.endsWith("}")) { + return "clsid:" + id.substring(1, id.length() - 1); } return id; } }