therubyrhino 1.72.4-jruby → 1.72.5-jruby
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/History.txt +5 -0
- data/Manifest.txt +1 -0
- data/README.rdoc +27 -5
- data/lib/rhino.rb +2 -1
- data/lib/rhino/context.rb +11 -3
- data/lib/rhino/object.rb +8 -0
- data/lib/rhino/ruby_object.rb +9 -1
- data/lib/rhino/wormhole.rb +1 -1
- data/spec/rhino/context_spec.rb +36 -0
- data/spec/rhino/ruby_object_spec.rb +20 -2
- data/therubyrhino.gemspec +2 -2
- metadata +3 -2
data/History.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
=== 1.72.5 2009-11-12
|
2
|
+
* 2 major enhancements:
|
3
|
+
* evaluate javascript with a ruby object as it's scope using Context#open(:with => object)
|
4
|
+
* add eval_js() method to Object to evaluate in the context of that object
|
5
|
+
|
1
6
|
=== 1.72.4 2009-11-12
|
2
7
|
* 3 major enhancements:
|
3
8
|
* automatically wrap/unwrap ruby and javascript arrays
|
data/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
@@ -17,18 +17,40 @@ Embed the Mozilla Rhino Javascript interpreter into Ruby
|
|
17
17
|
1. Ruby Objects goes into Javascript
|
18
18
|
1. Our shark's in the Javascript!
|
19
19
|
|
20
|
+
require 'rhino'
|
21
|
+
|
20
22
|
# evaluate some simple javascript
|
21
|
-
|
22
|
-
|
23
|
-
context.eval("7 * 6") #=> 42
|
24
|
-
end
|
25
|
-
|
23
|
+
eval_js "7 * 6" #=> 42
|
24
|
+
|
26
25
|
# evaluate a ruby function from javascript
|
27
26
|
|
28
27
|
Rhino::Context.open do |context|
|
29
28
|
context["say"] = lambda {|word, times| word * times}
|
30
29
|
context.eval("say("Hello", 3)") #=> HelloHelloHello
|
31
30
|
end
|
31
|
+
|
32
|
+
# embed a ruby object into your javascript environment
|
33
|
+
|
34
|
+
class MyMath
|
35
|
+
def plus(lhs, rhs)
|
36
|
+
lhs + rhs
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
Rhino::Context.open do |context|
|
41
|
+
context["math"] = MyMath.new
|
42
|
+
context.eval("math.plus(20,22)") #=> 42
|
43
|
+
end
|
44
|
+
|
45
|
+
# make a ruby object *be* your javascript environment
|
46
|
+
math = MyMath.new
|
47
|
+
Rhino::Context.open(:with => math) do |context|
|
48
|
+
context.eval("plus(20,22)") #=> 42
|
49
|
+
end
|
50
|
+
|
51
|
+
#or the equivalent
|
52
|
+
|
53
|
+
math.eval_js("plus(20,22)")
|
32
54
|
|
33
55
|
# Configure your embedding setup
|
34
56
|
|
data/lib/rhino.rb
CHANGED
data/lib/rhino/context.rb
CHANGED
@@ -15,10 +15,16 @@ module Rhino
|
|
15
15
|
|
16
16
|
def initialize(native, options) #:nodoc:
|
17
17
|
@native = native
|
18
|
-
@
|
18
|
+
@global = NativeObject.new(@native.initStandardObjects(nil, options[:sealed] == true))
|
19
|
+
if with = options[:with]
|
20
|
+
@scope = To.javascript(with)
|
21
|
+
@scope.setParentScope(@global.j)
|
22
|
+
else
|
23
|
+
@scope = @global
|
24
|
+
end
|
19
25
|
unless options[:java]
|
20
26
|
for package in ["Packages", "java", "org", "com"]
|
21
|
-
@
|
27
|
+
@global.j.delete(package)
|
22
28
|
end
|
23
29
|
end
|
24
30
|
end
|
@@ -34,7 +40,9 @@ module Rhino
|
|
34
40
|
def eval(str)
|
35
41
|
str = str.to_s
|
36
42
|
begin
|
37
|
-
To.
|
43
|
+
scope = To.javascript(@scope)
|
44
|
+
result = @native.evaluateString(scope, str, "<eval>", 1, nil)
|
45
|
+
To.ruby result
|
38
46
|
rescue J::RhinoException => e
|
39
47
|
raise Rhino::RhinoError, e
|
40
48
|
end
|
data/lib/rhino/object.rb
ADDED
data/lib/rhino/ruby_object.rb
CHANGED
@@ -20,6 +20,10 @@ module Rhino
|
|
20
20
|
Prototype::Generic
|
21
21
|
end
|
22
22
|
|
23
|
+
def getIds()
|
24
|
+
@ruby.public_methods(false).map {|m| m.gsub(/(.)_(.)/) {"#{$1}#{$2.upcase}"}}.to_java
|
25
|
+
end
|
26
|
+
|
23
27
|
def to_s
|
24
28
|
"[Native #{@ruby.class.name}]"
|
25
29
|
end
|
@@ -31,6 +35,9 @@ module Rhino
|
|
31
35
|
|
32
36
|
def get(name, start)
|
33
37
|
robject = To.ruby(start)
|
38
|
+
if name == "toString"
|
39
|
+
return RubyFunction.new(lambda { "[Ruby #{robject.class.name}]"})
|
40
|
+
end
|
34
41
|
rb_name = name.gsub(/([a-z])([A-Z])/) {"#{$1}_#{$2.downcase}"}
|
35
42
|
if (robject.public_methods(false).include?(rb_name))
|
36
43
|
method = robject.method(rb_name)
|
@@ -44,8 +51,9 @@ module Rhino
|
|
44
51
|
rb_name = name.gsub(/([a-z])([A-Z])/) {"#{$1}_#{$2.downcase}"}
|
45
52
|
To.ruby(start).public_methods(false).respond_to?(rb_name) ? true : super(name,start)
|
46
53
|
end
|
54
|
+
|
55
|
+
Generic = new
|
47
56
|
|
48
|
-
Generic = new
|
49
57
|
end
|
50
58
|
end
|
51
59
|
end
|
data/lib/rhino/wormhole.rb
CHANGED
data/spec/rhino/context_spec.rb
CHANGED
@@ -71,6 +71,42 @@ describe Rhino::Context do
|
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
|
+
it "can eval javascript with a given ruby object as the scope." do
|
75
|
+
# pending
|
76
|
+
scope = Class.new.class_eval do
|
77
|
+
def plus(lhs, rhs)
|
78
|
+
lhs + rhs
|
79
|
+
end
|
80
|
+
|
81
|
+
def minus(lhs, rhs)
|
82
|
+
lhs - rhs
|
83
|
+
end
|
84
|
+
|
85
|
+
new
|
86
|
+
end
|
87
|
+
|
88
|
+
Context.open(:with => scope) do |cxt|
|
89
|
+
cxt.eval("plus(1,2)").should == 3
|
90
|
+
cxt.eval("minus(10, 20)").should == -10
|
91
|
+
cxt.eval("this").should be(scope)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
it "extends object to allow for the arbitrary execution of javascript with any object as the scope" do
|
96
|
+
Class.new.class_eval do
|
97
|
+
|
98
|
+
def initialize
|
99
|
+
@lhs = 5
|
100
|
+
end
|
101
|
+
|
102
|
+
def timesfive(rhs)
|
103
|
+
@lhs * rhs
|
104
|
+
end
|
105
|
+
|
106
|
+
new.eval_js("timesfive(6)").should == 30
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
74
110
|
it "can limit the number of instructions that are executed in the context" do
|
75
111
|
lambda {
|
76
112
|
Context.open do |cxt|
|
@@ -37,7 +37,23 @@ describe Rhino::RubyObject do
|
|
37
37
|
eval("o.to_s").should be_nil
|
38
38
|
end
|
39
39
|
|
40
|
-
it "translated camel case properties are enumerated by default, but perl case are not"
|
40
|
+
it "translated camel case properties are enumerated by default, but perl case are not" do
|
41
|
+
class_eval do
|
42
|
+
def foo_bar
|
43
|
+
end
|
44
|
+
|
45
|
+
def baz_bang
|
46
|
+
end
|
47
|
+
end
|
48
|
+
pending "why the hell isn't the return value of getIds() being respected?!?"
|
49
|
+
eval(<<-EOJS).should == ["fooBar,bazBang"]
|
50
|
+
var names = [];
|
51
|
+
for (var p in o) {
|
52
|
+
names.push(p);
|
53
|
+
}
|
54
|
+
names;
|
55
|
+
EOJS
|
56
|
+
end
|
41
57
|
|
42
58
|
it "will see a method that appears after the wrapper was first created" do
|
43
59
|
Rhino::Context.open do |cxt|
|
@@ -52,11 +68,13 @@ describe Rhino::RubyObject do
|
|
52
68
|
end
|
53
69
|
end
|
54
70
|
|
55
|
-
it "
|
71
|
+
it "treats ruby methods that have an arity of 0 as javascript properties by default"
|
56
72
|
|
73
|
+
it "will call ruby accesssor function when setting a property from javascript"
|
57
74
|
|
58
75
|
def eval(str)
|
59
76
|
Rhino::Context.open do |cxt|
|
77
|
+
cxt['puts'] = lambda {|o| puts o.inspect}
|
60
78
|
cxt['o'] = @instance
|
61
79
|
cxt.eval(str)
|
62
80
|
end
|
data/therubyrhino.gemspec
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{therubyrhino}
|
5
|
-
s.version = "1.72.
|
5
|
+
s.version = "1.72.5"
|
6
6
|
s.platform = %q{jruby}
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.authors = ["Charles Lowell"]
|
10
|
-
s.date = %q{2009-11-
|
10
|
+
s.date = %q{2009-11-13}
|
11
11
|
s.description = %q{Embed the Mozilla Rhino Javascript interpreter into Ruby}
|
12
12
|
s.email = ["cowboyd@thefrontside.net"]
|
13
13
|
s.extra_rdoc_files = ["History.txt", "Manifest.txt"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: therubyrhino
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.72.
|
4
|
+
version: 1.72.5
|
5
5
|
platform: jruby
|
6
6
|
authors:
|
7
7
|
- Charles Lowell
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-13 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- lib/rhino/java.rb
|
43
43
|
- lib/rhino/native_function.rb
|
44
44
|
- lib/rhino/native_object.rb
|
45
|
+
- lib/rhino/object.rb
|
45
46
|
- lib/rhino/rhino-1.7R2.jar
|
46
47
|
- lib/rhino/ruby_function.rb
|
47
48
|
- lib/rhino/ruby_object.rb
|