File tree Expand file tree Collapse file tree 3 files changed +68
-1
lines changed
Expand file tree Collapse file tree 3 files changed +68
-1
lines changed Original file line number Diff line number Diff line change 11source 'https://rubygems.org'
22gemspec
3+
4+ group :repl do
5+ gem "therubyracer" , :require => 'v8'
6+ end
Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments