Class: Erubis::Engine

Class | Erubis::Engine
In: | erubis/engine.rb
Parent: | Object

(abstract) abstract engine class. subclass must include evaluator and converter module.

### Methods

convert! load_file new process process_proc

### Public Class methods

load_file(filename, properties={})

load file, write cache file, and return engine object. this method create code cache file automatically. cachefile name can be specified with properties[:cachename], or filname + ‘cache’ is used as default.

[Source]

    # File erubis/engine.rb, line 48
        def self.load_file(filename, properties={})
          cachename = properties[:cachename] || (filename + '.cache')
          properties[:filename] = filename
          timestamp = File.mtime(filename)
          if test(?f, cachename) && timestamp == File.mtime(cachename)
            engine = self.new(nil, properties)
            engine.src = File.read(cachename)
          else
            input = File.open(filename, 'rb') {|f| f.read }
            engine = self.new(input, properties)
            tmpname = cachename + rand().to_s[1,8]
            File.open(tmpname, 'wb') {|f| f.write(engine.src) }
            File.rename(tmpname, cachename)
            File.utime(timestamp, timestamp, cachename)
          end
          engine.src.untaint   # ok?
          return engine
        end

new(input=nil, properties={})

include Evaluator include Converter include Generator

[Source]

    # File erubis/engine.rb, line 25
        def initialize(input=nil, properties={})
          #@input = input
          init_generator(properties)
          init_converter(properties)
          init_evaluator(properties)
          @src    = convert(input) if input
        end

### Public Instance methods

convert!(input)

convert input string and set it to @src

[Source]

    # File erubis/engine.rb, line 37
        def convert!(input)
          @src = convert(input)
        end

process(input, context=nil, filename=nil)

helper method to convert and evaluate input text with context object. context may be Binding, Hash, or Object.

[Source]

    # File erubis/engine.rb, line 72
        def process(input, context=nil, filename=nil)
          code = convert(input)
          filename ||= '(erubis)'
          if context.is_a?(Binding)
            return eval(code, context, filename)
          else
            context = Context.new(context) if context.is_a?(Hash)
            return context.instance_eval(code, filename)
          end
        end

process_proc(proc_obj, context=nil, filename=nil)

helper method evaluate Proc object with contect object. context may be Binding, Hash, or Object.

[Source]

    # File erubis/engine.rb, line 88
        def process_proc(proc_obj, context=nil, filename=nil)
          if context.is_a?(Binding)
            filename ||= '(erubis)'
            return eval(proc_obj, context, filename)
          else
            context = Context.new(context) if context.is_a?(Hash)
            return context.instance_eval(&proc_obj)
          end
        end

[Validate]