sq_mini_racer 0.2.5.0.1.beta3 → 0.2.5.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da357c40be27bea96942a9307f09e08a95e85484aca11ae2ed32ed5f1647d53e
4
- data.tar.gz: 17ef93bbcfa122b9c66f3d7f6e6a3a37a9212cd6395d87312582127d7495dbef
3
+ metadata.gz: 124526376fa9a93ba73fd7205e15abca399022b37b91f5f6fd994ecadaf63714
4
+ data.tar.gz: 5a20fb645e0fbf6f8da6b4bdfbda258f29c05e6d9861928a28c2f2b0311bf7f1
5
5
  SHA512:
6
- metadata.gz: 874a341ec3a205c40c327ed1f70f69852aee45fe3d7451a5727afb7b6e3e55431ef2701eb1010c8473ed9aa0a5575edba93762f5778553b78181dab1938cce97
7
- data.tar.gz: 942afef2686240680342a0108f840d7d8fe86f3d610a5f6607e4d7c6831d565fc3aaaf3e445268c68dfde741ced678d2be39f11cc15517769db3ceb82d342678
6
+ metadata.gz: b2cb15116b9cda7b82245dee09f93f02cb4634911ef29d2606d084436b7d0d284b6940d69cbc8fd8dc83bfb865b586c943f0c4e13513b8c66ed2437116aaa340
7
+ data.tar.gz: f09c7e9b3ad2c3a34514bca93b5f209e1f49a2d8b873a0edf4f1ec0ba55c16dad035809a71364b7da1a817a8677342ed63cbd6a8bd0c4e588db6ee10b3b035af
data/.dockerignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ lib/sq_mini_racer_extension.so
11
+ lib/sq_mini_racer_loader.so
12
+ *.bundle
data/Dockerfile ADDED
@@ -0,0 +1,23 @@
1
+ ARG RUBY_VERSION=2.7
2
+ FROM ruby:${RUBY_VERSION}
3
+
4
+ RUN test ! -f /etc/alpine-release || apk add --no-cache build-base git
5
+
6
+ # without this `COPY .git`, we get the following error:
7
+ # fatal: not a git repository (or any of the parent directories): .git
8
+ # but with it we need the full gem just to compile the extension because
9
+ # of gemspec's `git --ls-files`
10
+ # COPY .git /code/.git
11
+
12
+ COPY Gemfile mini_racer.gemspec /code/
13
+ COPY lib/sqreen/mini_racer/version.rb /code/lib/sqreen/mini_racer/version.rb
14
+ WORKDIR /code
15
+ RUN bundle install
16
+
17
+ COPY Rakefile /code/
18
+ COPY ext /code/ext/
19
+ RUN bundle exec rake compile
20
+
21
+ COPY . /code/
22
+ CMD bundle exec irb -rmini_racer
23
+
@@ -0,0 +1,69 @@
1
+ jobs:
2
+ - template: azure-template.yml
3
+ parameters:
4
+ name: linux_2_0
5
+ displayName: Linux Ruby 2.0
6
+ rubyVersion: '2.0'
7
+ publishCoverage: true
8
+
9
+ - template: azure-template.yml
10
+ parameters:
11
+ name: linux_2_1
12
+ displayName: Linux Ruby 2.1
13
+ rubyVersion: '2.1'
14
+
15
+ - template: azure-template.yml
16
+ parameters:
17
+ name: linux_2_2
18
+ displayName: Linux Ruby 2.2
19
+ rubyVersion: '2.2'
20
+
21
+ - template: azure-template.yml
22
+ parameters:
23
+ name: linux_2_3
24
+ displayName: Linux Ruby 2.3
25
+ rubyVersion: '2.3'
26
+
27
+ - template: azure-template.yml
28
+ parameters:
29
+ name: linux_2_4
30
+ displayName: Linux Ruby 2.4
31
+ rubyVersion: '2.4'
32
+
33
+ - template: azure-template.yml
34
+ parameters:
35
+ name: linux_2_5
36
+ displayName: Linux Ruby 2.5
37
+ rubyVersion: '2.5'
38
+
39
+ - template: azure-template.yml
40
+ parameters:
41
+ name: linux_2_6
42
+ displayName: Linux Ruby 2.6
43
+ rubyVersion: '2.6'
44
+
45
+ - template: azure-template.yml
46
+ parameters:
47
+ name: linux_2_7
48
+ displayName: Linux Ruby 2.7
49
+ rubyVersion: '2.7'
50
+
51
+ - template: azure-template.yml
52
+ parameters:
53
+ name: linux_2_7_mini_racer
54
+ displayName: Linux Ruby 2.7 (with mini_racer)
55
+ rubyVersion: '2.7'
56
+ with_mini_racer: true
57
+
58
+ - template: azure-template.yml
59
+ parameters:
60
+ name: linux_2_7_therubyracer
61
+ displayName: Linux Ruby 2.7 (with therubyracer)
62
+ rubyVersion: '2.7'
63
+ with_therubyracer: true
64
+
65
+ - template: azure-template.yml
66
+ parameters:
67
+ name: macos_10_15
68
+ displayName: MacOS 10.15
69
+ imageName: 'macos-10.15'
@@ -0,0 +1,92 @@
1
+ parameters:
2
+ name: ~
3
+ displayName: ~
4
+ rubyVersion: bundled
5
+ imageName: ubuntu-18.04
6
+ publishCoverage: false
7
+ with_mini_racer: false
8
+ with_therubyracer: false
9
+
10
+ jobs:
11
+ - job: ${{ parameters.name }}
12
+ displayName: ${{ parameters.displayName }}
13
+ pool:
14
+ vmImage: ${{ parameters.imageName }}
15
+
16
+ variables:
17
+ TESTOPTS: -v
18
+ ${{ if eq(parameters.publishCoverage, true) }}:
19
+ CPPFLAGS: --coverage
20
+ LDFLAGS: --coverage
21
+ ${{ if eq(parameters.rubyVersion, 'bundled') }}:
22
+ gem: gem
23
+ bundle: bundle
24
+ ${{ if ne(parameters.rubyVersion, 'bundled') }}:
25
+ gem: /opt/ruby/${{ parameters.rubyVersion }}/bin/gem
26
+ bundle: /opt/ruby/${{ parameters.rubyVersion }}/bin/bundle
27
+ GEM_HOME: /opt/ruby/${{ parameters.rubyVersion }}/lib/ruby/gems/${{ parameters.rubyVersion }}.0
28
+
29
+ steps:
30
+ - checkout: self
31
+ displayName: Checkout
32
+ clean: true
33
+ submodules: recursive
34
+
35
+ - ${{ if ne(parameters.rubyVersion, 'bundled') }}:
36
+ - script: |
37
+ sudo apt-get install -y gnupg
38
+ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 5D98E7264E3F3D89463B314B12229434A9F003C9
39
+ echo deb [arch=amd64] http://sqreen-download-private.s3.amazonaws.com/deb bionic main | sudo tee -a /etc/apt/sources.list
40
+ sudo apt-get update
41
+ sudo apt-get install -y sq-ruby${{ parameters.rubyVersion }} ruby-
42
+ displayName: Install Ruby
43
+
44
+ - ${{ if eq(parameters.rubyVersion, 'bundled') }}:
45
+ - script: sudo $(gem) install bundler --version '< 2.0' --no-document
46
+ displayName: Install bundler
47
+
48
+ - ${{ if eq(parameters.imageName, 'ubuntu-18.04') }}:
49
+ - script: |
50
+ sudo apt-get install -y build-essential git curl valgrind g++ make
51
+ displayName: Install Linux packages
52
+
53
+ - script: $(bundle) install --path vendor/bundle
54
+ displayName: Install gem dependencies
55
+ env:
56
+ ${{ if eq(parameters.with_mini_racer, true) }}:
57
+ LOAD_MINI_RACER: 1
58
+ ${{ if eq(parameters.with_therubyracer, true) }}:
59
+ LOAD_THERUBYRACER: 1
60
+
61
+ - script: PATH=`dirname $(bundle)`:$PATH CPPFLAGS=$(CPPFLAGS) LDFLAGS=$(LDFLAGS) $(bundle) exec rake compile
62
+ displayName: Compile extension
63
+
64
+ - script: |
65
+ find . -name '*.log' -exec cat '{}' \;
66
+ displayName: Print logs
67
+ condition: failed()
68
+
69
+ - script: $(bundle) exec rake test
70
+ displayName: Run tests
71
+ env:
72
+ ${{ if eq(parameters.with_mini_racer, true) }}:
73
+ LOAD_MINI_RACER: 1
74
+ ${{ if eq(parameters.with_therubyracer, true) }}:
75
+ LOAD_THERUBYRACER: 1
76
+
77
+ - ${{ if and(eq(parameters.imageName, 'ubuntu-18.04'), eq(parameters.with_mini_racer, false), eq(parameters.with_therubyracer, false)) }}:
78
+ - script: $(bundle) exec rake test:valgrind
79
+ displayName: Run tests w/ valgrind
80
+
81
+ - script: |
82
+ PATH=$PATH:$(dirname $(which $(gem)))
83
+ $(bundle) exec rake build
84
+ sudo PATH=$PATH $(gem) install pkg/*.gem
85
+ displayName: Check that the gem is installable
86
+
87
+ - ${{ if eq(parameters.publishCoverage, true) }}:
88
+ - bash: >
89
+ test -z "$CODECOV_TOKEN" || bash <(curl -s https://codecov.io/bash)
90
+ displayName: "Publish coverage (Codecov)"
91
+ env:
92
+ CODECOV_TOKEN: $(CODECOV_TOKEN)
@@ -26,46 +26,58 @@ def cppflags_add_cpu_extension!
26
26
  end
27
27
 
28
28
  def libv8_gem_name
29
- return "libv8-solaris" if IS_SOLARIS
30
- return "libv8-alpine" if IS_LINUX_MUSL
29
+ #return "libv8-solaris" if IS_SOLARIS
30
+ #return "libv8-alpine" if IS_LINUX_MUSL
31
31
 
32
- 'libv8'
32
+ 'libv8-node'
33
33
  end
34
34
 
35
- def libv8_version
36
- '7.3.492.27.1'
35
+ def libv8_requirement
36
+ '~> 12.18.4.0.beta1'
37
37
  end
38
38
 
39
- def libv8_basename
40
- "#{libv8_gem_name}-#{libv8_version}-#{ruby_platform}"
39
+ def libv8_basename(version)
40
+ "#{libv8_gem_name}-#{version}-#{ruby_platform}"
41
41
  end
42
42
 
43
- def libv8_gemspec
44
- "#{libv8_basename}.gemspec"
43
+ def libv8_gemspec(version)
44
+ "#{libv8_basename(version)}.gemspec"
45
45
  end
46
46
 
47
47
  def libv8_local_path(path=Gem.path)
48
- puts "looking for #{libv8_gemspec} in installed gems"
49
- candidates = path.map { |p| File.join(p, 'specifications', libv8_gemspec) }
50
- found = candidates.select { |f| File.exist?(f) }.first
48
+ name_glob = "#{libv8_gem_name}-*-#{ruby_platform}"
51
49
 
52
- unless found
53
- puts "#{libv8_gemspec} not found in installed gems"
50
+ puts "looking for #{name_glob} in #{path.inspect}"
51
+
52
+ paths = path.map { |p| Dir.glob(File.join(p, 'specifications', name_glob + '.gemspec')) }.flatten
53
+
54
+ if paths.empty?
55
+ puts "#{name_glob} not found in #{path.inspect}"
56
+ return
57
+ end
58
+
59
+ specs = paths.map { |p| [p, eval(File.read(p))] }
60
+ .select { |_, spec| Gem::Requirement.new(libv8_requirement).satisfied_by?(spec.version) }
61
+ found_path, found_spec = specs.sort_by { |_, spec| spec.version }.last
62
+
63
+ unless found_path && found_spec
64
+ puts "not found in specs: no '#{libv8_requirement}' in #{paths.inspect}"
54
65
  return
55
66
  end
56
67
 
57
- puts "found in installed specs: #{found}"
68
+ puts "found in specs: #{found_path}"
58
69
 
59
- dir = File.expand_path(File.join(found, '..', '..', 'gems', libv8_basename))
70
+ gemdir = File.basename(found_path, '.gemspec')
71
+ dir = File.expand_path(File.join(found_path, '..', '..', 'gems', gemdir))
60
72
 
61
73
  unless Dir.exist?(dir)
62
- puts "not found in installed gems: #{dir}"
74
+ puts "not found in gems: #{dir}"
63
75
  return
64
76
  end
65
77
 
66
- puts "found in installed gems: #{dir}"
78
+ puts "found in gems: #{dir}"
67
79
 
68
- dir
80
+ [dir, found_spec]
69
81
  end
70
82
 
71
83
  def vendor_path
@@ -73,26 +85,12 @@ def vendor_path
73
85
  end
74
86
 
75
87
  def libv8_vendor_path
76
- puts "looking for #{libv8_basename} in #{vendor_path}"
77
- path = Dir.glob("#{vendor_path}/#{libv8_basename}").first
78
-
79
- unless path
80
- puts "#{libv8_basename} not found in #{vendor_path}"
81
- return
82
- end
83
-
84
- puts "looking for #{libv8_basename}/lib/libv8.rb in #{vendor_path}"
85
- unless Dir.glob(File.join(vendor_path, libv8_basename, 'lib', 'libv8.rb')).first
86
- puts "#{libv8_basename}/lib/libv8.rb not found in #{vendor_path}"
87
- return
88
- end
89
-
90
- path
88
+ libv8_local_path([vendor_path])
91
89
  end
92
90
 
93
91
  def parse_platform(str)
94
92
  Gem::Platform.new(str).tap do |p|
95
- p.instance_eval { @os = 'linux-musl' } if str =~ /musl/
93
+ p.instance_eval { @version = 'musl' } if str =~ /-musl/ && p.version.nil?
96
94
  p.instance_eval { @cpu = 'x86_64' } if str =~ /universal.*darwin/
97
95
  end
98
96
  end
@@ -116,21 +114,23 @@ def libv8_remote_search
116
114
  json = JSON.parse(body)
117
115
 
118
116
  versions = json.select do |v|
119
- Gem::Version.new(v['number']) == Gem::Version.new(libv8_version)
117
+ Gem::Requirement.new(libv8_requirement).satisfied_by?(Gem::Version.new(v['number']))
120
118
  end
121
119
  abort(<<-ERROR) if versions.empty?
122
- ERROR: could not find #{libv8_version}
120
+ ERROR: could not find #{libv8_gem_name} (requirement #{libv8_requirement}) in rubygems.org
123
121
  ERROR
124
122
 
125
123
  platform_versions = versions.select do |v|
126
124
  parse_platform(v['platform']) == ruby_platform unless v['platform'] =~ /universal.*darwin/
127
125
  end
128
126
  abort(<<-ERROR) if platform_versions.empty?
129
- ERROR: found #{libv8_gem_name}-#{libv8_version}, but no binary for #{ruby_platform}
130
- try "gem install #{libv8_gem_name} -v '#{libv8_version}'" to attempt to build libv8 from source
127
+ ERROR: found gems matching #{libv8_gem_name}:'#{libv8_requirement}', but no binary for #{ruby_platform}
128
+ try "gem install #{libv8_gem_name}:'#{libv8_requirement}'" to attempt to build #{libv8_gem_name} from source
131
129
  ERROR
132
130
 
133
- platform_versions.first
131
+ puts "found #{libv8_gem_name} for #{ruby_platform} on rubygems: #{platform_versions.map { |v| v['number'] }.join(', ')}"
132
+
133
+ platform_versions.sort_by { |v| Gem::Version.new(v['number']) }.last
134
134
  end
135
135
 
136
136
  def libv8_download_uri(name, version, platform)
@@ -142,19 +142,19 @@ def libv8_downloaded_gem(name, version, platform)
142
142
  end
143
143
 
144
144
  def libv8_download(name, version, platform)
145
- FileUtils.mkdir_p(vendor_path)
145
+ FileUtils.mkdir_p(File.join(vendor_path, 'cache'))
146
146
  body = http_get(libv8_download_uri(name, version, platform))
147
- File.open(File.join(vendor_path, libv8_downloaded_gem(name, version, platform)), 'wb') { |f| f.write(body) }
147
+ File.open(File.join(vendor_path, 'cache', libv8_downloaded_gem(name, version, platform)), 'wb') { |f| f.write(body) }
148
148
  end
149
149
 
150
150
  def libv8_install!
151
- cmd = "gem install #{libv8_gem_name} --version '#{libv8_version}' --install-dir '#{vendor_path}'"
151
+ cmd = "gem install #{libv8_gem_name} --version '#{libv8_requirement}' --install-dir '#{vendor_path}'"
152
152
  puts "installing #{libv8_gem_name} using `#{cmd}`"
153
153
  rc = system(cmd)
154
154
 
155
155
  abort(<<-ERROR) unless rc
156
- ERROR: could not install #{libv8_gem_name} #{libv8_version}
157
- try "gem install #{libv8_gem_name} -v '#{libv8_version}'" to attempt to build libv8 from source
156
+ ERROR: could not install #{libv8_gem_name}:#{libv8_requirement}
157
+ try "gem install #{libv8_gem_name} -v '#{libv8_requirement}'" to attempt to build libv8 from source
158
158
  ERROR
159
159
 
160
160
  libv8_local_path([vendor_path])
@@ -168,16 +168,21 @@ def libv8_vendor!
168
168
  puts "downloading #{libv8_downloaded_gem(libv8_gem_name, version['number'], version['platform'])} to #{vendor_path}"
169
169
  libv8_download(libv8_gem_name, version['number'], version['platform'])
170
170
 
171
- package = Gem::Package.new(File.join(vendor_path, libv8_downloaded_gem(libv8_gem_name, version['number'], version['platform'])))
172
- package.extract_files(File.join(vendor_path, File.basename(libv8_downloaded_gem(libv8_gem_name, version['number'], version['platform']), '.gem')))
171
+ package = Gem::Package.new(File.join(vendor_path, 'cache', libv8_downloaded_gem(libv8_gem_name, version['number'], version['platform'])))
172
+ package.extract_files(File.join(vendor_path, 'gems', File.basename(libv8_downloaded_gem(libv8_gem_name, version['number'], version['platform']), '.gem')))
173
+ FileUtils.mkdir_p(File.join(vendor_path, 'specifications'))
174
+ File.open(File.join(vendor_path, 'specifications', File.basename(libv8_downloaded_gem(libv8_gem_name, version['number'], version['platform']), '.gem') + '.gemspec'), 'wb') { |f| f.write(package.spec.to_ruby) }
173
175
 
174
176
  libv8_vendor_path
175
177
  end
176
178
 
177
179
  def ensure_libv8_load_path
178
- puts "detected platform #{RUBY_PLATFORM} => #{ruby_platform}"
180
+ puts "platform ruby:#{RUBY_PLATFORM} rubygems:#{Gem::Platform.new(RUBY_PLATFORM)} detected:#{ruby_platform}"
179
181
 
180
- libv8_path = libv8_local_path || libv8_vendor_path || libv8_vendor!
182
+ libv8_path, spec = libv8_local_path
183
+ if !ENV['ONLY_INSTALLED_LIBV8_GEM'] && !libv8_path
184
+ libv8_path, spec = libv8_vendor_path || libv8_vendor!
185
+ end
181
186
 
182
187
  abort(<<-ERROR) unless libv8_path
183
188
  ERROR: could not find #{libv8_gem_name}
@@ -189,7 +194,7 @@ end
189
194
 
190
195
  ensure_libv8_load_path
191
196
 
192
- require 'libv8'
197
+ require 'libv8-node'
193
198
 
194
199
  IS_DARWIN = RUBY_PLATFORM =~ /darwin/
195
200
 
@@ -208,6 +213,8 @@ cppflags_add_cpu_extension!
208
213
  $CPPFLAGS += " -Wno-reserved-user-defined-literal" if IS_DARWIN
209
214
 
210
215
  $LDFLAGS.insert(0, " -stdlib=libc++ ") if IS_DARWIN
216
+ $LDFLAGS += " -Wl,--no-undefined " unless IS_DARWIN
217
+ $LDFLAGS += " -Wl,-undefined,error " if IS_DARWIN
211
218
 
212
219
  if ENV['CXX']
213
220
  puts "SETTING CXX"
@@ -246,7 +253,7 @@ if enable_config('debug') || enable_config('asan')
246
253
  CONFIG['debugflags'] << ' -ggdb3 -O0'
247
254
  end
248
255
 
249
- Libv8.configure_makefile
256
+ Libv8::Node.configure_makefile
250
257
 
251
258
  if enable_config('asan')
252
259
  $CPPFLAGS.insert(0, " -fsanitize=address ")
@@ -2,6 +2,6 @@ module Sqreen
2
2
  module MiniRacer
3
3
  # part before qualifier is the number of the last upstream release
4
4
  # since we synced with it
5
- VERSION = "0.2.5.0.1.beta3"
5
+ VERSION = "0.2.5.0.2"
6
6
  end
7
7
  end
data/mini_racer.gemspec CHANGED
@@ -21,7 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.12"
25
24
  spec.add_development_dependency "rake", "~> 10.0"
26
25
  spec.add_development_dependency "minitest", "~> 5.0"
27
26
  spec.add_development_dependency "rake-compiler"
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sq_mini_racer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5.0.1.beta3
4
+ version: 0.2.5.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-28 00:00:00.000000000 Z
11
+ date: 2020-12-16 00:00:00.000000000 Z
12
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
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -75,14 +61,18 @@ extensions:
75
61
  - ext/prv_ext_loader/extconf.rb
76
62
  extra_rdoc_files: []
77
63
  files:
64
+ - ".dockerignore"
78
65
  - ".gitignore"
79
66
  - ".travis.yml"
80
67
  - CHANGELOG
81
68
  - CODE_OF_CONDUCT.md
69
+ - Dockerfile
82
70
  - Gemfile
83
71
  - LICENSE.txt
84
72
  - README.md
85
73
  - Rakefile
74
+ - azure-pipelines.yml
75
+ - azure-template.yml
86
76
  - bin/console
87
77
  - bin/setup
88
78
  - ext/mini_racer_extension/compat.hpp
@@ -99,7 +89,7 @@ homepage: https://github.com/sqreen/mini_racer
99
89
  licenses:
100
90
  - MIT
101
91
  metadata: {}
102
- post_install_message:
92
+ post_install_message:
103
93
  rdoc_options: []
104
94
  require_paths:
105
95
  - lib
@@ -111,13 +101,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
101
  version: 1.9.3
112
102
  required_rubygems_version: !ruby/object:Gem::Requirement
113
103
  requirements:
114
- - - ">"
104
+ - - ">="
115
105
  - !ruby/object:Gem::Version
116
- version: 1.3.1
106
+ version: '0'
117
107
  requirements: []
118
- rubyforge_project:
119
- rubygems_version: 2.7.7
120
- signing_key:
108
+ rubygems_version: 3.1.3
109
+ signing_key:
121
110
  specification_version: 4
122
111
  summary: Minimal embedded v8 for Ruby
123
112
  test_files: []