therubyrhino 2.0.0 → 2.0.1

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.
@@ -1,6 +1,10 @@
1
1
  rvm:
2
2
  - jruby-18mode
3
3
  - jruby-19mode
4
+ - jruby-head
5
+ #env:
6
+ # - JRUBY_OPTS="--1.8"
7
+ # - JRUBY_OPTS="--1.9"
4
8
  branches:
5
9
  only:
6
10
  - master
data/Gemfile CHANGED
@@ -2,7 +2,17 @@ source :rubygems
2
2
 
3
3
  gemspec :name => "therubyrhino"
4
4
 
5
- # NOTE: some specs might be excluded @see #spec/spec_helper.rb
6
- gem 'redjs', :git => 'git://github.com/cowboyd/redjs.git', :group => :test,
7
- :ref => "b212e50ad347c0d32e53f28d0d627df6b8077e68"
8
- #gem 'redjs', :path => '../redjs', :group => :test
5
+ group :test do
6
+ # NOTE: some specs might be excluded @see #spec/spec_helper.rb
7
+ gem 'redjs', :git => 'git://github.com/cowboyd/redjs.git', :group => :test,
8
+ :ref => "0d844f066666f967a78b20beb164c52d9ac3f5ca"
9
+ #gem 'redjs', :path => '../redjs', :group => :test
10
+
11
+ # e.g. `export therubyrhino_jar=1.7.3`
12
+ if jar_version = ENV['therubyrhino_jar']
13
+ gem 'therubyrhino_jar', jar_version
14
+ else
15
+ gem 'therubyrhino_jar', :path => '.'
16
+ end
17
+ gem 'less', '>= 2.2.1', :require => nil
18
+ end
@@ -1,3 +1,14 @@
1
+ === 2.0.1 2012-08-24
2
+
3
+ * JSError improvement to preserve nested Ruby error message
4
+ * jar-1.7.4 regression fix e.g when loading less (#25)
5
+ * error.message should be a String value (1.9.3 compat)
6
+
7
+ === jar-1.7.4 2012-08-02
8
+
9
+ * updated to new Mozilla Rhino 1.7R4 release, notes:
10
+ https://developer.mozilla.org/en/New_in_Rhino_1.7R4
11
+
1
12
  === 2.0.0 2012-08-02
2
13
  This release is functionally the same as therubyrhino-1.73.5 as long
3
14
  as the therubyrhino_jar-1.7.3 gem dependency is used along with it.
@@ -184,11 +184,11 @@ Rhino is licensed under the MPL 1.1/GPL 2.0 license.
184
184
 
185
185
  == REQUIREMENTS:
186
186
 
187
- * JRuby >= 1.5.6
187
+ * JRuby >= 1.6
188
188
 
189
189
  == INSTALL:
190
190
 
191
- * jgem install therubyrhino
191
+ * jruby -S gem install therubyrhino
192
192
 
193
193
  == LICENSE:
194
194
 
@@ -16,6 +16,23 @@ module Rhino
16
16
  end
17
17
  end
18
18
 
19
+ @@implementation_version = nil
20
+ # Helper to resolve what version of Rhino's .jar we're really using.
21
+ def self.implementation_version
22
+ @@implementation_version ||= begin
23
+ urls = JS::Kit.java_class.to_java.getClassLoader.
24
+ getResources('META-INF/MANIFEST.MF').to_a
25
+ rhino_jar_urls = urls.select { |url| url.toString.index(JAR_PATH) }
26
+ if rhino_jar_urls.empty?
27
+ raise "could not find #{JAR_PATH} manifest among: #{urls.map(&:toString).join(', ')}"
28
+ elsif rhino_jar_urls.size > 1
29
+ raise "could not find #{JAR_PATH} manifest among: #{urls.map(&:toString).join(', ')}"
30
+ end
31
+ manifest = java.util.jar.Manifest.new rhino_jar_urls.first.openStream
32
+ manifest.getMainAttributes.getValue 'Implementation-Version'
33
+ end
34
+ end
35
+
19
36
  end
20
37
 
21
38
  require 'rhino/version'
@@ -4,37 +4,35 @@ module Rhino
4
4
 
5
5
  def initialize(native)
6
6
  @native = native # NativeException wrapping a Java Throwable
7
- message = value ? value : ( cause ? cause.details : @native )
8
- super(message)
7
+ if ( value = self.value(true) ) != nil
8
+ super value.is_a?(Exception) ? "#{value.class.name}: #{value.message}" : value
9
+ else
10
+ super cause ? cause.details : @native
11
+ end
9
12
  end
10
13
 
11
14
  def inspect
12
15
  "#<#{self.class.name}: #{message}>"
13
16
  end
14
17
 
15
- # most likely a Rhino::JS::JavaScriptException
18
+ # Returns the error message, in case of a native JavaScript value, will
19
+ # return that value converted to a String.
20
+ def message
21
+ super.to_s # since 1.9.x message is expected to allways be a string
22
+ end
23
+
24
+ # Returns the (nested) cause of this error if any, most likely a
25
+ # #Rhino::JS::JavaScriptException instance.
16
26
  def cause
17
27
  return @cause if defined?(@cause)
18
- @cause = begin
19
- if @native.respond_to?(:cause) && @native.cause
20
- @native.cause
21
- else
22
- @native.is_a?(JS::RhinoException) ? @native : nil
23
- end
24
- end
25
- end
26
-
27
- def value
28
- return @value if defined?(@value)
29
- if cause.respond_to?(:value) # e.g. JavaScriptException.getValue
30
- @value = cause.value
31
- elsif ( unwrap = self.unwrap ) && unwrap.respond_to?(:value)
32
- @value = unwrap.value
28
+ if @native.respond_to?(:cause) && @native.cause
29
+ @native.cause
33
30
  else
34
- @value = nil
31
+ @native.is_a?(JS::RhinoException) ? @native : nil
35
32
  end
36
33
  end
37
34
 
35
+ # Attempts to unwrap the (native) JavaScript/Java exception.
38
36
  def unwrap
39
37
  return @unwrap if defined?(@unwrap)
40
38
  cause = self.cause
@@ -50,6 +48,15 @@ module Rhino
50
48
  end
51
49
  end
52
50
 
51
+ # Return the thown (native) JavaScript value.
52
+ def value(unwrap = false)
53
+ return @value if defined?(@value) && ! unwrap
54
+ @value = get_value unless defined?(@value)
55
+ return @value.unwrap if unwrap && @value.respond_to?(:unwrap)
56
+ @value
57
+ end
58
+
59
+ # The backtrace is constructed using #javascript_backtrace + the Ruby part.
53
60
  def backtrace
54
61
  if js_backtrace = javascript_backtrace
55
62
  js_backtrace.push(*super)
@@ -58,6 +65,7 @@ module Rhino
58
65
  end
59
66
  end
60
67
 
68
+ # Returns the JavaScript back-trace part for this error (the script stack).
61
69
  def javascript_backtrace(keep_elements = false)
62
70
  if cause.is_a?(JS::RhinoException)
63
71
  cause.getScriptStack.map do |element| # ScriptStackElement[]
@@ -70,6 +78,18 @@ module Rhino
70
78
 
71
79
  Rhino::JS::RhinoException.useMozillaStackStyle(false)
72
80
 
81
+ private
82
+
83
+ def get_value
84
+ if ( cause = self.cause ) && cause.respond_to?(:value)
85
+ cause.value # e.g. JavaScriptException.getValue
86
+ elsif ( unwrap = self.unwrap ) && unwrap.respond_to?(:value)
87
+ unwrap.value
88
+ else
89
+ nil
90
+ end
91
+ end
92
+
73
93
  end
74
94
 
75
- end
95
+ end
@@ -1,3 +1,3 @@
1
1
  module Rhino
2
- VERSION = "2.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
@@ -1,13 +1,15 @@
1
1
 
2
2
  module Rhino
3
3
  module To
4
-
4
+
5
5
  def to_ruby(object)
6
6
  case object
7
7
  when JS::Scriptable::NOT_FOUND, JS::Undefined then nil
8
8
  when JS::Wrapper then object.unwrap
9
9
  when JS::NativeArray then array_to_ruby(object)
10
10
  when JS::NativeDate then Time.at(object.getJSTimeValue / 1000)
11
+ # Rhino 1.7R4 added ConsString for optimized String + operations :
12
+ when Java::JavaLang::CharSequence then object.toString
11
13
  else object
12
14
  end
13
15
  end
@@ -42,7 +42,7 @@ describe Rhino::JSError do
42
42
  e.should be_a(Rhino::JSError)
43
43
  e.value.should be_a(Rhino::JS::NativeObject)
44
44
  e.value['foo'].should == 'bar'
45
- e.value.should == e.message
45
+ e.message.should == e.value.to_s
46
46
  else
47
47
  fail "expected to rescue"
48
48
  end
@@ -54,7 +54,7 @@ describe Rhino::JSError do
54
54
  rescue => e
55
55
  e.should be_a(Rhino::JSError)
56
56
  e.value.should == 'mehehehe'
57
- e.value.should == e.message
57
+ e.message.should == e.value.to_s
58
58
  else
59
59
  fail "expected to rescue"
60
60
  end
@@ -128,6 +128,28 @@ describe Rhino::JSError do
128
128
  end
129
129
  end
130
130
 
131
+ it "wrapps false value correctly" do
132
+ begin
133
+ Rhino::Context.eval "throw false"
134
+ rescue => e
135
+ e.inspect.should == '#<Rhino::JSError: false>'
136
+ e.value.should be false
137
+ else
138
+ fail "expected to rescue"
139
+ end
140
+ end
141
+
142
+ it "wrapps null value correctly" do
143
+ begin
144
+ Rhino::Context.eval "throw null"
145
+ rescue => e
146
+ e.inspect.should == '#<Rhino::JSError: null>'
147
+ e.value.should be nil
148
+ else
149
+ fail "expected to rescue"
150
+ end
151
+ end
152
+
131
153
  it "raises correct error from function#apply" do
132
154
  begin
133
155
  context = Rhino::Context.new
@@ -140,5 +162,32 @@ describe Rhino::JSError do
140
162
  fail "expected to rescue"
141
163
  end
142
164
  end
165
+
166
+ it "prints info about nested (ruby) error" do
167
+ context = Rhino::Context.new
168
+ klass = Class.new do
169
+ def hello(arg = 42)
170
+ raise RuntimeError, 'hello' if arg != 42
171
+ end
172
+ end
173
+ context[:Hello] = klass.new
174
+ hi = context.eval "( function hi(arg) { Hello.hello(arg); } )"
175
+ begin
176
+ hi.call(24)
177
+ rescue => e
178
+ e.should be_a Rhino::JSError
179
+ e.value.should_not be nil
180
+ e.value.should be_a Rhino::Ruby::Object
181
+ e.value(true).should be_a RuntimeError # unwraps ruby object
182
+ # prints the original message (beyond [ruby RuntimeError]) :
183
+ e.message.should == "RuntimeError: hello"
184
+ else
185
+ fail "expected to rescue"
186
+ end
187
+ # V8::JSError: hello
188
+ # from (irb):4:in `hello'
189
+ # from at hi (<eval>:1:28)
190
+ # from (irb):9
191
+ end
143
192
 
144
193
  end
@@ -0,0 +1,11 @@
1
+ //console.log('bar.js 1');
2
+ var util = require('util');
3
+ //console.log('bar.js 2');
4
+ var Bar = {};
5
+ Bar.puts = function (message) {
6
+ util.puts(message);
7
+ return message;
8
+ };
9
+ //console.log('bar.js 3');
10
+ exports.Bar = Bar;
11
+ //console.log('bar.js 4');
@@ -0,0 +1,7 @@
1
+ //console.log('foo.js 1');
2
+ var Bar = require('./bar').Bar;
3
+ //console.log('foo.js 2 ' + Bar + " : " + Bar.puts);
4
+ Bar.puts('Hello Bar!');
5
+ //console.log('foo.js 3');
6
+ exports.foo = { 'Bar': Bar };
7
+ //console.log('foo.js 4');
@@ -0,0 +1,7 @@
1
+ console.log('./loop');
2
+ require('./loop');
3
+
4
+ ['element1', 'element2'].forEach(function (n) {
5
+ console.log('require(./loop/' + n + ')');
6
+ require('./loop/' + n);
7
+ });
@@ -0,0 +1,3 @@
1
+ Loop = {};
2
+ Loop.toString = function() { return 'Loop'; };
3
+ exports.Loop = Loop;
@@ -0,0 +1,3 @@
1
+ console.log('loop/element1 1');
2
+ require('../index');
3
+ console.log('loop/element1 2');
@@ -0,0 +1,8 @@
1
+ console.log('loop/element2 1');
2
+ (function (loop) {
3
+ console.log('loop/element2 2');
4
+ loop.fn2 = function (arg1, arg2) {
5
+ return arg1 + arg2;
6
+ };
7
+ })(require('../loop'));
8
+ console.log('loop/element2 3');
@@ -0,0 +1,146 @@
1
+ require 'bundler/setup'
2
+
3
+ require 'rhino'
4
+ require 'pathname'
5
+ require 'stringio'
6
+
7
+ puts "Rhino #{Rhino::VERSION} (#{Rhino::JAR_PATH})"
8
+
9
+ describe 'integration' do
10
+
11
+ it "loads LESS" do
12
+ require 'less'
13
+ end
14
+
15
+ it "require foo" do # CommonJS
16
+ environment = new_environment(:console => Console)
17
+ environment.native 'util', Util.new(out = StringIO.new)
18
+ exports = environment.require 'foo'
19
+ out.string.should == "Hello Bar!\n"
20
+
21
+ exports.should_not be nil
22
+ exports.foo.should respond_to(:'[]')
23
+ exports.foo['Bar'].should respond_to(:'[]')
24
+ exports.foo['Bar'][:puts].should be_a Rhino::JS::Function
25
+ end
26
+
27
+ it "require index/loop" do # CommonJS
28
+ environment = new_environment(:console => Console)
29
+ environment.require 'index'
30
+ environment.context['Loop'].should_not be nil
31
+ end
32
+
33
+ private
34
+
35
+ def new_environment(globals = {})
36
+ context = Rhino::Context.new
37
+ #context.optimization_level = -1
38
+ globals.each { |key, obj| context[key] = obj }
39
+ path = Pathname(__FILE__).dirname.join('integration')
40
+ Env.new(context, :path => path.to_s)
41
+ end
42
+
43
+ class Env # a CommonJS like environment (inspired by commonjs.rb)
44
+
45
+ attr_reader :context, :modules
46
+
47
+ def initialize(context, options = {})
48
+ @context = context
49
+ @paths = [ options[:path] ].flatten.map { |path| Pathname(path) }
50
+ @modules = {}
51
+ end
52
+
53
+ def require(module_id)
54
+ unless mod = modules[module_id]
55
+ filepath = find(module_id) or fail LoadError, "no such module '#{module_id}'"
56
+ js = "( function(module, require, exports) {\n#{File.read(filepath)}\n} )"
57
+ load = context.eval(js, filepath.expand_path.to_s)
58
+ modules[module_id] = mod = Module.new(module_id, self)
59
+ load.call(mod, mod.require_function, mod.exports)
60
+ end
61
+ return mod.exports
62
+ end
63
+
64
+ def native(module_id, impl)
65
+ modules[module_id] = Module::Native.new(impl)
66
+ end
67
+
68
+ def new_object
69
+ context['Object'].new
70
+ end
71
+
72
+ private
73
+
74
+ def find(module_id)
75
+ if loadpath = @paths.find { |path| path.join("#{module_id}.js").exist? }
76
+ loadpath.join("#{module_id}.js")
77
+ end
78
+ end
79
+
80
+ class Module
81
+
82
+ attr_reader :id, :exports
83
+
84
+ def initialize(id, env)
85
+ @id, @env = id, env
86
+ @exports = env.new_object
87
+ @segments = id.split('/')
88
+ end
89
+
90
+ def require_function
91
+ @require_function ||= lambda do |*args|
92
+ this, module_id = *args
93
+ module_id ||= this #backwards compatibility with TRR < 0.10
94
+ @env.require(expand(module_id))
95
+ end
96
+ end
97
+
98
+ private
99
+
100
+ def expand(module_id)
101
+ return module_id unless module_id =~ /(\.|\..)/
102
+ module_id.split('/').inject(@segments[0..-2]) do |path, element|
103
+ path.tap do
104
+ if element == '.'
105
+ #do nothing
106
+ elsif element == '..'
107
+ path.pop
108
+ else
109
+ path.push element
110
+ end
111
+ end
112
+ end.join('/')
113
+ end
114
+
115
+ class Native
116
+
117
+ def initialize(impl); @impl = impl; end
118
+ def exports; @impl; end
119
+
120
+ end
121
+
122
+ end
123
+
124
+ end
125
+
126
+ class Util
127
+
128
+ def initialize(io = STDOUT)
129
+ @io = io
130
+ end
131
+
132
+ def puts(*args)
133
+ args.each { |arg| @io.puts(arg) }
134
+ end
135
+
136
+ end
137
+
138
+ class Console
139
+
140
+ def self.log(*msgs)
141
+ puts msgs.join(', ')
142
+ end
143
+
144
+ end
145
+
146
+ end
@@ -1,5 +1,19 @@
1
1
  require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
2
 
3
+ module RhinoHelpers
4
+
5
+ module_function
6
+
7
+ def add_prototype_key(hash, recurse = false)
8
+ hash['prototype'] ||= {}
9
+ hash.keys.each do |key|
10
+ val = hash[key] unless key == 'prototype'
11
+ add_prototype_key(val, recurse) if val.is_a?(Hash)
12
+ end if recurse
13
+ end
14
+
15
+ end
16
+
3
17
  shared_examples_for 'ScriptableObject', :shared => true do
4
18
 
5
19
  it "acts like a hash" do
@@ -40,7 +54,7 @@ describe "NativeObject" do
40
54
  end
41
55
 
42
56
  describe "FunctionObject" do
43
-
57
+
44
58
  before do
45
59
  factory = Rhino::JS::ContextFactory.new
46
60
  context, scope = nil, nil
@@ -54,7 +68,9 @@ describe "FunctionObject" do
54
68
  @object = Rhino::JS::FunctionObject.new('to_string', to_string, scope)
55
69
  @object.instance_eval do
56
70
  def to_h_properties
57
- { "arguments"=> nil, "prototype"=> {}, "name"=> "to_string", "arity"=> 0, "length"=> 0 }
71
+ h = { "arguments"=> nil, "name"=> "to_string", "arity"=> 0, "length"=> 0 }
72
+ RhinoHelpers.add_prototype_key(h) if Rhino.implementation_version < '1.7R4'
73
+ h
58
74
  end
59
75
  end
60
76
  end
@@ -115,7 +131,7 @@ describe "NativeObject (scoped)" do
115
131
  end
116
132
 
117
133
  describe "NativeFunction" do
118
-
134
+
119
135
  before do
120
136
  factory = Rhino::JS::ContextFactory.new
121
137
  @context, @scope = nil, nil
@@ -129,7 +145,9 @@ describe "NativeFunction" do
129
145
  @object = Rhino::JS::ScriptableObject.getProperty(object, 'toString')
130
146
  @object.instance_eval do
131
147
  def to_h_properties
132
- { "arguments"=> nil, "prototype"=> {}, "name"=> "toString", "arity"=> 0, "length"=> 0 }
148
+ h = { "arguments"=> nil, "name"=> "toString", "arity"=> 0, "length"=> 0 }
149
+ RhinoHelpers.add_prototype_key(h) if Rhino.implementation_version < '1.7R4'
150
+ h
133
151
  end
134
152
  end
135
153
  end
@@ -187,7 +205,7 @@ describe "NativeFunction" do
187
205
  end
188
206
 
189
207
  describe "NativeFunction (constructor)" do
190
-
208
+
191
209
  before do
192
210
  factory = Rhino::JS::ContextFactory.new
193
211
  context, scope = nil, nil
@@ -200,23 +218,25 @@ describe "NativeFunction (constructor)" do
200
218
  @object = Rhino::JS::ScriptableObject.getProperty(context.newObject(scope), 'constructor')
201
219
  @object.instance_eval do
202
220
  def to_h_properties
203
- {
221
+ h = {
204
222
  "arguments"=>nil, "prototype"=>{}, "name"=>"Object", "arity"=>1, "length"=>1,
205
223
 
206
- "getPrototypeOf"=> { "arguments"=>nil, "prototype"=>{}, "name"=>"getPrototypeOf", "arity"=>1, "length"=>1},
207
- "keys"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"keys", "arity"=>1, "length"=>1},
208
- "getOwnPropertyNames"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"getOwnPropertyNames", "arity"=>1, "length"=>1},
209
- "getOwnPropertyDescriptor"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"getOwnPropertyDescriptor", "arity"=>2, "length"=>2},
210
- "defineProperty"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"defineProperty", "arity"=>3, "length"=>3},
211
- "isExtensible"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"isExtensible", "arity"=>1, "length"=>1},
212
- "preventExtensions"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"preventExtensions", "arity"=>1, "length"=>1},
213
- "defineProperties"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"defineProperties", "arity"=>2, "length"=>2},
214
- "create"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"create", "arity"=>2, "length"=>2},
215
- "isSealed"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"isSealed", "arity"=>1, "length"=>1},
216
- "isFrozen"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"isFrozen", "arity"=>1, "length"=>1},
217
- "seal"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"seal", "arity"=>1, "length"=>1},
218
- "freeze"=>{"arguments"=>nil, "prototype"=>{}, "name"=>"freeze", "arity"=>1, "length"=>1}
224
+ "getPrototypeOf"=> { "arguments"=>nil, "name"=>"getPrototypeOf", "arity"=>1, "length"=>1},
225
+ "keys"=>{"arguments"=>nil, "name"=>"keys", "arity"=>1, "length"=>1},
226
+ "getOwnPropertyNames"=>{"arguments"=>nil, "name"=>"getOwnPropertyNames", "arity"=>1, "length"=>1},
227
+ "getOwnPropertyDescriptor"=>{"arguments"=>nil, "name"=>"getOwnPropertyDescriptor", "arity"=>2, "length"=>2},
228
+ "defineProperty"=>{"arguments"=>nil, "name"=>"defineProperty", "arity"=>3, "length"=>3},
229
+ "isExtensible"=>{"arguments"=>nil, "name"=>"isExtensible", "arity"=>1, "length"=>1},
230
+ "preventExtensions"=>{"arguments"=>nil, "name"=>"preventExtensions", "arity"=>1, "length"=>1},
231
+ "defineProperties"=>{"arguments"=>nil, "name"=>"defineProperties", "arity"=>2, "length"=>2},
232
+ "create"=>{"arguments"=>nil, "name"=>"create", "arity"=>2, "length"=>2},
233
+ "isSealed"=>{"arguments"=>nil, "name"=>"isSealed", "arity"=>1, "length"=>1},
234
+ "isFrozen"=>{"arguments"=>nil, "name"=>"isFrozen", "arity"=>1, "length"=>1},
235
+ "seal"=>{"arguments"=>nil, "name"=>"seal", "arity"=>1, "length"=>1},
236
+ "freeze"=>{"arguments"=>nil, "name"=>"freeze", "arity"=>1, "length"=>1}
219
237
  }
