Class: Gemite::Interpreter
- Inherits:
-
Object
- Object
- Gemite::Interpreter
- Includes:
- AST
- Defined in:
- lib/gemite/interpreter.rb
Overview
テンプレートノード木(TemplateParserの出力)と文AST(Parserの出力)を評価する ツリーウォーク型インタプリタ。
1リクエスト = 1つのInterpreterインスタンム。 render を1回呼ぶと、その中で ファイル全体を通してグローバル環境(仕様25: グローバル変数はファイル単位)を共有する。
Instance Method Summary collapse
-
#initialize(get_params: {}, post_params: {}, base_dir: Dir.pwd) ⇒ Interpreter
constructor
A new instance of Interpreter.
-
#render(template_nodes) ⇒ Object
テンプレートノード列を実行し、出力HTML文字列を返す。 redirect() が呼ばれた場合は Gemite::RedirectSignal が、 未捕捉のエラーが発生した場合は Gemite::RuntimeError 等がそのまま送出される (呼び出し元のHTTPサーバ層で捕捉して適切なレスポンスに変換する)。.
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 |