Sha256: 37806498b567ba948af031640242abae6d3d79f4407cff5e589f5439d490ccc6

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

require 'v8'
require 'ruby_on_ruby/console'
require 'ruby_on_ruby/ruby_stream'
require 'ruby_on_ruby/file_loader'

module RubyOnRuby
  class Context
    attr_accessor :v8_context

    def initialize
      self.v8_context = V8::Context.new
      v8_context['console'] = Console.new # Mock out `console`.
      FileLoader.setup(v8_context) # Mock out XMLHttpRequest to allow loading of Ruby Standard Library files.
      v8_context.load(File.expand_path("../../../vendor/javascripts/emscripted-ruby/ruby.closure.js", __FILE__)) # Load Ruby itself.
      @input = RubyStream.new(STDIN)
      @output = RubyStream.new(STDOUT)
      @error = RubyStream.new(STDERR)
      v8_context['input'] = @input.input
      v8_context['output'] = @output.output
      v8_context['error'] = @error.output
      v8_context.eval "Ruby.initialize(input, output, error)"
    end

    def eval(str)
      @v8_context['lastInput'] = str
      @v8_context.eval "Ruby.stringify(Ruby.eval(lastInput))"
    end

    def js_eval(str)
      @v8_context.eval str
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ruby_on_ruby-0.0.1 lib/ruby_on_ruby/context.rb