rjb 1.2.5 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,13 @@
1
+ Thu Jul 22 arton
2
+ *ext/rjb.c
3
+ RJB_VERSION -> 1.2.6
4
+ export jv2rv for rjbexception.c
5
+ *ext/rjb.h
6
+ export jv2rv for rjbexception.c
7
+ *ext/rjbexception.c
8
+ create and keep java exception object for its properties.
9
+ *test/test.rb
10
+ add Exception#cause test
1
11
  Wed Jun 9 arton
2
12
  *ext/load.c
3
13
  accept JAVA_HOME having an extra slash at the end
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 119 2010-06-04 12:51:34Z arton $
15
+ * $Id: load.c 124 2010-06-08 18:24:45Z arton $
16
16
  */
17
17
 
18
18
  #include <stdlib.h>
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 122 2010-06-05 03:08:29Z arton $
15
+ * $Id: rjb.c 126 2010-07-22 13:58:15Z arton $
16
16
  */
17
17
 
18
- #define RJB_VERSION "1.2.5"
18
+ #define RJB_VERSION "1.2.6"
19
19
 
20
20
  #include "ruby.h"
21
21
  #include "extconf.h"
@@ -303,7 +303,7 @@ static VALUE jv2rv_r(JNIEnv* jenv, jvalue val)
303
303
  return v;
304
304
  }
305
305
 
306
- static VALUE jv2rv(JNIEnv* jenv, jvalue val)
306
+ VALUE jv2rv(JNIEnv* jenv, jvalue val)
307
307
  {
308
308
  if (RTEST(primitive_conversion))
309
309
  {
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 120 2010-06-05 03:02:06Z arton $
15
+ * $Id: rjb.h 126 2010-07-22 13:58:15Z arton $
16
16
  * $Log: rjb.h,v $
17
17
  * Revision 1.1 2005/01/16 17:36:10 arton
18
18
  * Initial revision
@@ -73,6 +73,7 @@ extern jclass rjb_find_class(JNIEnv* jenv, VALUE name);
73
73
  extern void rjb_release_string(JNIEnv *jenv, jstring str, const char* chrs);
74
74
  extern VALUE rjb_load_vm_default();
75
75
  extern VALUE rjb_safe_funcall(VALUE args);
76
+ extern VALUE jv2rv(JNIEnv* jenv, jvalue val);
76
77
 
77
78
  /* in rjbexception.c */
78
79
  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 119 2010-06-04 12:51:34Z arton $
15
+ * $Id: rjbexception.c 126 2010-07-22 13:58:15Z arton $
16
16
  */
17
17
 
18
18
  #include "ruby.h"
@@ -26,6 +26,12 @@
26
26
  #include "riconv.h"
27
27
  #include "rjb.h"
28
28
 
29
+ static VALUE missing_delegate(int argc, VALUE* argv, VALUE self)
30
+ {
31
+ ID rmid = rb_to_id(argv[0]);
32
+ return rb_funcall(rb_ivar_get(self, rb_intern("@cause")), rmid, argc - 1, argv + 1);
33
+ }
34
+
29
35
  /*
30
36
  * handle Java exception
31
37
  * At this time, the Java exception is defined without the package name.
@@ -54,6 +60,7 @@ VALUE rjb_get_exception_class(JNIEnv* jenv, jstring str)
54
60
  if (rexp == Qnil)
55
61
  {
56
62
  rexp = rb_define_class(pcls, rb_eStandardError);
63
+ rb_define_method(rexp, "method_missing", missing_delegate, -1);
57
64
  #if defined(HAVE_RB_HASH_ASET) || defined(RUBINIUS)
58
65
  rb_hash_aset(rjb_loaded_classes, cname, rexp);
59
66
  #else
@@ -137,11 +144,16 @@ void rjb_check_exception(JNIEnv* jenv, int t)
137
144
  }
138
145
  if (rexp == Qnil)
139
146
  {
147
+ (*jenv)->DeleteLocalRef(jenv, exp);
140
148
  rb_raise(rb_eRuntimeError, "%s", msg);
141
149
  }
142
150
  else
143
151
  {
144
- rb_raise(rexp, "%s", msg);
152
+ VALUE rexpi = rb_funcall(rexp, rb_intern("new"), 1, rb_str_new2(msg));
153
+ jvalue val;
154
+ val.l = exp;
155
+ rb_ivar_set(rexpi, rb_intern("@cause"), jv2rv(jenv, val));
156
+ rb_exc_raise(rexpi);
145
157
  }
146
158
  }
147
159
  }
data/test/test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/local/env ruby -Ku
2
2
  # encoding: utf-8
3
- # $Id: test.rb 111 2010-05-12 12:34:28Z arton $
3
+ # $Id: test.rb 126 2010-07-22 13:58:15Z arton $
4
4
 
5
5
  begin
6
6
  require 'rjb'
@@ -286,6 +286,7 @@ class TestRjb < Test::Unit::TestCase
286
286
  @jInteger.parseInt('blabla')
287
287
  flunk('no exception')
288
288
  rescue NumberFormatException => e
289
+ assert_nil(e.cause)
289
290
  # OK
290
291
  end
291
292
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rjb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 2
9
- - 5
10
- version: 1.2.5
9
+ - 6
10
+ version: 1.2.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - arton
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-09 00:00:00 +09:00
18
+ date: 2010-07-22 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies: []
21
21