Class: Gemite::Interpreter

Inherits:
Object
  • Object
show all
Includes:
AST
Defined in:
lib/gemite/interpreter.rb

Overview

テンプレートノード木(TemplateParserの出力)と文AST(Parserの出力)を評価する ツリーウォーク型インタプリタ。

1リクエスト = 1つのInterpreterインスタンム。 render を1回呼ぶと、その中で ファイル全体を通してグローバル環境(仕様25: グローバル変数はファイル単位)を共有する。

Instance Method Summary collapse

Constructor Details

#initialize(get_params: {}, post_params: {}, base_dir: Dir.pwd) ⇒ Interpreter

Returns a new instance of Interpreter.



18
19
20
21
22
23
24
# File 'lib/gemite/interpreter.rb', line 18

def initialize(get_params: {}, post_params: {}, base_dir: Dir.pwd)
  @base_dir = base_dir
  @global_env = Environment.new
  @global_env.set_local("get", to_gemite_hash(get_params))
  @global_env.set_local("post", to_gemite_hash(post_params))
  @open_databases = []
end

Instance Method Details

#render(template_nodes) ⇒ Object

テンプレートノード列を実行し、出力HTML文字列を返す。 redirect() が呼ばれた場合は Gemite::RedirectSignal が、 未捕捉のエラーが発生した場合は Gemite::RuntimeError 等がそのまま送出される (呼び出し元のHTTPサーバ層で捕捉して適切なレスポンスに変換する)。



30
31
32
33
34
35
36
# File 'lib/gemite/interpreter.rb', line 30

def render(template_nodes)
  @output = +""
  exec_tpl_nodes(template_nodes, @global_env)
  @output
ensure
  close_databases
end