therubyracer-xcode 0.12.2
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.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.travis.yml +14 -0
- data/Changelog.md +263 -0
- data/Gemfile +12 -0
- data/README.md +227 -0
- data/Rakefile +42 -0
- data/benchmarks.rb +218 -0
- data/ext/v8/accessor.cc +181 -0
- data/ext/v8/array.cc +26 -0
- data/ext/v8/backref.cc +45 -0
- data/ext/v8/constants.cc +34 -0
- data/ext/v8/constraints.cc +52 -0
- data/ext/v8/context.cc +130 -0
- data/ext/v8/date.cc +18 -0
- data/ext/v8/exception.cc +38 -0
- data/ext/v8/extconf.rb +34 -0
- data/ext/v8/external.cc +43 -0
- data/ext/v8/function.cc +58 -0
- data/ext/v8/gc.cc +43 -0
- data/ext/v8/handles.cc +34 -0
- data/ext/v8/heap.cc +35 -0
- data/ext/v8/init.cc +39 -0
- data/ext/v8/invocation.cc +86 -0
- data/ext/v8/locker.cc +77 -0
- data/ext/v8/message.cc +51 -0
- data/ext/v8/object.cc +335 -0
- data/ext/v8/primitive.cc +8 -0
- data/ext/v8/rr.cc +83 -0
- data/ext/v8/rr.h +934 -0
- data/ext/v8/script.cc +115 -0
- data/ext/v8/signature.cc +18 -0
- data/ext/v8/stack.cc +76 -0
- data/ext/v8/string.cc +47 -0
- data/ext/v8/template.cc +175 -0
- data/ext/v8/trycatch.cc +87 -0
- data/ext/v8/v8.cc +87 -0
- data/ext/v8/value.cc +239 -0
- data/lib/therubyracer.rb +1 -0
- data/lib/v8/access/indices.rb +40 -0
- data/lib/v8/access/invocation.rb +47 -0
- data/lib/v8/access/names.rb +65 -0
- data/lib/v8/access.rb +5 -0
- data/lib/v8/array.rb +26 -0
- data/lib/v8/context.rb +258 -0
- data/lib/v8/conversion/array.rb +11 -0
- data/lib/v8/conversion/class.rb +119 -0
- data/lib/v8/conversion/code.rb +38 -0
- data/lib/v8/conversion/fixnum.rb +11 -0
- data/lib/v8/conversion/fundamental.rb +11 -0
- data/lib/v8/conversion/hash.rb +11 -0
- data/lib/v8/conversion/indentity.rb +31 -0
- data/lib/v8/conversion/method.rb +26 -0
- data/lib/v8/conversion/object.rb +28 -0
- data/lib/v8/conversion/primitive.rb +7 -0
- data/lib/v8/conversion/proc.rb +5 -0
- data/lib/v8/conversion/reference.rb +16 -0
- data/lib/v8/conversion/string.rb +12 -0
- data/lib/v8/conversion/symbol.rb +7 -0
- data/lib/v8/conversion/time.rb +13 -0
- data/lib/v8/conversion.rb +36 -0
- data/lib/v8/error.rb +169 -0
- data/lib/v8/function.rb +28 -0
- data/lib/v8/object.rb +79 -0
- data/lib/v8/stack.rb +85 -0
- data/lib/v8/version.rb +3 -0
- data/lib/v8/weak.rb +82 -0
- data/lib/v8.rb +30 -0
- data/spec/c/array_spec.rb +19 -0
- data/spec/c/constants_spec.rb +22 -0
- data/spec/c/exception_spec.rb +28 -0
- data/spec/c/external_spec.rb +11 -0
- data/spec/c/function_spec.rb +48 -0
- data/spec/c/handles_spec.rb +31 -0
- data/spec/c/locker_spec.rb +36 -0
- data/spec/c/object_spec.rb +47 -0
- data/spec/c/script_spec.rb +30 -0
- data/spec/c/string_spec.rb +18 -0
- data/spec/c/template_spec.rb +31 -0
- data/spec/c/trycatch_spec.rb +52 -0
- data/spec/mem/blunt_spec.rb +42 -0
- data/spec/redjs_spec.rb +10 -0
- data/spec/spec_helper.rb +41 -0
- data/spec/threading_spec.rb +64 -0
- data/spec/v8/context_spec.rb +19 -0
- data/spec/v8/conversion_spec.rb +52 -0
- data/spec/v8/error_spec.rb +167 -0
- data/spec/v8/function_spec.rb +9 -0
- data/spec/v8/object_spec.rb +15 -0
- data/thefrontside.png +0 -0
- data/therubyracer.gemspec +22 -0
- metadata +186 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Timeouts" do
|
4
|
+
it "allows for timeout on context" do
|
5
|
+
ctx = V8::Context.new(:timeout => 10)
|
6
|
+
lambda {ctx.eval("while(true){}")}.should(raise_error)
|
7
|
+
|
8
|
+
# context should not be bust after it exploded once
|
9
|
+
ctx["x"] = 1;
|
10
|
+
ctx.eval("x=2;")
|
11
|
+
ctx["x"].should == 2
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "using v8 from multiple threads", :threads => true do
|
16
|
+
|
17
|
+
it "creates contexts from within threads" do
|
18
|
+
10.times.collect do
|
19
|
+
Thread.new do
|
20
|
+
V8::Context.new
|
21
|
+
end
|
22
|
+
end.each {|t| t.join}
|
23
|
+
V8::Context.new
|
24
|
+
end
|
25
|
+
|
26
|
+
it "executes codes on multiple threads simultaneously" do
|
27
|
+
5.times.collect{V8::Context.new}.collect do |ctx|
|
28
|
+
Thread.new do
|
29
|
+
ctx['x'] = 99
|
30
|
+
while ctx['x'] > 0
|
31
|
+
ctx.eval 'for (i=10000;i;i--){};--x'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end.each {|t| t.join}
|
35
|
+
end
|
36
|
+
|
37
|
+
it "can access the current thread id" do
|
38
|
+
V8::C::Locker() do
|
39
|
+
V8::C::V8::GetCurrentThreadId().should_not be_nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it "can pre-empt a running JavaScript thread" do
|
44
|
+
pending "need to release the GIL while executing V8 code"
|
45
|
+
begin
|
46
|
+
V8::C::Locker::StartPreemption(2)
|
47
|
+
thread_id = nil
|
48
|
+
Thread.new do
|
49
|
+
loop until thread_id
|
50
|
+
puts "thread id: #{thread_id}"
|
51
|
+
V8::C::V8::TerminateExecution(thread_id)
|
52
|
+
end
|
53
|
+
Thread.new do
|
54
|
+
V8::C::Locker() do
|
55
|
+
thread_id = V8::C::V8::GetCurrentThreadId()
|
56
|
+
V8::Context.new {|cxt| cxt.eval('while (true) {}')}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
V8::C::V8::TerminateExecution(thread_id)
|
60
|
+
ensure
|
61
|
+
V8::C::Locker::StopPreemption()
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe V8::Context do
|
4
|
+
it "can be disposed of" do
|
5
|
+
cxt = V8::Context.new
|
6
|
+
cxt.enter do
|
7
|
+
cxt['object'] = V8::Object.new
|
8
|
+
end
|
9
|
+
cxt.dispose()
|
10
|
+
|
11
|
+
lambda {cxt.eval('1 + 1')}.should raise_error
|
12
|
+
lambda {cxt['object']}.should raise_error
|
13
|
+
end
|
14
|
+
|
15
|
+
it "can be disposed of any number of times" do
|
16
|
+
cxt = V8::Context.new
|
17
|
+
10.times {cxt.dispose()}
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'bigdecimal'
|
3
|
+
describe V8::Conversion do
|
4
|
+
|
5
|
+
let(:cxt) { V8::Context.new }
|
6
|
+
|
7
|
+
it "can embed BigDecimal values" do
|
8
|
+
cxt['big'] = BigDecimal.new('1.1')
|
9
|
+
cxt['big'].should eql BigDecimal.new('1.1')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "doesn't try to use V8::Conversion::Class::* as root objects" do
|
13
|
+
klass = Class.new do
|
14
|
+
class << self
|
15
|
+
def test
|
16
|
+
Set.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
klass.test.should be_instance_of(::Set)
|
22
|
+
end
|
23
|
+
|
24
|
+
context "::Fixnum" do
|
25
|
+
context "for 32-bit numbers" do
|
26
|
+
it "should convert positive integer" do
|
27
|
+
cxt['fixnum_a'] = 123
|
28
|
+
cxt['fixnum_a'].should == 123
|
29
|
+
cxt['fixnum_a'].should be_instance_of(Fixnum)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should convert negative integer" do
|
33
|
+
cxt['fixnum_b'] = -123
|
34
|
+
cxt['fixnum_b'].should == -123
|
35
|
+
cxt['fixnum_b'].should be_instance_of(Fixnum)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "for 64-bit numbers" do
|
40
|
+
it "should convert positive integer" do
|
41
|
+
cxt['fixnum_c'] = 0x100000000
|
42
|
+
cxt['fixnum_c'].should == 0x100000000
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should convert negative integer" do
|
46
|
+
cxt['fixnum_d'] = -0x100000000
|
47
|
+
cxt['fixnum_d'].should == -0x100000000
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
4
|
+
|
5
|
+
describe V8::Error do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@cxt = V8::Context.new
|
9
|
+
@cxt['one'] = lambda do
|
10
|
+
@cxt.eval('two()', 'one.js')
|
11
|
+
end
|
12
|
+
@cxt['two'] = lambda do
|
13
|
+
@cxt.eval('three()', 'two.js')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "captures a message without over nesting when the error is an error" do
|
18
|
+
throw! do |e|
|
19
|
+
e.message.should == "BOOM!"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "captures the js message without over nesting when the error is a normal object" do
|
24
|
+
throw!('{foo: "bar"}') do |e|
|
25
|
+
e.message.should == "[object Object]"
|
26
|
+
end
|
27
|
+
throw!('{message: "bar"}') do |e|
|
28
|
+
e.message.should == "bar"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it "captures a thrown value as the message" do
|
33
|
+
throw!('"BOOM!"') do |e|
|
34
|
+
e.message.should == "BOOM!"
|
35
|
+
end
|
36
|
+
throw!('6') do |e|
|
37
|
+
e.message.should == '6'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it "has a reference to the root javascript cause" do
|
42
|
+
throw!('"I am a String"') do |e|
|
43
|
+
e.should_not be_in_ruby
|
44
|
+
e.should be_in_javascript
|
45
|
+
e.value['message'].should == "I am a String"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "has a reference to the root ruby cause if one exists" do
|
50
|
+
StandardError.new("BOOM!").tap do |bomb|
|
51
|
+
@cxt['boom'] = lambda do
|
52
|
+
raise bomb
|
53
|
+
end
|
54
|
+
lambda {
|
55
|
+
@cxt.eval('boom()', 'boom.js')
|
56
|
+
}.should(raise_error do |raised|
|
57
|
+
raised.should be_in_ruby
|
58
|
+
raised.should_not be_in_javascript
|
59
|
+
raised.root_cause.should be(bomb)
|
60
|
+
end)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "backtrace" do
|
65
|
+
it "is mixed with ruby and javascript" do
|
66
|
+
throw! do |e|
|
67
|
+
backtrace = e.backtrace.reject { |l| /kernel\// =~ l }
|
68
|
+
backtrace.first.should eql "at three.js:1:7"
|
69
|
+
backtrace[1].should match(/error_spec.rb/)
|
70
|
+
backtrace[2].should eql "at two.js:1:1"
|
71
|
+
backtrace[3].should match(/error_spec.rb/)
|
72
|
+
backtrace[4].should eql "at one.js:1:1"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it "can be set to show only ruby frames" do
|
77
|
+
throw! do |e|
|
78
|
+
e.backtrace(:ruby).each do |frame|
|
79
|
+
frame.should =~ /(\.rb|):\d+/
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
it "can be set to show only javascript frames" do
|
85
|
+
throw! do |e|
|
86
|
+
e.backtrace(:javascript).each do |frame|
|
87
|
+
frame.should =~ /\.js:\d:\d/
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
it "includes a mystery marker when the original frame is unavailable because what got thrown wasn't an error" do
|
93
|
+
throw!("6") do |e|
|
94
|
+
e.backtrace.first.should == 'at three.js:1:1'
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
it "has a source name and line number when there is a javascript SyntaxError" do
|
99
|
+
lambda do
|
100
|
+
@cxt.eval(<<-INVALID, 'source.js')
|
101
|
+
"this line is okay";
|
102
|
+
"this line has a syntax error because it ends with a colon":
|
103
|
+
"this line is also okay";
|
104
|
+
"how do I find out that line 2 has the syntax error?";
|
105
|
+
INVALID
|
106
|
+
end.should raise_error(V8::JSError) {|error|
|
107
|
+
error.message.should eql 'Unexpected token : at source.js:2:61'
|
108
|
+
}
|
109
|
+
end
|
110
|
+
|
111
|
+
it "can start with ruby at the bottom" do
|
112
|
+
@cxt['boom'] = lambda do
|
113
|
+
raise StandardError, "Bif!"
|
114
|
+
end
|
115
|
+
lambda {
|
116
|
+
@cxt.eval('boom()', "boom.js")
|
117
|
+
}.should(raise_error {|e|
|
118
|
+
backtrace = e.backtrace.reject { |l| /kernel\// =~ l }
|
119
|
+
backtrace.first.should =~ /error_spec\.rb/
|
120
|
+
backtrace[1].should =~ /boom.js/
|
121
|
+
})
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
def throw!(js = "new Error('BOOM!')", &block)
|
127
|
+
@cxt['three'] = lambda do
|
128
|
+
@cxt.eval("throw #{js}", 'three.js')
|
129
|
+
end
|
130
|
+
lambda do
|
131
|
+
@cxt['one'].call()
|
132
|
+
end.should(raise_error(V8::JSError, &block))
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
|
137
|
+
# describe V8::Error do
|
138
|
+
# describe "A ruby exception thrown inside JavaScript" do
|
139
|
+
# before do
|
140
|
+
# @error = StandardError.new('potato')
|
141
|
+
# begin
|
142
|
+
# V8::Context.new do |cxt|
|
143
|
+
# cxt['one'] = lambda do
|
144
|
+
# cxt.eval('two()', 'one.js')
|
145
|
+
# end
|
146
|
+
# cxt['two'] = lambda do
|
147
|
+
# cxt.eval('three()', 'two.js')
|
148
|
+
# end
|
149
|
+
# cxt['three'] = lambda do
|
150
|
+
# raise @error
|
151
|
+
# end
|
152
|
+
# cxt.eval('one()')
|
153
|
+
# end
|
154
|
+
# rescue StandardError => e
|
155
|
+
# @thrown = e
|
156
|
+
# end
|
157
|
+
# end
|
158
|
+
# it "is raised up through the call stack" do
|
159
|
+
# @thrown.should be(@error)
|
160
|
+
# end
|
161
|
+
#
|
162
|
+
# it "shows both the javascript and the ruby callframes" do
|
163
|
+
# puts @error.backtrace.join('<br/>')
|
164
|
+
# end
|
165
|
+
#
|
166
|
+
# end
|
167
|
+
# end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe V8::Object do
|
4
|
+
before do
|
5
|
+
@object = V8::Context.new.eval('({foo: "bar", baz: "bang", qux: "qux1"})')
|
6
|
+
end
|
7
|
+
|
8
|
+
it "can list all keys" do
|
9
|
+
@object.keys.sort.should eql %w(baz foo qux)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "can list all values" do
|
13
|
+
@object.values.sort.should eql %w(bang bar qux1)
|
14
|
+
end
|
15
|
+
end
|
data/thefrontside.png
ADDED
Binary file
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/v8/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Charles Lowell"]
|
6
|
+
gem.email = ["javascript-and-friends@googlegroups.com"]
|
7
|
+
gem.summary = "Embed the V8 JavaScript interpreter into Ruby"
|
8
|
+
gem.description = "Call JavaScript code and manipulate JavaScript objects from Ruby. Call Ruby code and manipulate Ruby objects from JavaScript."
|
9
|
+
gem.homepage = "http://github.com/sotownsend/therubyracer"
|
10
|
+
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.name = "therubyracer-xcode"
|
15
|
+
gem.extensions = ["ext/v8/extconf.rb"]
|
16
|
+
gem.require_paths = ["lib", "ext"]
|
17
|
+
gem.version = V8::VERSION
|
18
|
+
gem.license = 'MIT'
|
19
|
+
|
20
|
+
gem.add_dependency 'ref'
|
21
|
+
gem.add_dependency 'libv8', '~> 4.5.95.5'
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: therubyracer-xcode
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.12.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Charles Lowell
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ref
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: libv8
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.5.95.5
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.5.95.5
|
41
|
+
description: Call JavaScript code and manipulate JavaScript objects from Ruby. Call
|
42
|
+
Ruby code and manipulate Ruby objects from JavaScript.
|
43
|
+
email:
|
44
|
+
- javascript-and-friends@googlegroups.com
|
45
|
+
executables: []
|
46
|
+
extensions:
|
47
|
+
- ext/v8/extconf.rb
|
48
|
+
extra_rdoc_files: []
|
49
|
+
files:
|
50
|
+
- ".gitignore"
|
51
|
+
- ".travis.yml"
|
52
|
+
- Changelog.md
|
53
|
+
- Gemfile
|
54
|
+
- README.md
|
55
|
+
- Rakefile
|
56
|
+
- benchmarks.rb
|
57
|
+
- ext/v8/accessor.cc
|
58
|
+
- ext/v8/array.cc
|
59
|
+
- ext/v8/backref.cc
|
60
|
+
- ext/v8/constants.cc
|
61
|
+
- ext/v8/constraints.cc
|
62
|
+
- ext/v8/context.cc
|
63
|
+
- ext/v8/date.cc
|
64
|
+
- ext/v8/exception.cc
|
65
|
+
- ext/v8/extconf.rb
|
66
|
+
- ext/v8/external.cc
|
67
|
+
- ext/v8/function.cc
|
68
|
+
- ext/v8/gc.cc
|
69
|
+
- ext/v8/handles.cc
|
70
|
+
- ext/v8/heap.cc
|
71
|
+
- ext/v8/init.cc
|
72
|
+
- ext/v8/invocation.cc
|
73
|
+
- ext/v8/locker.cc
|
74
|
+
- ext/v8/message.cc
|
75
|
+
- ext/v8/object.cc
|
76
|
+
- ext/v8/primitive.cc
|
77
|
+
- ext/v8/rr.cc
|
78
|
+
- ext/v8/rr.h
|
79
|
+
- ext/v8/script.cc
|
80
|
+
- ext/v8/signature.cc
|
81
|
+
- ext/v8/stack.cc
|
82
|
+
- ext/v8/string.cc
|
83
|
+
- ext/v8/template.cc
|
84
|
+
- ext/v8/trycatch.cc
|
85
|
+
- ext/v8/v8.cc
|
86
|
+
- ext/v8/value.cc
|
87
|
+
- lib/therubyracer.rb
|
88
|
+
- lib/v8.rb
|
89
|
+
- lib/v8/access.rb
|
90
|
+
- lib/v8/access/indices.rb
|
91
|
+
- lib/v8/access/invocation.rb
|
92
|
+
- lib/v8/access/names.rb
|
93
|
+
- lib/v8/array.rb
|
94
|
+
- lib/v8/context.rb
|
95
|
+
- lib/v8/conversion.rb
|
96
|
+
- lib/v8/conversion/array.rb
|
97
|
+
- lib/v8/conversion/class.rb
|
98
|
+
- lib/v8/conversion/code.rb
|
99
|
+
- lib/v8/conversion/fixnum.rb
|
100
|
+
- lib/v8/conversion/fundamental.rb
|
101
|
+
- lib/v8/conversion/hash.rb
|
102
|
+
- lib/v8/conversion/indentity.rb
|
103
|
+
- lib/v8/conversion/method.rb
|
104
|
+
- lib/v8/conversion/object.rb
|
105
|
+
- lib/v8/conversion/primitive.rb
|
106
|
+
- lib/v8/conversion/proc.rb
|
107
|
+
- lib/v8/conversion/reference.rb
|
108
|
+
- lib/v8/conversion/string.rb
|
109
|
+
- lib/v8/conversion/symbol.rb
|
110
|
+
- lib/v8/conversion/time.rb
|
111
|
+
- lib/v8/error.rb
|
112
|
+
- lib/v8/function.rb
|
113
|
+
- lib/v8/object.rb
|
114
|
+
- lib/v8/stack.rb
|
115
|
+
- lib/v8/version.rb
|
116
|
+
- lib/v8/weak.rb
|
117
|
+
- spec/c/array_spec.rb
|
118
|
+
- spec/c/constants_spec.rb
|
119
|
+
- spec/c/exception_spec.rb
|
120
|
+
- spec/c/external_spec.rb
|
121
|
+
- spec/c/function_spec.rb
|
122
|
+
- spec/c/handles_spec.rb
|
123
|
+
- spec/c/locker_spec.rb
|
124
|
+
- spec/c/object_spec.rb
|
125
|
+
- spec/c/script_spec.rb
|
126
|
+
- spec/c/string_spec.rb
|
127
|
+
- spec/c/template_spec.rb
|
128
|
+
- spec/c/trycatch_spec.rb
|
129
|
+
- spec/mem/blunt_spec.rb
|
130
|
+
- spec/redjs_spec.rb
|
131
|
+
- spec/spec_helper.rb
|
132
|
+
- spec/threading_spec.rb
|
133
|
+
- spec/v8/context_spec.rb
|
134
|
+
- spec/v8/conversion_spec.rb
|
135
|
+
- spec/v8/error_spec.rb
|
136
|
+
- spec/v8/function_spec.rb
|
137
|
+
- spec/v8/object_spec.rb
|
138
|
+
- thefrontside.png
|
139
|
+
- therubyracer.gemspec
|
140
|
+
homepage: http://github.com/sotownsend/therubyracer
|
141
|
+
licenses:
|
142
|
+
- MIT
|
143
|
+
metadata: {}
|
144
|
+
post_install_message:
|
145
|
+
rdoc_options: []
|
146
|
+
require_paths:
|
147
|
+
- lib
|
148
|
+
- ext
|
149
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
requirements: []
|
160
|
+
rubyforge_project:
|
161
|
+
rubygems_version: 2.6.1
|
162
|
+
signing_key:
|
163
|
+
specification_version: 4
|
164
|
+
summary: Embed the V8 JavaScript interpreter into Ruby
|
165
|
+
test_files:
|
166
|
+
- spec/c/array_spec.rb
|
167
|
+
- spec/c/constants_spec.rb
|
168
|
+
- spec/c/exception_spec.rb
|
169
|
+
- spec/c/external_spec.rb
|
170
|
+
- spec/c/function_spec.rb
|
171
|
+
- spec/c/handles_spec.rb
|
172
|
+
- spec/c/locker_spec.rb
|
173
|
+
- spec/c/object_spec.rb
|
174
|
+
- spec/c/script_spec.rb
|
175
|
+
- spec/c/string_spec.rb
|
176
|
+
- spec/c/template_spec.rb
|
177
|
+
- spec/c/trycatch_spec.rb
|
178
|
+
- spec/mem/blunt_spec.rb
|
179
|
+
- spec/redjs_spec.rb
|
180
|
+
- spec/spec_helper.rb
|
181
|
+
- spec/threading_spec.rb
|
182
|
+
- spec/v8/context_spec.rb
|
183
|
+
- spec/v8/conversion_spec.rb
|
184
|
+
- spec/v8/error_spec.rb
|
185
|
+
- spec/v8/function_spec.rb
|
186
|
+
- spec/v8/object_spec.rb
|