rjb 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +26 -0
- data/ext/load.c +10 -1
- data/ext/riconv.c +2 -3
- data/ext/rjb.c +42 -12
- data/ext/rjb.h +2 -1
- data/ext/rjbexception.c +8 -2
- data/test/jp/co/infoseek/hp/arton/rjb/Test.class +0 -0
- data/test/test.rb +52 -8
- metadata +47 -40
data/ChangeLog
CHANGED
@@ -1,3 +1,29 @@
|
|
1
|
+
Tue Mar 5 Kuwashima
|
2
|
+
*ext/rjb.c
|
3
|
+
*ext/rjb.h
|
4
|
+
*ext/rjbexception.c
|
5
|
+
add auto load method.
|
6
|
+
Tue Mar 4 Kuwashima
|
7
|
+
*ext/rjbexception.c
|
8
|
+
*ext/rjb.c
|
9
|
+
*test/test.rb
|
10
|
+
clear(ignore) exception in current java thread, before some operation.
|
11
|
+
*ext/rjbexception.c
|
12
|
+
*ext/rjb.c
|
13
|
+
add auto load for Rjb::bind, Rjb::throw
|
14
|
+
*ext/rjb.c
|
15
|
+
*test/test.rb
|
16
|
+
add Rjb::unbind
|
17
|
+
*test/test.rb
|
18
|
+
add loading rubygems
|
19
|
+
Sat Feb 23 arton
|
20
|
+
*test/test.rb
|
21
|
+
let test_field metod use Test.class instead of Point.class
|
22
|
+
*test/Test.java
|
23
|
+
add a public field for testing
|
24
|
+
Fri Feb 22 arton
|
25
|
+
*ext/rjb.c
|
26
|
+
mark version 1.1.3 for the next release.
|
1
27
|
Fri Feb 22 arton
|
2
28
|
*ext/rjb.c
|
3
29
|
fix field reference (bug# 18238)
|
data/ext/load.c
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
13
|
* Lesser General Public License for more details.
|
14
14
|
*
|
15
|
-
* $Id: load.c
|
15
|
+
* $Id: load.c 65 2008-03-26 13:19:29Z arton $
|
16
16
|
*/
|
17
17
|
|
18
18
|
#include <stdlib.h>
|
@@ -93,6 +93,10 @@ static int load_jvm(char* jvmtype)
|
|
93
93
|
#endif
|
94
94
|
if (!jh)
|
95
95
|
{
|
96
|
+
if (RTEST(ruby_verbose))
|
97
|
+
{
|
98
|
+
fprintf(stderr, "no JAVA_HOME environment\n");
|
99
|
+
}
|
96
100
|
return 0;
|
97
101
|
}
|
98
102
|
#if defined(_WIN32)
|
@@ -132,6 +136,7 @@ static int load_jvm(char* jvmtype)
|
|
132
136
|
|
133
137
|
jvmdll = rb_funcall(rb_const_get(rb_cObject, rb_intern("DL")), rb_intern("dlopen"), 1, rb_str_new2(libpath));
|
134
138
|
|
139
|
+
//get function pointers of JNI
|
135
140
|
#if RJB_RUBY_VERSION_CODE < 190
|
136
141
|
getdefaultjavavminitargsfunc = rb_funcall(rb_funcall(rb_funcall(jvmdll, rb_intern("[]"), 2, rb_str_new2("JNI_GetDefaultJavaVMInitArgs"), rb_str_new2("IP")), rb_intern("to_ptr"), 0), rb_intern("to_i"), 0);
|
137
142
|
createjavavmfunc = rb_funcall(rb_funcall(rb_funcall(jvmdll, rb_intern("[]"), 2, rb_str_new2("JNI_CreateJavaVM"), rb_str_new2("IPPP")), rb_intern("to_ptr"), 0), rb_intern("to_i"), 0);
|
@@ -281,6 +286,10 @@ int rjb_create_jvm(JNIEnv** pjenv, JavaVMInitArgs* vm_args, char* userpath, VALU
|
|
281
286
|
if (!result)
|
282
287
|
{
|
283
288
|
result = load_bridge(*pjenv);
|
289
|
+
if (RTEST(ruby_verbose) && result < 0)
|
290
|
+
{
|
291
|
+
fprintf(stderr, "failed to load the bridge class\n");
|
292
|
+
}
|
284
293
|
}
|
285
294
|
return result;
|
286
295
|
}
|
data/ext/riconv.c
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
13
|
* Lesser General Public License for more details.
|
14
14
|
*
|
15
|
-
* $Id: riconv.c
|
15
|
+
* $Id: riconv.c 65 2008-03-26 13:19:29Z arton $
|
16
16
|
*/
|
17
17
|
|
18
18
|
#include "ruby.h"
|
@@ -30,10 +30,10 @@ static const char* const NL_SJIS_TABLE[] = { "SHIFT_JIS", "SHIFT_JISX0213", "WIN
|
|
30
30
|
|
31
31
|
#if defined HAVE_SETLOCALE
|
32
32
|
#include <locale.h>
|
33
|
+
#endif
|
33
34
|
static const char* const LOCALE_EUC_TABLE[] = { "japanese", "ja_JP.eucJP", "japanese.euc", "ja_JP", "ja_JP.ujis" };
|
34
35
|
static const char* const LOCALE_SJIS_TABLE[] = { "japanese.sjis", "ja_JP.SJIS" };
|
35
36
|
static const char* const LOCALE_UTF8_TABLE[] = { "ja_JP.UTF-8", "ja_JP.utf8" };
|
36
|
-
#endif
|
37
37
|
|
38
38
|
#include "riconv.h"
|
39
39
|
|
@@ -108,7 +108,6 @@ static const char* get_charcode_name()
|
|
108
108
|
setlocale(LC_ALL, ""); //initialize
|
109
109
|
result = get_charcode_name_by_locale(setlocale(LC_ALL, NULL));
|
110
110
|
#elif defined HAVE_GETENV
|
111
|
-
printf("HAVE_GETENV\n");
|
112
111
|
if (result = get_charcode_name_by_locale(getenv("LC_ALL")))
|
113
112
|
;
|
114
113
|
else if (result = get_charcode_name_by_locale(getenv("LC_CTYPE")))
|
data/ext/rjb.c
CHANGED
@@ -12,10 +12,10 @@
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
13
|
* Lesser General Public License for more details.
|
14
14
|
*
|
15
|
-
* $Id: rjb.c
|
15
|
+
* $Id: rjb.c 64 2008-03-05 14:24:22Z kuwa1 $
|
16
16
|
*/
|
17
17
|
|
18
|
-
#define RJB_VERSION "1.1.
|
18
|
+
#define RJB_VERSION "1.1.3"
|
19
19
|
|
20
20
|
#include "ruby.h"
|
21
21
|
#include "extconf.h"
|
@@ -126,7 +126,6 @@ JNIEnv* rjb_attach_current_thread(void)
|
|
126
126
|
return env;
|
127
127
|
}
|
128
128
|
|
129
|
-
|
130
129
|
void rjb_release_string(JNIEnv *jenv, jstring str, const char* chrs)
|
131
130
|
{
|
132
131
|
(*jenv)->ReleaseStringUTFChars(jenv, str, chrs);
|
@@ -1745,6 +1744,14 @@ static VALUE rjb_s_load(int argc, VALUE* argv, VALUE self)
|
|
1745
1744
|
return Qnil;
|
1746
1745
|
}
|
1747
1746
|
|
1747
|
+
/*
|
1748
|
+
* load Java Virtual Machine with default arguments.
|
1749
|
+
*/
|
1750
|
+
VALUE rjb_load_vm_default()
|
1751
|
+
{
|
1752
|
+
return rjb_s_load(0, NULL, 0);
|
1753
|
+
}
|
1754
|
+
|
1748
1755
|
/*
|
1749
1756
|
* unload Java Virtual Machine
|
1750
1757
|
*
|
@@ -1762,6 +1769,8 @@ static VALUE rjb_s_unload(int argc, VALUE* argv, VALUE self)
|
|
1762
1769
|
st_foreach(RHASH_TBL(rjb_loaded_classes), clear_classes, 0);
|
1763
1770
|
if (rjb_jvm)
|
1764
1771
|
{
|
1772
|
+
JNIEnv* jenv = rjb_attach_current_thread();
|
1773
|
+
(*jenv)->ExceptionClear(jenv);
|
1765
1774
|
(*rjb_jvm)->DestroyJavaVM(rjb_jvm);
|
1766
1775
|
rjb_jvm = NULL;
|
1767
1776
|
}
|
@@ -2022,8 +2031,12 @@ static VALUE rjb_newinstance_s(int argc, VALUE* argv, VALUE self)
|
|
2022
2031
|
char* sig;
|
2023
2032
|
VALUE ret = Qnil;
|
2024
2033
|
struct jv_data* ptr;
|
2025
|
-
JNIEnv* jenv = rjb_attach_current_thread();
|
2026
2034
|
int found = 0;
|
2035
|
+
JNIEnv* jenv = NULL;
|
2036
|
+
|
2037
|
+
rjb_load_vm_default();
|
2038
|
+
jenv = rjb_attach_current_thread();
|
2039
|
+
(*jenv)->ExceptionClear(jenv);
|
2027
2040
|
|
2028
2041
|
rb_scan_args(argc, argv, "1*", &vsig, &rest);
|
2029
2042
|
sig = StringValueCStr(vsig);
|
@@ -2053,8 +2066,12 @@ static VALUE rjb_newinstance(int argc, VALUE* argv, VALUE self)
|
|
2053
2066
|
VALUE ret = Qnil;
|
2054
2067
|
struct jv_data* ptr;
|
2055
2068
|
struct cls_constructor** pc;
|
2056
|
-
JNIEnv* jenv = rjb_attach_current_thread();
|
2057
2069
|
int found = 0;
|
2070
|
+
JNIEnv* jenv = NULL;
|
2071
|
+
|
2072
|
+
rjb_load_vm_default();
|
2073
|
+
jenv = rjb_attach_current_thread();
|
2074
|
+
(*jenv)->ExceptionClear(jenv);
|
2058
2075
|
|
2059
2076
|
Data_Get_Struct(self, struct jv_data, ptr);
|
2060
2077
|
|
@@ -2111,8 +2128,11 @@ jclass rjb_find_class(JNIEnv* jenv, VALUE name)
|
|
2111
2128
|
static VALUE rjb_s_bind(VALUE self, VALUE rbobj, VALUE itfname)
|
2112
2129
|
{
|
2113
2130
|
VALUE result = Qnil;
|
2114
|
-
JNIEnv* jenv =
|
2115
|
-
|
2131
|
+
JNIEnv* jenv = NULL;
|
2132
|
+
|
2133
|
+
rjb_load_vm_default();
|
2134
|
+
jenv = rjb_attach_current_thread();
|
2135
|
+
(*jenv)->ExceptionClear(jenv);
|
2116
2136
|
jclass itf = rjb_find_class(jenv, itfname);
|
2117
2137
|
rjb_check_exception(jenv, 1);
|
2118
2138
|
if (itf)
|
@@ -2137,6 +2157,18 @@ static VALUE rjb_s_bind(VALUE self, VALUE rbobj, VALUE itfname)
|
|
2137
2157
|
return result;
|
2138
2158
|
}
|
2139
2159
|
|
2160
|
+
/*
|
2161
|
+
* jclass Rjb::bind(rbobj, interface_name)
|
2162
|
+
*/
|
2163
|
+
static VALUE rjb_s_unbind(VALUE self, VALUE rbobj)
|
2164
|
+
{
|
2165
|
+
JNIEnv* jenv;
|
2166
|
+
rjb_load_vm_default();
|
2167
|
+
jenv = rjb_attach_current_thread();
|
2168
|
+
(*jenv)->ExceptionClear(jenv);
|
2169
|
+
return rb_ary_delete(proxies, rbobj);
|
2170
|
+
}
|
2171
|
+
|
2140
2172
|
/*
|
2141
2173
|
* Jclass Rjb::import(classname)
|
2142
2174
|
*/
|
@@ -2150,12 +2182,9 @@ static VALUE rjb_s_import(VALUE self, VALUE clsname)
|
|
2150
2182
|
return v;
|
2151
2183
|
}
|
2152
2184
|
|
2153
|
-
|
2154
|
-
{
|
2155
|
-
/* auto-load with default setting */
|
2156
|
-
rjb_s_load(0, NULL, 0);
|
2157
|
-
}
|
2185
|
+
rjb_load_vm_default();
|
2158
2186
|
jenv = rjb_attach_current_thread();
|
2187
|
+
(*jenv)->ExceptionClear(jenv);
|
2159
2188
|
jcls = rjb_find_class(jenv, clsname);
|
2160
2189
|
if (!jcls)
|
2161
2190
|
{
|
@@ -2725,6 +2754,7 @@ void Init_rjbcore()
|
|
2725
2754
|
rb_define_module_function(rjb, "unload", rjb_s_unload, -1);
|
2726
2755
|
rb_define_module_function(rjb, "import", rjb_s_import, 1);
|
2727
2756
|
rb_define_module_function(rjb, "bind", rjb_s_bind, 2);
|
2757
|
+
rb_define_module_function(rjb, "unbind", rjb_s_unbind, 1);
|
2728
2758
|
rb_define_module_function(rjb, "classes", rjb_s_classes, 0);
|
2729
2759
|
rb_define_module_function(rjb, "throw", rjb_s_throw, -1);
|
2730
2760
|
rb_define_module_function(rjb, "primitive_conversion=", rjb_s_set_pconversion, 1);
|
data/ext/rjb.h
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
13
|
* Lesser General Public License for more details.
|
14
14
|
*
|
15
|
-
* $Id: rjb.h
|
15
|
+
* $Id: rjb.h 64 2008-03-05 14:24:22Z kuwa1 $
|
16
16
|
* $Log: rjb.h,v $
|
17
17
|
* Revision 1.1 2005/01/16 17:36:10 arton
|
18
18
|
* Initial revision
|
@@ -68,6 +68,7 @@ extern jmethodID rjb_throwable_getMessage;
|
|
68
68
|
extern JNIEnv* rjb_attach_current_thread(void);
|
69
69
|
extern jclass rjb_find_class(JNIEnv* jenv, VALUE name);
|
70
70
|
extern void rjb_release_string(JNIEnv *jenv, jstring str, const char* chrs);
|
71
|
+
extern VALUE rjb_load_vm_default();
|
71
72
|
|
72
73
|
/* in rjbexception.c */
|
73
74
|
extern VALUE rjb_get_exception_class(JNIEnv* jenv, jstring str);
|
data/ext/rjbexception.c
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
13
|
* Lesser General Public License for more details.
|
14
14
|
*
|
15
|
-
* $Id: rjbexception.c
|
15
|
+
* $Id: rjbexception.c 64 2008-03-05 14:24:22Z kuwa1 $
|
16
16
|
*/
|
17
17
|
|
18
18
|
#include "ruby.h"
|
@@ -66,7 +66,13 @@ VALUE rjb_s_throw(int argc, VALUE* argv, VALUE self)
|
|
66
66
|
{
|
67
67
|
VALUE klass;
|
68
68
|
VALUE message;
|
69
|
-
JNIEnv* jenv =
|
69
|
+
JNIEnv* jenv = NULL;
|
70
|
+
|
71
|
+
rjb_load_vm_default();
|
72
|
+
|
73
|
+
jenv = rjb_attach_current_thread();
|
74
|
+
(*jenv)->ExceptionClear(jenv);
|
75
|
+
|
70
76
|
if (rb_scan_args(argc, argv, "11", &klass, &message) == 2)
|
71
77
|
{
|
72
78
|
jclass excep = rjb_find_class(jenv, klass);
|
Binary file
|
data/test/test.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
#!/usr/local/env ruby
|
2
|
-
# $Id: test.rb
|
2
|
+
# $Id: test.rb 63 2008-03-04 15:34:24Z kuwa1 $
|
3
3
|
|
4
|
+
begin
|
5
|
+
require 'rjb'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rjb'
|
9
|
+
end
|
4
10
|
require 'test/unit'
|
5
|
-
require 'rjb'
|
6
11
|
|
7
12
|
puts "start RJB(#{Rjb::VERSION}) test"
|
8
13
|
class TestRjb < Test::Unit::TestCase
|
@@ -226,6 +231,12 @@ class TestRjb < Test::Unit::TestCase
|
|
226
231
|
assert("43210", a.concat(it))
|
227
232
|
end
|
228
233
|
|
234
|
+
def test_unbind()
|
235
|
+
it = TestIter.new
|
236
|
+
it = bind(it, 'java.util.Iterator')
|
237
|
+
assert(it, unbind(it))
|
238
|
+
end
|
239
|
+
|
229
240
|
class TestComparator
|
230
241
|
def compare(o1, o2)
|
231
242
|
o1.to_i - o2.to_i
|
@@ -330,13 +341,46 @@ class TestRjb < Test::Unit::TestCase
|
|
330
341
|
end
|
331
342
|
end
|
332
343
|
|
344
|
+
def test_throw_clear()
|
345
|
+
assert_nothing_raised {
|
346
|
+
begin
|
347
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
348
|
+
rescue #drop ruby exception
|
349
|
+
end
|
350
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test')
|
351
|
+
begin
|
352
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
353
|
+
rescue #drop ruby exception
|
354
|
+
end
|
355
|
+
test.new
|
356
|
+
begin
|
357
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
358
|
+
rescue #drop ruby exception
|
359
|
+
end
|
360
|
+
@jString.new_with_sig('Ljava.lang.String;', "abcde")
|
361
|
+
begin
|
362
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
363
|
+
rescue #drop ruby exception
|
364
|
+
end
|
365
|
+
it = TestIterator.new(0)
|
366
|
+
it = bind(it, 'java.util.Iterator')
|
367
|
+
begin
|
368
|
+
Rjb::throw('java.util.NoSuchElementException', 'test exception')
|
369
|
+
rescue NoSuchElementException
|
370
|
+
end
|
371
|
+
begin
|
372
|
+
Rjb::throw('java.lang.IllegalAccessException', 'test exception')
|
373
|
+
rescue IllegalAccessException
|
374
|
+
end
|
375
|
+
unbind(it)
|
376
|
+
}
|
377
|
+
end
|
378
|
+
|
333
379
|
def test_field()
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
assert_equal(
|
338
|
-
pnt.x = 32
|
339
|
-
assert_equal(32, pnt.x)
|
380
|
+
test = import('jp.co.infoseek.hp.arton.rjb.Test').new
|
381
|
+
assert_equal('Hello World !!', test.helloData)
|
382
|
+
test.helloData = 'Goodby World !'
|
383
|
+
assert_equal('Goodby World !', test.helloData)
|
340
384
|
end
|
341
385
|
|
342
386
|
def test_instancemethod_from_class()
|
metadata
CHANGED
@@ -1,71 +1,78 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.0
|
3
|
-
specification_version: 1
|
4
2
|
name: rjb
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.1.
|
7
|
-
date: 2008-02-22 00:00:00 +09:00
|
8
|
-
summary: Ruby Java bridge
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: artonx@gmail.com
|
12
|
-
homepage: http://rjb.rubyforge.org/
|
13
|
-
rubyforge_project:
|
14
|
-
description: RJB is a bridge program that connect between Ruby and Java with Java Native Interface.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: false
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 1.8.2
|
24
|
-
version:
|
4
|
+
version: 1.1.3
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- arton
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-03-26 00:00:00 +09:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: RJB is a bridge program that connect between Ruby and Java with Java Native Interface.
|
17
|
+
email: artonx@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions:
|
21
|
+
- ext/extconf.rb
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
31
24
|
files:
|
32
25
|
- ext/RBridge.java
|
33
26
|
- ext/load.c
|
34
|
-
- ext/rjbexception.c
|
35
27
|
- ext/riconv.c
|
36
28
|
- ext/rjb.c
|
29
|
+
- ext/rjbexception.c
|
30
|
+
- ext/extconf.h
|
37
31
|
- ext/jniwrap.h
|
38
|
-
- ext/rjb.h
|
39
|
-
- ext/riconv.h
|
40
32
|
- ext/jp_co_infoseek_hp_arton_rjb_RBridge.h
|
41
|
-
- ext/
|
33
|
+
- ext/riconv.h
|
34
|
+
- ext/rjb.h
|
42
35
|
- ext/depend
|
43
36
|
- data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class
|
44
37
|
- lib/rjb.rb
|
45
38
|
- samples/filechooser.rb
|
46
39
|
- test/gctest.rb
|
47
40
|
- test/test.rb
|
41
|
+
- test/jp/co/infoseek/hp/arton/rjb/Base.class
|
48
42
|
- test/jp/co/infoseek/hp/arton/rjb/ExtBase.class
|
49
|
-
- test/jp/co/infoseek/hp/arton/rjb/Test.class
|
50
43
|
- test/jp/co/infoseek/hp/arton/rjb/IBase.class
|
51
|
-
- test/jp/co/infoseek/hp/arton/rjb/Base.class
|
52
44
|
- test/jp/co/infoseek/hp/arton/rjb/Test$TestTypes.class
|
45
|
+
- test/jp/co/infoseek/hp/arton/rjb/Test.class
|
53
46
|
- COPYING
|
54
47
|
- ChangeLog
|
55
48
|
- readme.sj
|
56
49
|
- readme.txt
|
57
|
-
|
58
|
-
|
50
|
+
has_rdoc: false
|
51
|
+
homepage: http://rjb.rubyforge.org/
|
52
|
+
post_install_message:
|
59
53
|
rdoc_options: []
|
60
54
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
-
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.8.2
|
62
|
+
version:
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
67
69
|
requirements:
|
68
70
|
- none
|
69
71
|
- JDK 5.0
|
70
|
-
|
71
|
-
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 1.0.1
|
74
|
+
signing_key:
|
75
|
+
specification_version: 2
|
76
|
+
summary: Ruby Java bridge
|
77
|
+
test_files:
|
78
|
+
- test/test.rb
|