238
+ RhinoHelpers.add_prototype_key(h, :recurse) if Rhino.implementation_version < '1.7R4'
239
+ h
220
240
  end
221
241
  end
222
242
  end
@@ -5,52 +5,48 @@ describe Rhino::To do
5
5
  describe "ruby translation" do
6
6
 
7
7
  it "converts javascript NOT_FOUND to ruby nil" do
8
- Rhino.to_ruby(Rhino::JS::Scriptable::NOT_FOUND).should be_nil
8
+ Rhino.to_ruby(Rhino::JS::Scriptable::NOT_FOUND).should be nil
9
9
  end
10
10
 
11
11
  it "converts javascript undefined into nil" do
12
- Rhino.to_ruby(Rhino::JS::Undefined.instance).should be_nil
12
+ Rhino.to_ruby(Rhino::JS::Undefined.instance).should be nil
13
13
  end
14
14
 
15
15
  it "does return javascript object" do
16
16
  Rhino::JS::NativeObject.new.tap do |js_obj|
17
- Rhino.to_ruby(js_obj).tap do |rb_obj|
18
- rb_obj.should be(js_obj)
19
- end
17
+ Rhino.to_ruby(js_obj).should be(js_obj)
20
18
  end
21
19
  end
22
20
 
23
21
  it "wraps native javascript arrays into a ruby NativeArray wrapper" do
