Sha256: 07c77c79e8dfe90d8824d29887fd5ba037eb832a7b8e098776fdf945fb47dcfc
Contents?: true
Size: 1.35 KB
Versions: 8
Compression:
Stored size: 1.35 KB
Contents
#!/usr/bin/env ruby require 'opal' module Opal class V8Context def initialize @builder = Opal::Builder.new end def run(filename = nil) return if @v8 begin require 'v8' rescue LoadError abort 'therubyracer must be installed' end @v8 = V8::Context.new @v8['console'] = self @v8.eval @builder.build 'opal' if filename if File.exist? filename eval_ruby File.read(filename) else fail "file does not exist: #{filename}" end end run_repl end def log(*str) puts(*str) end def run_repl require 'readline' loop do # on SIGINT lets just return from the loop.. trap("SIGINT") { finish; return } line = Readline.readline '>> ', true # if we type exit, then we need to close down context if line == "exit" or line.nil? break end puts "=> #{eval_ruby line}" end finish end def eval_ruby(str) code = @builder.build_str str, :irb => true, :const_missing => true @v8.eval "var $_result = #{code} ($_result == null ? 'nil' : $_result.$inspect());" rescue => e puts "#{e.message}\n\t#{e.backtrace.join("\n\t")}" end def finish @v8 = nil end end end Opal::V8Context.new.run ARGV.first
Version data entries
8 entries across 8 versions & 1 rubygems