Sha256: b572a6d233b2c5f12cf77e0d64ca25436ea7d4d5e5da3a6767edb0430bb24b52
Contents?: true
Size: 1.59 KB
Versions: 23
Compression:
Stored size: 1.59 KB
Contents
class Class class IOWriter < Java.java.io.Writer def initialize(io) @io = io end def write(cbuf, off, len) @io.write(cbuf.unpack("U*")[off..len].pack("U*")) end def flush @io.flush end def close @io.close end end # Causes a Java class to be instantiated instead of the Ruby class when # running on JRuby. This is used to test both pure Java and pure Ruby classes # from the same Ruby based test suite. The Java Class must have a package name # that corresponds with the Ruby class. def native_impl(lib) require "#{lib}.jar" class << self def new(*args) begin java_class.new(*javaify(args)) rescue ArgumentError => e e.message << "\n#{java_class.name}" raise e rescue NameError => e e.message << "\n args: #{args.inspect}" raise e end end def javaify(arg) if Array === arg arg.map{|a| javaify(a)} else case(arg) when Regexp java.util.regex.Pattern.compile(arg.source) when Symbol arg.to_s when IO, StringIO IOWriter.new(arg) else arg end end end def ===(object) super || object.java_kind_of?(java_class) end def java_class names = self.name.split('::') package = Java names[0..-2].each do |module_name| package = package.__send__(module_name.downcase) end package.__send__(names[-1]) end end end end
Version data entries
23 entries across 21 versions & 2 rubygems