class ExecJS::Xtrn::Engine

Constants

Error
PathX
Run

Public Class Methods

compile(code='') click to toggle source
# File lib/execjs/xtrn/engine.rb, line 44
def self.compile(code='')
  new.tap{|ctx| ctx.exec code}
end
eval(code) click to toggle source
# File lib/execjs/xtrn/engine.rb, line 40
def self.eval(code)
  new.eval code
end
exec(code) click to toggle source
# File lib/execjs/xtrn/engine.rb, line 36
def self.exec(code)
  new.exec code
end
load(code) click to toggle source
# File lib/execjs/xtrn/engine.rb, line 48
def self.load code
  new.tap{|ctx| ctx.load code}
end
new() click to toggle source
# File lib/execjs/xtrn/engine.rb, line 88
def initialize
  self.class.ancestors.reverse.map do |m|
    list=m.const_get 'Preload', false rescue nil
    list ? Array===list ? list : [list] : []
  end
  .flatten.uniq.each{|code| load code}
end
stats() click to toggle source
# File lib/execjs/xtrn/engine.rb, line 52
def self.stats
  (@stats||{}).dup
end

Private Class Methods

bear() click to toggle source
# File lib/execjs/xtrn/engine.rb, line 68
def self.bear
  raise NotImplementedError, self unless self::Run
  ExecJS::Xtrn::Child.new self::Run
end
child() click to toggle source
# File lib/execjs/xtrn/engine.rb, line 73
def self.child
  bear.tap {|c| c.stats self.class_stats, ExecJS::Xtrn::Engine.class_stats}
end
class_stats(increment = 1) click to toggle source
# File lib/execjs/xtrn/engine.rb, line 62
def self.class_stats increment = 1
  s = @stats ||= {c: 0}
  s[:c] += increment
  s
end

Public Instance Methods

call(fn, *args) click to toggle source
# File lib/execjs/xtrn/engine.rb, line 32
def call(fn, *args)
  eval "(#{fn}).apply(this, #{JSON.dump args})"
end
eval(code) click to toggle source
# File lib/execjs/xtrn/engine.rb, line 27
def eval(code)
  return if (code=code.to_s.strip).length==0
  exec "return eval(#{JSON.generate([code])[1...-1]})"
end
exec(code) click to toggle source
# File lib/execjs/xtrn/engine.rb, line 12
def exec(code)
  return if (code=code.to_s.strip).length==0
  result=say code
  result={'err'=>'Invalid JS result'} unless Hash===result
  raise Error, result['err'] if result['err']
  result['ok']
end
load(code) click to toggle source
# File lib/execjs/xtrn/engine.rb, line 23
def load code
  exec PathX.find{|re| re.match code} ? File.read(code) : code
end
stats() click to toggle source
# File lib/execjs/xtrn/engine.rb, line 56
def stats
  (@stats||{}).dup
end

Private Instance Methods

child() click to toggle source
# File lib/execjs/xtrn/engine.rb, line 77
def child
  return @child if @child
  c = self.class.child
  c.stats @stats = {}
  @child = c
end
say(code) click to toggle source
# File lib/execjs/xtrn/engine.rb, line 84
def say code
  child.say code
end