Class: Class

Inherits:
Object
  • Object
show all
Defined in:
lib/gherkin/native/java.rb,
lib/gherkin/native/null.rb,
lib/gherkin/native/therubyracer.rb

Defined Under Namespace

Classes: IOWriter, Proxy

Instance Method Summary collapse

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.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