Skip to content

Commit d885f24

Browse files
committed
Add bin/opal-repl for simple repl
1 parent 6969618 commit d885f24

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed

Gemfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
11
source 'https://rubygems.org'
22
gemspec
3+
4+
group :repl do
5+
gem "therubyracer", :require => 'v8'
6+
end

bin/opal-repl

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/usr/bin/env ruby
2+
3+
require 'opal'
4+
5+
module Opal
6+
class V8Context
7+
def initialize
8+
@builder = Opal::Builder.new
9+
end
10+
11+
def run
12+
return if @v8
13+
14+
begin
15+
require 'v8'
16+
rescue LoadError
17+
abort 'therubyracer must be installed'
18+
end
19+
20+
@v8 = V8::Context.new
21+
@v8['console'] = self
22+
@v8.eval @builder.build 'opal'
23+
24+
run_repl
25+
end
26+
27+
def log(*str)
28+
puts(*str)
29+
end
30+
31+
def run_repl
32+
require 'readline'
33+
34+
loop do
35+
# on SIGINT lets just return from the loop..
36+
trap("SIGINT") { finish; return }
37+
line = Readline.readline '>> ', true
38+
39+
# if we type exit, then we need to close down context
40+
if line == "exit"
41+
break
42+
end
43+
44+
puts "=> #{eval_ruby line}"
45+
end
46+
47+
finish
48+
end
49+
50+
def eval_ruby(str)
51+
code = @builder.build_str str, :irb => true
52+
@v8.eval "var $_result = #{code} $_result.$inspect();"
53+
rescue => e
54+
puts "#{e.message}\n\t#{e.backtrace.join("\n\t")}"
55+
end
56+
57+
def finish
58+
@v8 = nil
59+
end
60+
end
61+
end
62+
63+
Opal::V8Context.new.run

opal.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
1313
s.description = 'Ruby runtime and core library for javascript.'
1414

1515
s.files = `git ls-files`.split("\n")
16-
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
16+
s.executables = ['opal']
1717
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
1818
s.require_paths = ['lib']
1919

0 commit comments

Comments
 (0)