Module: ExecJS::Runtimes

Defined in:
lib/execjs/runtimes.rb

Constant Summary collapse

RubyRacer =
RubyRacerRuntime.new
RubyRhino =
RubyRhinoRuntime.new
Johnson =
JohnsonRuntime.new
Mustang =
MustangRuntime.new
Node =
ExternalRuntime.new(
  :name        => "Node.js (V8)",
  :command     => ["nodejs", "node"],
  :runner_path => ExecJS.root + "/support/node_runner.js",
  :encoding    => 'UTF-8'
)
JavaScriptCore =
ExternalRuntime.new(
  :name        => "JavaScriptCore",
  :command     => "/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc",
  :runner_path => ExecJS.root + "/support/jsc_runner.js"
)
SpiderMonkey =
Spidermonkey = ExternalRuntime.new(
  :name        => "SpiderMonkey",
  :command     => "js",
  :runner_path => ExecJS.root + "/support/spidermonkey_runner.js"
)
JScript =
ExternalRuntime.new(
  :name        => "JScript",
  :command     => "cscript //E:jscript //Nologo //U",
  :runner_path => ExecJS.root + "/support/jscript_runner.js",
  :encoding    => 'UTF-16LE' # CScript with //U returns UTF-16LE
)

Class Method Summary collapse

Class Method Details

.autodetectObject



45
46
47
48
49
# File 'lib/execjs/runtimes.rb', line 45

def self.autodetect
  from_environment || best_available ||
    raise(RuntimeUnavailable, "Could not find a JavaScript runtime. " +
      "See https://github.com/sstephenson/execjs for a list of available runtimes.")
end

.best_availableObject



51
52
53
# File 'lib/execjs/runtimes.rb', line 51

def self.best_available
  runtimes.find(&:available?)
end

.from_environmentObject



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/execjs/runtimes.rb', line 55

def self.from_environment
  if name = ENV["EXECJS_RUNTIME"]
    if runtime = const_get(name)
      if runtime.available?
        runtime if runtime.available?
      else
        raise RuntimeUnavailable, "#{runtime.name} runtime is not available on this system"
      end
    elsif !name.empty?
      raise RuntimeUnavailable, "#{name} runtime is not defined"
    end
  end
end

.namesObject



69
70
71
# File 'lib/execjs/runtimes.rb', line 69

def self.names
  @names ||= constants.inject({}) { |h, name| h.merge(const_get(name) => name) }.values
end

.runtimesObject



73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/execjs/runtimes.rb', line 73

def self.runtimes
  @runtimes ||= [
    RubyRacer,
    RubyRhino,
    Johnson,
    Mustang,
    Node,
    JavaScriptCore,
    SpiderMonkey,
    JScript
  ]
end