class Class

Public Class Methods

===(object) click to toggle source
Calls superclass method
# File lib/gherkin/native/java.rb, line 57
def ===(object)
  super || object.java_kind_of?(java_class)
end
java_class() click to toggle source
# File lib/gherkin/native/java.rb, line 61
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
javaify(arg) click to toggle source
# File lib/gherkin/native/java.rb, line 40
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
new(*args) click to toggle source
# File lib/gherkin/native/java.rb, line 28
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

Public Instance Methods

native_impl(lib) click to toggle source

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.

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