24
- Rhino::JS::NativeArray.new([1,2,4].to_java).tap do |js_array|
25
- Rhino.to_ruby(js_array).should == [1,2,4]
26
- end
22
+ js_array = Rhino::JS::NativeArray.new([1,2,4].to_java)
23
+ Rhino.to_ruby(js_array).should == [1,2,4]
27
24
  end
28
25
 
29
- it "does return javascript function" do
30
-
26
+ it "returns a javascript function" do
31
27
  klass = Class.new(Rhino::JS::BaseFunction)
32
-
33
- klass.new.tap do |js_fn|
34
- Rhino.to_ruby(js_fn).tap do |rb_fn|
35
- rb_fn.should be(js_fn)
36
- end
37
- end
38
-
28
+ function = klass.new
29
+ Rhino.to_ruby(function).should be(function)
39
30
  end
40
31
 
41
32
  it "leaves native ruby objects alone" do
42
- Object.new.tap do |o|
43
- Rhino.to_ruby(o).should be(o)
44
- end
33
+ obj = Object.new
34
+ Rhino.to_ruby(obj).should be(obj)
45
35
  end
46
36
 
47
37
  it "it unwraps wrapped java objects" do
48
38
  Rhino::Context.open do |cx|
49
39
  scope = cx.scope
50
40
  j_str = java.lang.String.new("Hello World")
