mini_racer 0.1.0.beta.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.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.travis.yml +17 -0
- data/CHANGELOG +5 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +182 -0
- data/Rakefile +54 -0
- data/benchmarks/bench_uglify.rb +35 -0
- data/benchmarks/discourse_app.js +107530 -0
- data/benchmarks/discourse_app_minified.js +68 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/ext/mini_racer_extension/extconf.rb +30 -0
- data/ext/mini_racer_extension/mini_racer_extension.cc +529 -0
- data/lib/mini_racer.rb +84 -0
- data/lib/mini_racer/version.rb +3 -0
- data/mini_racer.gemspec +33 -0
- metadata +134 -0
data/lib/mini_racer.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require "mini_racer/version"
|
2
|
+
require "mini_racer_extension"
|
3
|
+
require "thread"
|
4
|
+
|
5
|
+
module MiniRacer
|
6
|
+
|
7
|
+
class EvalError < StandardError; end
|
8
|
+
|
9
|
+
class ScriptTerminatedError < EvalError; end
|
10
|
+
class ParseError < EvalError; end
|
11
|
+
|
12
|
+
class RuntimeError < EvalError
|
13
|
+
def initialize(message)
|
14
|
+
message, js_backtrace = message.split("\n", 2)
|
15
|
+
if js_backtrace && !js_backtrace.empty?
|
16
|
+
@js_backtrace = js_backtrace.split("\n")
|
17
|
+
@js_backtrace.map!{|f| "JavaScript #{f.strip}"}
|
18
|
+
else
|
19
|
+
@js_backtrace = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
super(message)
|
23
|
+
end
|
24
|
+
|
25
|
+
def backtrace
|
26
|
+
val = super
|
27
|
+
return unless val
|
28
|
+
if @js_backtrace
|
29
|
+
@js_backtrace + val
|
30
|
+
else
|
31
|
+
val
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
# helper class returned when we have a JavaScript function
|
38
|
+
class JavaScriptFunction
|
39
|
+
def to_s
|
40
|
+
"JavaScript Function"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# eval is defined in the C class
|
45
|
+
class Context
|
46
|
+
|
47
|
+
class ExternalFunction
|
48
|
+
def initialize(name, callback, parent)
|
49
|
+
@name = name
|
50
|
+
@callback = callback
|
51
|
+
@parent = parent
|
52
|
+
notify_v8
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def initialize(options = nil)
|
57
|
+
@functions = {}
|
58
|
+
@lock = Mutex.new
|
59
|
+
@timeout = nil
|
60
|
+
@current_exception = nil
|
61
|
+
|
62
|
+
if options
|
63
|
+
@timeout = options[:timeout]
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
def eval(str)
|
69
|
+
@lock.synchronize do
|
70
|
+
@current_exception = nil
|
71
|
+
eval_unsafe(str)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def attach(name, callback)
|
76
|
+
@lock.synchronize do
|
77
|
+
external = ExternalFunction.new(name, callback, self)
|
78
|
+
@functions[name.to_s] = external
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
data/mini_racer.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'mini_racer/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "mini_racer"
|
8
|
+
spec.version = MiniRacer::VERSION
|
9
|
+
spec.authors = ["Sam Saffron"]
|
10
|
+
spec.email = ["sam.saffron@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Minimal embedded v8 for Ruby}
|
13
|
+
spec.description = %q{Minimal embedded v8 engine for Ruby}
|
14
|
+
spec.homepage = ""
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
spec.bindir = "exe"
|
20
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.12"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
26
|
+
spec.add_development_dependency "rake-compiler"
|
27
|
+
|
28
|
+
spec.add_dependency 'libv8', '5.0.71.48.1beta2'
|
29
|
+
spec.require_paths = ["lib", "ext"]
|
30
|
+
|
31
|
+
spec.extensions = ["ext/mini_racer_extension/extconf.rb"]
|
32
|
+
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mini_racer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0.beta.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sam Saffron
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-05-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.12'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.12'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake-compiler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: libv8
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 5.0.71.48.1beta2
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 5.0.71.48.1beta2
|
83
|
+
description: Minimal embedded v8 engine for Ruby
|
84
|
+
email:
|
85
|
+
- sam.saffron@gmail.com
|
86
|
+
executables: []
|
87
|
+
extensions:
|
88
|
+
- ext/mini_racer_extension/extconf.rb
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
92
|
+
- ".travis.yml"
|
93
|
+
- CHANGELOG
|
94
|
+
- CODE_OF_CONDUCT.md
|
95
|
+
- Gemfile
|
96
|
+
- LICENSE.txt
|
97
|
+
- README.md
|
98
|
+
- Rakefile
|
99
|
+
- benchmarks/bench_uglify.rb
|
100
|
+
- benchmarks/discourse_app.js
|
101
|
+
- benchmarks/discourse_app_minified.js
|
102
|
+
- bin/console
|
103
|
+
- bin/setup
|
104
|
+
- ext/mini_racer_extension/extconf.rb
|
105
|
+
- ext/mini_racer_extension/mini_racer_extension.cc
|
106
|
+
- lib/mini_racer.rb
|
107
|
+
- lib/mini_racer/version.rb
|
108
|
+
- mini_racer.gemspec
|
109
|
+
homepage: ''
|
110
|
+
licenses:
|
111
|
+
- MIT
|
112
|
+
metadata: {}
|
113
|
+
post_install_message:
|
114
|
+
rdoc_options: []
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
- ext
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">"
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: 1.3.1
|
128
|
+
requirements: []
|
129
|
+
rubyforge_project:
|
130
|
+
rubygems_version: 2.5.1
|
131
|
+
signing_key:
|
132
|
+
specification_version: 4
|
133
|
+
summary: Minimal embedded v8 for Ruby
|
134
|
+
test_files: []
|