Class: ExecJS::ExternalRuntime

Inherits:
Runtime
  • Object
show all
Defined in:
lib/execjs/external_runtime.rb

Defined Under Namespace

Classes: Context

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Runtime

#compile, #context_class, #eval, #exec

Constructor Details

#initialize(options) ⇒ ExternalRuntime

Returns a new instance of ExternalRuntime.



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/execjs/external_runtime.rb', line 85

def initialize(options)
  @name        = options[:name]
  @command     = options[:command]
  @runner_path = options[:runner_path]
  @encoding    = options[:encoding]
  @deprecated  = !!options[:deprecated]
  @binary      = nil

  @popen_options = {}
  @popen_options[:external_encoding] = @encoding if @encoding
  @popen_options[:internal_encoding] = ::Encoding.default_internal || 'UTF-8'

  if @runner_path
    instance_eval generate_compile_method(@runner_path)
  end
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



83
84
85
# File 'lib/execjs/external_runtime.rb', line 83

def name
  @name
end

Instance Method Details

#available?Boolean

Returns:

  • (Boolean)


102
103
104
105
# File 'lib/execjs/external_runtime.rb', line 102

def available?
  require 'json'
  binary ? true : false
end

#deprecated?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/execjs/external_runtime.rb', line 107

def deprecated?
  @deprecated
end

#exec_runtime(filename) ⇒ Object



159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/execjs/external_runtime.rb', line 159

def exec_runtime(filename)
  path = Dir::Tmpname.create(['execjs', 'json']) {}
  begin
    command = binary.split(" ") << filename
    `#{shell_escape(*command)} 2>&1 > #{path}`
    output = File.open(path, 'rb', @popen_options) { |f| f.read }
  ensure
    File.unlink(path) if path
  end

  if $?.success?
    output
  else
    raise exec_runtime_error(output)
  end
end