51
- Rhino::JS::NativeJavaObject.new(scope, j_str, j_str.getClass()).tap do |o|
52
- Rhino.to_ruby(o).should == "Hello World"
53
- end
41
+ native_obj = Rhino::JS::NativeJavaObject.new(scope, j_str, j_str.getClass())
42
+ Rhino.to_ruby(native_obj).should == "Hello World"
43
+ end
44
+ end
45
+
46
+ if (Java::JavaClass.for_name('org.mozilla.javascript.ConsString') rescue nil)
47
+ it "converts a cons string" do
48
+ cons_string = org.mozilla.javascript.ConsString.new('1', '2')
49
+ Rhino.to_ruby(cons_string).should == '12'
54
50
  end
55
51
  end
56
52
 
@@ -1,3 +1,4 @@
1
+ require 'bundler/setup'
1
2
 
2
3
  require 'rhino'
3
4
 
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.add_dependency "therubyrhino_jar", '>= 1.7.3'
22
22
 
23
23
  s.add_development_dependency "rake"
24
- s.add_development_dependency "rspec", ">= 2.7"
24
+ s.add_development_dependency "rspec", "~> 2.10"
25
25
  s.add_development_dependency "mocha"
26
26
  s.add_development_dependency "jruby-openssl"
27
27
  end
