Module: V8::CLI

Defined in:
lib/v8/cli.rb

Defined Under Namespace

Classes: Shell

Class Method Summary collapse

Class Method Details

.load(cxt, libfile) ⇒ Object



53
54
55
56
57
58
59
60
61
62
# File 'lib/v8/cli.rb', line 53

def self.load(cxt, libfile)
  begin
    cxt.load(libfile)
  rescue V8::JSError => e
    puts e.message
    puts e.backtrace(:javascript)
  rescue StandardError => e
    puts e
  end
end

.repl(cxt, exename) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/v8/cli.rb', line 79

def self.repl(cxt, exename)
  require 'readline'
  puts "help() for help. quit() to quit."
  puts "The Ruby Racer #{V8::VERSION}"
  puts "Vroom Vroom!"      
  trap("SIGINT") do
    puts "^C"
  end        
  loop do
    line = Readline.readline("#{exename}> ", true)
    begin
      result = cxt.eval(line, '<shell>')
      puts(result) unless result.nil?                
    rescue V8::JSError => e
      puts e.message
      puts e.backtrace(:javascript)
    rescue StandardError => e
      puts e
      puts e.backtrace.join("\n")
    end
  end          
end

.run(exename = 'v8', args = []) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/v8/cli.rb', line 6

def self.run(exename = 'v8', args = [])      
  options = OpenStruct.new
  options.libs = []
  options.libdirs = []
  parser = OptionParser.new
  parser.banner = "Usage: #{exename} [options]"
  parser.on("-r", "--require FILE", "load and execute FILE as JavaScript source") {|r| options.libs << r}
  parser.on("-i", "--interactive", "interactive mode") {options.interactive = true}
  parser.on("-e", "--execute JAVASCRIPT", String, "evaluate JAVASCRIPT and exit") {|src| options.execute = src}
  parser.on("--selftest", "check that therubyracer is functioning properly") {options.selftest = true}
  parser.on_tail("-v", "--version", "Show version and exit") {options.version_info = true}
  parser.on_tail("-h", "--help", "Show this message") do
    puts parser
    exit
  end
  begin
    parser.parse!(args.dup)
  rescue OptionParser::InvalidOption => e
    puts "#{exename}: #{e.message}"
    exit(1)
  end
  if options.version_info
    require 'libv8'
    puts "The Ruby Racer #{V8::VERSION}"
    puts "V8 Version #{Libv8::V8_VERSION}"
    exit
  elsif options.selftest
    self.test        
  end
  Context.new(:with => Shell.new) do |cxt|
    for libfile in options.libs do
      load(cxt,libfile)
    end        
    if options.interactive
      repl(cxt, exename)
    elsif options.execute
      cxt.eval(options.execute, '<execute>')
    else
      begin
        cxt.eval($stdin, '<stdin>')
      rescue Interrupt => e
        puts; exit
      end
    end
  end
end

.testObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/v8/cli.rb', line 64

def self.test
  begin
    require 'rubygems'
    require 'rspec'
    ARGV.clear
    ARGV << File.dirname(__FILE__) + '/../../spec/'
    ::RSpec::Core::Runner.autorun
    exit(0)
  rescue LoadError => e
    puts "selftest requires rspec to be installed (gem install rspec)"
    exit(1)
  end
  
end