mini_racer 0.3.1 → 0.4.0.beta1
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 +4 -4
- data/.dockerignore +12 -0
- data/.github/workflows/ci.yml +80 -0
- data/.gitignore +1 -0
- data/.travis.yml +18 -4
- data/CHANGELOG +8 -1
- data/Dockerfile +21 -0
- data/README.md +1 -1
- data/Rakefile +1 -0
- data/ext/mini_racer_extension/extconf.rb +9 -2
- data/ext/mini_racer_extension/mini_racer_extension.cc +18 -4
- data/ext/mini_racer_loader/extconf.rb +8 -0
- data/ext/mini_racer_loader/mini_racer_loader.c +123 -0
- data/lib/mini_racer.rb +11 -1
- data/lib/mini_racer/version.rb +2 -1
- data/mini_racer.gemspec +2 -2
- metadata +17 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c805c80e637874adae6cd80514e54a7e56bccb744ba3f3951fb1b8a575dd306f
|
4
|
+
data.tar.gz: 25721453b4d1fb59056bec90ca12363ce5f05c78fc984b5ee0c3007311d96b8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad2122baf3beb6e14861a5c1d5a8d50884ea803e6a59a6c62e72e6041b010da075d260c76e18f913cdcf30974d47ed013321f2660de204a06f8140d8cb313d87
|
7
|
+
data.tar.gz: 1462cae8c8d61310db4e6a1484c2d7526c2b69005b6fd42254dde1682c75f8e3d1d8eda1bac59811dbce8aae89ba195f0d4f808c2315906110b99e031d73369b
|
data/.dockerignore
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
name: Test
|
2
|
+
on:
|
3
|
+
- push
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test-darwin:
|
7
|
+
strategy:
|
8
|
+
fail-fast: false
|
9
|
+
matrix:
|
10
|
+
os:
|
11
|
+
- '10.15'
|
12
|
+
- '11.0'
|
13
|
+
platform:
|
14
|
+
- x86_64
|
15
|
+
# arm64
|
16
|
+
name: Test (darwin)
|
17
|
+
runs-on: macos-${{ matrix.os }}
|
18
|
+
steps:
|
19
|
+
- name: Checkout
|
20
|
+
uses: actions/checkout@v2
|
21
|
+
- name: Bundle
|
22
|
+
run: bundle install
|
23
|
+
- name: Compile
|
24
|
+
run: bundle exec rake compile
|
25
|
+
- name: Test
|
26
|
+
run: bundle exec rake test
|
27
|
+
test-linux:
|
28
|
+
strategy:
|
29
|
+
fail-fast: false
|
30
|
+
matrix:
|
31
|
+
ruby:
|
32
|
+
- '2.4'
|
33
|
+
- '2.5'
|
34
|
+
- '2.6'
|
35
|
+
- '2.7'
|
36
|
+
- '3.0'
|
37
|
+
platform:
|
38
|
+
- amd64
|
39
|
+
- arm64
|
40
|
+
# arm
|
41
|
+
# ppc64le
|
42
|
+
# s390x
|
43
|
+
libc:
|
44
|
+
- gnu
|
45
|
+
- musl
|
46
|
+
name: Test (linux)
|
47
|
+
runs-on: ubuntu-20.04
|
48
|
+
steps:
|
49
|
+
- name: Enable ${{ matrix.platform }} platform
|
50
|
+
id: qemu
|
51
|
+
if: ${{ matrix.platform != 'amd64' }}
|
52
|
+
run: |
|
53
|
+
docker run --privileged --rm tonistiigi/binfmt:latest --install ${{ matrix.platform }} | tee platforms.json
|
54
|
+
echo "::set-output name=platforms::$(cat platforms.json)"
|
55
|
+
- name: Start container
|
56
|
+
id: container
|
57
|
+
run: |
|
58
|
+
case ${{ matrix.libc }} in
|
59
|
+
gnu)
|
60
|
+
echo 'ruby:${{ matrix.ruby }}'
|
61
|
+
;;
|
62
|
+
musl)
|
63
|
+
echo 'ruby:${{ matrix.ruby }}-alpine'
|
64
|
+
;;
|
65
|
+
esac > container_image
|
66
|
+
echo "::set-output name=image::$(cat container_image)"
|
67
|
+
docker run --rm -d -v "${PWD}":"${PWD}" -w "${PWD}" --platform linux/${{ matrix.platform }} $(cat container_image) /bin/sleep 64d | tee container_id
|
68
|
+
docker exec -w "${PWD}" $(cat container_id) uname -a
|
69
|
+
echo "::set-output name=id::$(cat container_id)"
|
70
|
+
- name: Install Alpine system dependencies
|
71
|
+
if: ${{ matrix.libc == 'musl' }}
|
72
|
+
run: docker exec -w "${PWD}" ${{ steps.container.outputs.id }} apk add --no-cache build-base linux-headers bash python2 python3 git curl tar clang binutils-gold
|
73
|
+
- name: Checkout
|
74
|
+
uses: actions/checkout@v2
|
75
|
+
- name: Bundle
|
76
|
+
run: docker exec -w "${PWD}" ${{ steps.container.outputs.id }} bundle install
|
77
|
+
- name: Compile
|
78
|
+
run: docker exec -w "${PWD}" ${{ steps.container.outputs.id }} bundle exec rake compile
|
79
|
+
- name: Test
|
80
|
+
run: docker exec -w "${PWD}" ${{ steps.container.outputs.id }} bundle exec rake test
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,16 +1,30 @@
|
|
1
1
|
language: ruby
|
2
|
+
os: linux
|
2
3
|
rvm:
|
4
|
+
- 2.4
|
3
5
|
- 2.5
|
4
6
|
- 2.6
|
5
7
|
- 2.7
|
8
|
+
- 3.0
|
6
9
|
- ruby-head
|
7
|
-
|
10
|
+
arch:
|
11
|
+
- amd64
|
12
|
+
- arm64
|
13
|
+
jobs:
|
8
14
|
include:
|
9
|
-
- rvm: 2.5
|
15
|
+
- rvm: 2.5
|
10
16
|
os: osx
|
11
17
|
osx_image: xcode9.4
|
12
|
-
|
13
|
-
|
18
|
+
- rvm: 2.6
|
19
|
+
os: osx
|
20
|
+
osx_image: xcode11.3
|
21
|
+
- rvm: 2.6
|
22
|
+
os: osx
|
23
|
+
osx_image: xcode12.2
|
24
|
+
- rvm: 2.7
|
25
|
+
os: osx
|
26
|
+
osx_image: xcode12.2
|
27
|
+
dist: xenial
|
14
28
|
before_install:
|
15
29
|
- gem update --system
|
16
30
|
- gem install bundler -v 1.16.2
|
data/CHANGELOG
CHANGED
@@ -1,4 +1,11 @@
|
|
1
|
-
-
|
1
|
+
- 08-04-2021
|
2
|
+
|
3
|
+
- 0.4.0.beta1
|
4
|
+
|
5
|
+
- FIX: on downgrade mkmf was picking the wrong version of libv8, this fix will correct future issues
|
6
|
+
- FEATURE: upgraded libv8 to use node libv8 build which supports M1 and various ARM builds v8 moved to (8.6.395.17)
|
7
|
+
|
8
|
+
- 23-07-2020
|
2
9
|
|
3
10
|
- 0.3.1
|
4
11
|
|
data/Dockerfile
ADDED
@@ -0,0 +1,21 @@
|
|
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
|
+
COPY Gemfile mini_racer.gemspec /code/
|
12
|
+
COPY lib/mini_racer/version.rb /code/lib/mini_racer/version.rb
|
13
|
+
WORKDIR /code
|
14
|
+
RUN bundle install
|
15
|
+
|
16
|
+
COPY Rakefile /code/
|
17
|
+
COPY ext /code/ext/
|
18
|
+
RUN bundle exec rake compile
|
19
|
+
|
20
|
+
COPY . /code/
|
21
|
+
CMD bundle exec irb -rmini_racer
|
data/README.md
CHANGED
@@ -249,7 +249,7 @@ It is possible to set V8 Runtime flags:
|
|
249
249
|
MiniRacer::Platform.set_flags! :noconcurrent_recompilation, max_inlining_levels: 10
|
250
250
|
```
|
251
251
|
|
252
|
-
This can come in handy if you want to use MiniRacer with Unicorn, which doesn't seem to
|
252
|
+
This can come in handy if you want to use MiniRacer with Unicorn, which doesn't seem to always appreciate V8's liberal use of threading:
|
253
253
|
```ruby
|
254
254
|
MiniRacer::Platform.set_flags! :noconcurrent_recompilation, :noconcurrent_sweeping
|
255
255
|
```
|
data/Rakefile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'mkmf'
|
2
|
-
|
2
|
+
require_relative '../../lib/mini_racer/version'
|
3
|
+
gem 'libv8-node', MiniRacer::LIBV8_NODE_VERSION
|
4
|
+
require 'libv8-node'
|
3
5
|
|
4
6
|
IS_DARWIN = RUBY_PLATFORM =~ /darwin/
|
5
7
|
|
@@ -12,11 +14,16 @@ $CPPFLAGS += " -fPIC" unless $CPPFLAGS.split.include? "-rdynamic" or IS_DARWIN
|
|
12
14
|
$CPPFLAGS += " -std=c++0x"
|
13
15
|
$CPPFLAGS += " -fpermissive"
|
14
16
|
$CPPFLAGS += " -DV8_COMPRESS_POINTERS"
|
17
|
+
$CPPFLAGS += " -fvisibility=hidden "
|
15
18
|
|
16
19
|
$CPPFLAGS += " -Wno-reserved-user-defined-literal" if IS_DARWIN
|
17
20
|
|
18
21
|
$LDFLAGS.insert(0, " -stdlib=libc++ ") if IS_DARWIN
|
19
22
|
|
23
|
+
# check for missing symbols at link time
|
24
|
+
# $LDFLAGS += " -Wl,--no-undefined " unless IS_DARWIN
|
25
|
+
# $LDFLAGS += " -Wl,-undefined,error " if IS_DARWIN
|
26
|
+
|
20
27
|
if ENV['CXX']
|
21
28
|
puts "SETTING CXX"
|
22
29
|
CONFIG['CXX'] = ENV['CXX']
|
@@ -54,7 +61,7 @@ if enable_config('debug') || enable_config('asan')
|
|
54
61
|
CONFIG['debugflags'] << ' -ggdb3 -O0'
|
55
62
|
end
|
56
63
|
|
57
|
-
Libv8.configure_makefile
|
64
|
+
Libv8::Node.configure_makefile
|
58
65
|
|
59
66
|
if enable_config('asan')
|
60
67
|
$CPPFLAGS.insert(0, " -fsanitize=address ")
|
@@ -156,7 +156,8 @@ static std::mutex platform_lock;
|
|
156
156
|
|
157
157
|
static pthread_attr_t *thread_attr_p;
|
158
158
|
static pthread_rwlock_t exit_lock = PTHREAD_RWLOCK_INITIALIZER;
|
159
|
-
static bool ruby_exiting; // guarded by exit_lock
|
159
|
+
static bool ruby_exiting = false; // guarded by exit_lock
|
160
|
+
static bool single_threaded = false;
|
160
161
|
|
161
162
|
static VALUE rb_platform_set_flag_as_str(VALUE _klass, VALUE flag_as_str) {
|
162
163
|
bool platform_already_initialized = false;
|
@@ -169,6 +170,9 @@ static VALUE rb_platform_set_flag_as_str(VALUE _klass, VALUE flag_as_str) {
|
|
169
170
|
platform_lock.lock();
|
170
171
|
|
171
172
|
if (current_platform == NULL) {
|
173
|
+
if (!strcmp(RSTRING_PTR(flag_as_str), "--single_threaded")) {
|
174
|
+
single_threaded = true;
|
175
|
+
}
|
172
176
|
V8::SetFlagsFromString(RSTRING_PTR(flag_as_str), (int)RSTRING_LEN(flag_as_str));
|
173
177
|
} else {
|
174
178
|
platform_already_initialized = true;
|
@@ -1221,11 +1225,16 @@ IsolateInfo::~IsolateInfo() {
|
|
1221
1225
|
"it can not be disposed and memory will not be "
|
1222
1226
|
"reclaimed till the Ruby process exits.\n");
|
1223
1227
|
} else {
|
1224
|
-
if (this->pid != getpid()) {
|
1228
|
+
if (this->pid != getpid() && !single_threaded) {
|
1225
1229
|
fprintf(stderr, "WARNING: V8 isolate was forked, "
|
1226
1230
|
"it can not be disposed and "
|
1227
1231
|
"memory will not be reclaimed "
|
1228
|
-
"till the Ruby process exits.\n"
|
1232
|
+
"till the Ruby process exits.\n"
|
1233
|
+
"It is VERY likely your process will hang.\n"
|
1234
|
+
"If you wish to use v8 in forked environment "
|
1235
|
+
"please ensure the platform is initialized with:\n"
|
1236
|
+
"MiniRacer::Platform.set_flags! :single_threaded\n"
|
1237
|
+
);
|
1229
1238
|
} else {
|
1230
1239
|
isolate->Dispose();
|
1231
1240
|
}
|
@@ -1640,6 +1649,7 @@ static void set_ruby_exiting(VALUE value) {
|
|
1640
1649
|
(void)value;
|
1641
1650
|
|
1642
1651
|
int res = pthread_rwlock_wrlock(&exit_lock);
|
1652
|
+
|
1643
1653
|
ruby_exiting = true;
|
1644
1654
|
if (res == 0) {
|
1645
1655
|
pthread_rwlock_unlock(&exit_lock);
|
@@ -1648,7 +1658,7 @@ static void set_ruby_exiting(VALUE value) {
|
|
1648
1658
|
|
1649
1659
|
extern "C" {
|
1650
1660
|
|
1651
|
-
void Init_mini_racer_extension ( void )
|
1661
|
+
__attribute__((visibility("default"))) void Init_mini_racer_extension ( void )
|
1652
1662
|
{
|
1653
1663
|
VALUE rb_mMiniRacer = rb_define_module("MiniRacer");
|
1654
1664
|
rb_cContext = rb_define_class_under(rb_mMiniRacer, "Context", rb_cObject);
|
@@ -1710,5 +1720,9 @@ extern "C" {
|
|
1710
1720
|
thread_attr_p = &attr;
|
1711
1721
|
}
|
1712
1722
|
}
|
1723
|
+
auto on_fork_for_child = []() {
|
1724
|
+
exit_lock = PTHREAD_RWLOCK_INITIALIZER;
|
1725
|
+
};
|
1726
|
+
pthread_atfork(nullptr, nullptr, on_fork_for_child);
|
1713
1727
|
}
|
1714
1728
|
}
|
@@ -0,0 +1,123 @@
|
|
1
|
+
#include <ruby.h>
|
2
|
+
#include <dlfcn.h>
|
3
|
+
#include <string.h>
|
4
|
+
#include <stdint.h>
|
5
|
+
#include <stdlib.h>
|
6
|
+
|
7
|
+
// Load a Ruby extension like Ruby does, only with flags that:
|
8
|
+
// a) hide symbols from other extensions (RTLD_LOCAL)
|
9
|
+
// b) bind symbols tightly (RTLD_DEEPBIND, when available)
|
10
|
+
|
11
|
+
void Init_mini_racer_loader(void);
|
12
|
+
|
13
|
+
static void *_dln_load(const char *file);
|
14
|
+
|
15
|
+
static VALUE _load_shared_lib(VALUE self, volatile VALUE fname)
|
16
|
+
{
|
17
|
+
(void) self;
|
18
|
+
|
19
|
+
// check that path is not tainted
|
20
|
+
SafeStringValue(fname);
|
21
|
+
|
22
|
+
FilePathValue(fname);
|
23
|
+
VALUE path = rb_str_encode_ospath(fname);
|
24
|
+
|
25
|
+
char *loc = StringValueCStr(path);
|
26
|
+
void *handle = _dln_load(loc);
|
27
|
+
|
28
|
+
return handle ? Qtrue : Qfalse;
|
29
|
+
}
|
30
|
+
|
31
|
+
// adapted from Ruby's dln.c
|
32
|
+
#define INIT_FUNC_PREFIX ((char[]) {'I', 'n', 'i', 't', '_'})
|
33
|
+
#define INIT_FUNCNAME(buf, file) do { \
|
34
|
+
const char *base = (file); \
|
35
|
+
const size_t flen = _init_funcname(&base); \
|
36
|
+
const size_t plen = sizeof(INIT_FUNC_PREFIX); \
|
37
|
+
char *const tmp = ALLOCA_N(char, plen + flen + 1); \
|
38
|
+
memcpy(tmp, INIT_FUNC_PREFIX, plen); \
|
39
|
+
memcpy(tmp+plen, base, flen); \
|
40
|
+
tmp[plen+flen] = '\0'; \
|
41
|
+
*(buf) = tmp; \
|
42
|
+
} while(0)
|
43
|
+
|
44
|
+
// adapted from Ruby's dln.c
|
45
|
+
static size_t _init_funcname(const char **file)
|
46
|
+
{
|
47
|
+
const char *p = *file,
|
48
|
+
*base,
|
49
|
+
*dot = NULL;
|
50
|
+
|
51
|
+
for (base = p; *p; p++) { /* Find position of last '/' */
|
52
|
+
if (*p == '.' && !dot) {
|
53
|
+
dot = p;
|
54
|
+
}
|
55
|
+
if (*p == '/') {
|
56
|
+
base = p + 1;
|
57
|
+
dot = NULL;
|
58
|
+
}
|
59
|
+
}
|
60
|
+
*file = base;
|
61
|
+
return (uintptr_t) ((dot ? dot : p) - base);
|
62
|
+
}
|
63
|
+
|
64
|
+
// adapted from Ruby's dln.c
|
65
|
+
static void *_dln_load(const char *file)
|
66
|
+
{
|
67
|
+
char *buf;
|
68
|
+
const char *error;
|
69
|
+
#define DLN_ERROR() (error = dlerror(), strcpy(ALLOCA_N(char, strlen(error) + 1), error))
|
70
|
+
|
71
|
+
void *handle;
|
72
|
+
void (*init_fct)(void);
|
73
|
+
|
74
|
+
INIT_FUNCNAME(&buf, file);
|
75
|
+
|
76
|
+
#ifndef RTLD_DEEPBIND
|
77
|
+
# define RTLD_DEEPBIND 0
|
78
|
+
#endif
|
79
|
+
/* Load file */
|
80
|
+
if ((handle = dlopen(file, RTLD_LAZY|RTLD_LOCAL|RTLD_DEEPBIND)) == NULL) {
|
81
|
+
DLN_ERROR();
|
82
|
+
goto failed;
|
83
|
+
}
|
84
|
+
#if defined(RUBY_EXPORT)
|
85
|
+
{
|
86
|
+
static const char incompatible[] = "incompatible library version";
|
87
|
+
void *ex = dlsym(handle, "ruby_xmalloc");
|
88
|
+
if (ex && ex != (void *) &ruby_xmalloc) {
|
89
|
+
|
90
|
+
# if defined __APPLE__
|
91
|
+
/* dlclose() segfaults */
|
92
|
+
rb_fatal("%s - %s", incompatible, file);
|
93
|
+
# else
|
94
|
+
dlclose(handle);
|
95
|
+
error = incompatible;
|
96
|
+
goto failed;
|
97
|
+
#endif
|
98
|
+
}
|
99
|
+
}
|
100
|
+
# endif
|
101
|
+
|
102
|
+
init_fct = (void (*)(void)) dlsym(handle, buf);
|
103
|
+
if (init_fct == NULL) {
|
104
|
+
error = DLN_ERROR();
|
105
|
+
dlclose(handle);
|
106
|
+
goto failed;
|
107
|
+
}
|
108
|
+
|
109
|
+
/* Call the init code */
|
110
|
+
(*init_fct)();
|
111
|
+
|
112
|
+
return handle;
|
113
|
+
|
114
|
+
failed:
|
115
|
+
rb_raise(rb_eLoadError, "%s", error);
|
116
|
+
}
|
117
|
+
|
118
|
+
__attribute__((visibility("default"))) void Init_mini_racer_loader()
|
119
|
+
{
|
120
|
+
VALUE mMiniRacer = rb_define_module("MiniRacer");
|
121
|
+
VALUE mLoader = rb_define_module_under(mMiniRacer, "Loader");
|
122
|
+
rb_define_singleton_method(mLoader, "load", _load_shared_lib, 1);
|
123
|
+
}
|
data/lib/mini_racer.rb
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
require "mini_racer/version"
|
2
|
-
require "
|
2
|
+
require "mini_racer_loader"
|
3
|
+
require "pathname"
|
4
|
+
|
5
|
+
ext_filename = "mini_racer_extension.#{RbConfig::CONFIG['DLEXT']}"
|
6
|
+
ext_path = Gem.loaded_specs['mini_racer'].require_paths
|
7
|
+
.map { |p| (p = Pathname.new(p)).absolute? ? p : Pathname.new(__dir__).parent + p }
|
8
|
+
ext_found = ext_path.map { |p| p + ext_filename }.find { |p| p.file? }
|
9
|
+
|
10
|
+
raise LoadError, "Could not find #{ext_filename} in #{ext_path.map(&:to_s)}" unless ext_found
|
11
|
+
MiniRacer::Loader.load(ext_found.to_s)
|
12
|
+
|
3
13
|
require "thread"
|
4
14
|
require "json"
|
5
15
|
|
data/lib/mini_racer/version.rb
CHANGED
data/mini_racer.gemspec
CHANGED
@@ -32,10 +32,10 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency "rake-compiler"
|
33
33
|
spec.add_development_dependency "m"
|
34
34
|
|
35
|
-
spec.add_dependency 'libv8',
|
35
|
+
spec.add_dependency 'libv8-node', MiniRacer::LIBV8_NODE_VERSION
|
36
36
|
spec.require_paths = ["lib", "ext"]
|
37
37
|
|
38
|
-
spec.extensions = ["ext/mini_racer_extension/extconf.rb"]
|
38
|
+
spec.extensions = ["ext/mini_racer_loader/extconf.rb", "ext/mini_racer_extension/extconf.rb"]
|
39
39
|
|
40
40
|
spec.required_ruby_version = '>= 2.3'
|
41
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_racer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -81,31 +81,35 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name: libv8
|
84
|
+
name: libv8-node
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 15.12.0.0.beta1
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 15.12.0.0.beta1
|
97
97
|
description: Minimal embedded v8 engine for Ruby
|
98
98
|
email:
|
99
99
|
- sam.saffron@gmail.com
|
100
100
|
executables: []
|
101
101
|
extensions:
|
102
|
+
- ext/mini_racer_loader/extconf.rb
|
102
103
|
- ext/mini_racer_extension/extconf.rb
|
103
104
|
extra_rdoc_files: []
|
104
105
|
files:
|
106
|
+
- ".dockerignore"
|
107
|
+
- ".github/workflows/ci.yml"
|
105
108
|
- ".gitignore"
|
106
109
|
- ".travis.yml"
|
107
110
|
- CHANGELOG
|
108
111
|
- CODE_OF_CONDUCT.md
|
112
|
+
- Dockerfile
|
109
113
|
- Gemfile
|
110
114
|
- LICENSE.txt
|
111
115
|
- README.md
|
@@ -114,6 +118,8 @@ files:
|
|
114
118
|
- bin/setup
|
115
119
|
- ext/mini_racer_extension/extconf.rb
|
116
120
|
- ext/mini_racer_extension/mini_racer_extension.cc
|
121
|
+
- ext/mini_racer_loader/extconf.rb
|
122
|
+
- ext/mini_racer_loader/mini_racer_loader.c
|
117
123
|
- lib/mini_racer.rb
|
118
124
|
- lib/mini_racer/version.rb
|
119
125
|
- mini_racer.gemspec
|
@@ -122,9 +128,9 @@ licenses:
|
|
122
128
|
- MIT
|
123
129
|
metadata:
|
124
130
|
bug_tracker_uri: https://github.com/discourse/mini_racer/issues
|
125
|
-
changelog_uri: https://github.com/discourse/mini_racer/blob/v0.
|
126
|
-
documentation_uri: https://www.rubydoc.info/gems/mini_racer/0.
|
127
|
-
source_code_uri: https://github.com/discourse/mini_racer/tree/v0.
|
131
|
+
changelog_uri: https://github.com/discourse/mini_racer/blob/v0.4.0.beta1/CHANGELOG
|
132
|
+
documentation_uri: https://www.rubydoc.info/gems/mini_racer/0.4.0.beta1
|
133
|
+
source_code_uri: https://github.com/discourse/mini_racer/tree/v0.4.0.beta1
|
128
134
|
post_install_message:
|
129
135
|
rdoc_options: []
|
130
136
|
require_paths:
|
@@ -137,11 +143,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
143
|
version: '2.3'
|
138
144
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
145
|
requirements:
|
140
|
-
- - "
|
146
|
+
- - ">"
|
141
147
|
- !ruby/object:Gem::Version
|
142
|
-
version:
|
148
|
+
version: 1.3.1
|
143
149
|
requirements: []
|
144
|
-
rubygems_version: 3.
|
150
|
+
rubygems_version: 3.2.2
|
145
151
|
signing_key:
|
146
152
|
specification_version: 4
|
147
153
|
summary: Minimal embedded v8 for Ruby
|