rjb 1.2.5 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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