class ERuby
Public Class Methods
import(filename)
click to toggle source
# File lib/knj/erb/include.rb, line 25 def self.import(filename) ERuby.load_settings if !@settings_loaded filename = File.expand_path(filename) pwd = Dir.pwd Dir.chdir(File.dirname(filename)) fpath = "#{KnjEruby.filepath}/cache/#{filename.gsub("/", "_").gsub(".", "_")}" pi = Php4r.pathinfo(filename) cachename = fpath + ".cache" filetime = File.mtime(filename) cacheexists = File.exists?(cachename) cachetime = File.mtime(cachename) if File.exists?(cachename) if !cacheexists or filetime > cachetime KnjEruby.load_file(File.basename(filename), {:cachename => cachename}) cachetime = File.mtime(cachename) reload_cache = true end if @java_compile if !@eruby_java_cache[cachename] or reload_cache #@eruby_java_cache[cachename] = @java_engine.compile(File.read(cachename)) @eruby_java_cache[cachename] = File.read(cachename) end #@eruby_java_cache[cachename].eval eval(@eruby_java_cache[cachename]) elsif @inseq_cache if @inseq_rbc bytepath = pi["dirname"] + "/" + pi["basename"] + ".rbc" byteexists = File.exists?(bytepath) bytetime = File.mtime(bytepath) if File.exists?(bytepath) if !File.exists?(bytepath) or cachetime > bytetime res = RubyVM::InstructionSequence.compile_file(filename) data = Marshal.dump(res.to_a) File.open(bytepath, "w+") do |fp| fp.write(data) end end end if @inseq_rbc res = Marshal.load(File.read(bytepath)) RubyVM::InstructionSequence.load(res).eval else if !@eruby_rbyte[cachename] or reload_cache @eruby_rbyte[cachename] = RubyVM::InstructionSequence.new(File.read(cachename)) #@eruby_rbyte[cachename] = RubyVM::InstructionSequence.compile_file(cachename) @eruby_rbyte[cachename].eval else _buf = "" @eruby_rbyte[cachename].eval if _buf print _buf end end end else eruby = KnjEruby.load_file(File.basename(filename), {:cachename => cachename}) print eruby.evaluate end Dir.chdir(pwd) end
load_settings()
click to toggle source
# File lib/knj/erb/include.rb, line 2 def self.load_settings @settings_loaded = true @inseq_cache = false @inseq_rbc = false @java_compile = false if RUBY_PLATFORM == "java" @java_compile = true @java_factory = javax.script.ScriptEngineManager.new @java_engine = @java_factory.getEngineByName("jruby") @eruby_java_cache = {} elsif RUBY_VERSION.slice(0..2) == "1.9" and RubyVM::InstructionSequence.respond_to?(:compile_file) @eruby_rbyte = {} @inseq_cache = true if RubyVM::InstructionSequence.respond_to?(:load) @inseq_rbc = true end end @inseq_rbc = false #this is not possible yet in Ruby... maybe in 1.9.3? end