Module: Rhino::To
- Defined in:
- lib/rhino/wormhole.rb
Constant Summary collapse
Class Method Summary collapse
- .array(native) ⇒ Object
- .j2r(value) ⇒ Object
- .javascript(object) ⇒ Object
- .r2j(value, key = value.object_id) ⇒ Object
- .ruby(object) ⇒ Object
- .ruby_hash_to_native(ruby_object) ⇒ Object
Class Method Details
.array(native) ⇒ Object
34 35 36 |
# File 'lib/rhino/wormhole.rb', line 34 def array(native) native.length.times.map {|i| ruby(native.get(i,native))} end |
.j2r(value) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/rhino/wormhole.rb', line 49 def j2r(value) key = value.object_id if ref = @@j2r[key] if peer = ref.get() return peer else @@j2r.delete(key) return j2r(value) {|o| yield o} end else yield(value).tap do |peer| @@j2r[key] = java.lang.ref.WeakReference.new(peer) end end end |
.javascript(object) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/rhino/wormhole.rb', line 21 def javascript(object) case object when String,Numeric then object when TrueClass,FalseClass then object when Array then J::NativeArray.new(object.to_java) when Hash then ruby_hash_to_native(object) when Proc,Method then r2j(object, object.to_s) {|o| RubyFunction.new(o)} when NativeObject then object.j when J::Scriptable then object else r2j(object) {|o| RubyObject.new(o)} end end |
.r2j(value, key = value.object_id) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/rhino/wormhole.rb', line 66 def r2j(value, key = value.object_id) if ref = @@r2j[key] if peer = ref.get() return peer else @@r2j.delete(key) return r2j(value, key) {|o| yield o} end else yield(value).tap do |peer| @@r2j[key] = java.lang.ref.WeakReference.new(peer) end end end |
.ruby(object) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/rhino/wormhole.rb', line 8 def ruby(object) case object when *JS_UNDEF then nil when J::Wrapper then object.unwrap when J::NativeArray then array(object) when J::NativeDate then Time.at(object.getJSTimeValue() / 1000) when J::Regexp::NativeRegExp then object when J::Function then j2r(object) {|o| NativeFunction.new(o)} when J::Scriptable then j2r(object) {|o| NativeObject.new(o)} else object end end |
.ruby_hash_to_native(ruby_object) ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/rhino/wormhole.rb', line 38 def ruby_hash_to_native(ruby_object) native_object = NativeObject.new ruby_object.each_pair do |k, v| native_object[k] = v end native_object.j end |