metadata CHANGED
@@ -1,141 +1,142 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: therubyrhino
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 2.0.0
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 2.0.1
6
6
  platform: ruby
7
- authors:
8
- - Charles Lowell
9
- autorequire:
7
+ authors:
8
+ - Charles Lowell
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-08-02 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: therubyrhino_jar
17
- version_requirements: &id001 !ruby/object:Gem::Requirement
18
- none: false
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 1.7.3
23
- requirement: *id001
24
- prerelease: false
25
- type: :runtime
26
- - !ruby/object:Gem::Dependency
27
- name: rake
28
- version_requirements: &id002 !ruby/object:Gem::Requirement
29
- none: false
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: "0"
34
- requirement: *id002
35
- prerelease: false
36
- type: :development
37
- - !ruby/object:Gem::Dependency
38
- name: rspec
39
- version_requirements: &id003 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- version: "2.7"
45
- requirement: *id003
46
- prerelease: false
47
- type: :development
48
- - !ruby/object:Gem::Dependency
49
- name: mocha
50
- version_requirements: &id004 !ruby/object:Gem::Requirement
51
- none: false
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: "0"
56
- requirement: *id004
57
- prerelease: false
58
- type: :development
59
- - !ruby/object:Gem::Dependency
60
- name: jruby-openssl
61
- version_requirements: &id005 !ruby/object:Gem::Requirement
62
- none: false
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: "0"
67
- requirement: *id005
68
- prerelease: false
69
- type: :development
12
+ date: 2012-08-24 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: therubyrhino_jar
16
+ version_requirements: &3954 !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ! '>='
19
+ - !ruby/object:Gem::Version
20
+ version: 1.7.3
21
+ none: false
22
+ requirement: *3954
23
+ prerelease: false
24
+ type: :runtime
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ version_requirements: &3972 !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ! '>='
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
32
+ none: false
33
+ requirement: *3972
34
+ prerelease: false
35
+ type: :development
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ version_requirements: &3990 !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ version: '2.10'
43
+ none: false
44
+ requirement: *3990
45
+ prerelease: false
46
+ type: :development
47
+ - !ruby/object:Gem::Dependency
48
+ name: mocha
49
+ version_requirements: &4006 !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ none: false
55
+ requirement: *4006
56
+ prerelease: false
57
+ type: :development
58
+ - !ruby/object:Gem::Dependency
59
+ name: jruby-openssl
60
+ version_requirements: &4022 !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ none: false
66
+ requirement: *4022
67
+ prerelease: false
68
+ type: :development
70
69
  description: Call javascript code and manipulate javascript objects from ruby. Call ruby code and manipulate ruby objects from javascript.
