Class: Class
- Inherits:
-
Object
- Object
- Class
- Defined in:
- lib/gherkin/native/java.rb,
lib/gherkin/native/null.rb,
lib/gherkin/native/therubyracer.rb
Defined Under Namespace
Instance Method Summary collapse
-
#native_impl(lib) ⇒ Object
Causes a Java class to be instantiated instead of the Ruby class when running on JRuby.
Instance Method Details
#native_impl(lib) ⇒ Object
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.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/gherkin/native/java.rb', line 24 def native_impl(lib) require "#{lib}.jar" class << self def new(*args) begin java_class.new(*javaify(args)) rescue ArgumentError => e e. << "\n#{java_class.name}" raise e rescue NameError => e e. << "\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 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 |