71
70
  email: cowboyd@thefrontside.net
72
71
  executables: []
73
-
74
72
  extensions: []
75
-
76
- extra_rdoc_files:
77
- - README.rdoc
78
- files:
79
- - .gitignore
80
- - .travis.yml
81
- - Gemfile
82
- - History.txt
83
- - README.rdoc
84
- - Rakefile
85
- - lib/rhino.rb
86
- - lib/rhino/context.rb
87
- - lib/rhino/deprecations.rb
88
- - lib/rhino/error.rb
89
- - lib/rhino/object.rb
90
- - lib/rhino/rhino_ext.rb
91
- - lib/rhino/ruby.rb
92
- - lib/rhino/ruby/access.rb
93
- - lib/rhino/ruby/attribute_access.rb
94
- - lib/rhino/ruby/default_access.rb
95
- - lib/rhino/version.rb
96
- - lib/rhino/wormhole.rb
97
- - spec/rhino/access_spec.rb
98
- - spec/rhino/context_spec.rb
99
- - spec/rhino/deprecations_spec.rb
100
- - spec/rhino/error_spec.rb
101
- - spec/rhino/redjs_spec.rb
102
- - spec/rhino/rhino_ext_spec.rb
103
- - spec/rhino/ruby_spec.rb
104
- - spec/rhino/wormhole_spec.rb
105
- - spec/spec_helper.rb
106
- - therubyrhino.gemspec
73
+ extra_rdoc_files:
74
+ - README.rdoc
75
+ files:
76
+ - .gitignore
77
+ - .travis.yml
78
+ - Gemfile
79
+ - History.txt
80
+ - README.rdoc
81
+ - Rakefile
82
+ - lib/rhino.rb
83
+ - lib/rhino/context.rb
84
+ - lib/rhino/deprecations.rb
85
+ - lib/rhino/error.rb
86
+ - lib/rhino/object.rb
87
+ - lib/rhino/rhino_ext.rb
88
+ - lib/rhino/ruby.rb
89
+ - lib/rhino/ruby/access.rb
90
+ - lib/rhino/ruby/attribute_access.rb
91
+ - lib/rhino/ruby/default_access.rb
92
+ - lib/rhino/version.rb
93
+ - lib/rhino/wormhole.rb
94
+ - spec/rhino/access_spec.rb
95
+ - spec/rhino/context_spec.rb
96
+ - spec/rhino/deprecations_spec.rb
97
+ - spec/rhino/error_spec.rb
98
+ - spec/rhino/integration/bar.js
99
+ - spec/rhino/integration/foo.js
100
+ - spec/rhino/integration/index.js
101
+ - spec/rhino/integration/loop.js
102
+ - spec/rhino/integration/loop/element1.js
103
+ - spec/rhino/integration/loop/element2.js
104
+ - spec/rhino/integration_spec.rb
105
+ - spec/rhino/redjs_spec.rb
106
+ - spec/rhino/rhino_ext_spec.rb
107
+ - spec/rhino/ruby_spec.rb
108
+ - spec/rhino/wormhole_spec.rb
109
+ - spec/spec_helper.rb
110
+ - therubyrhino.gemspec
107
111
  homepage: http://github.com/cowboyd/therubyrhino
108
112
  licenses: []
109
-
110
- post_install_message:
113
+ post_install_message:
111
114
  rdoc_options: []
112
-
113
- require_paths:
114
- - lib
115
- required_ruby_version: !ruby/object:Gem::Requirement
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ segments:
122
+ - 0
123
+ hash: 2
124
+ version: '0'
116
125
  none: false
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- hash: 2
121
- segments:
122
- - 0
123
- version: "0"
124
- required_rubygems_version: !ruby/object:Gem::Requirement
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ! '>='
129
+ - !ruby/object:Gem::Version
130
+ segments:
131
+ - 0
132
+ hash: 2
133
+ version: '0'
125
134
  none: false
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- hash: 2
130
- segments:
131
- - 0
132
- version: "0"
133
135
  requirements: []
134
-
135
136
  rubyforge_project: therubyrhino
136
137
  rubygems_version: 1.8.15
137
- signing_key:
138
+ signing_key:
138
139
  specification_version: 3
139
140
  summary: Embed the Rhino JavaScript interpreter into JRuby
140
141
  test_files: []
141
-
142
+ ...