jingoo 1.4.0をリリースしました。
新しくなった点
Jg_template
モジュールを部分的に改良したJg_template2
というモジュールが追加されました。
サンプル
これまでJg_template
モジュールは、次のようにmodels
に連想リストを与えていました。
open Jingoo open Jg_types let result = Jg_template.from_string "{{ msg }}" ~models:[ ("msg", Tstr "hello, world!"); ]
Jg_template2
モジュールからは、models
に名前を与えたら値を返す関数を渡します。
open Jingoo open Jg_types let alist = [("msg", Tstr "hello, world!")] let result = Jg_template2.from_string "{{ msg }}" ~models:(fun key -> try List.assoc key alist with Not_found -> Tnull )
これの何が良いのかというと、string -> tvalue
という型の関数にさえなっていれば、データソースは何でも良くなることです。
例えばデータソースを(連想配列より高速な)Hashtbl
にすることもできます。
open Jingoo open Jg_types let htbl = Hashtbl.create 1 in let () = Hashtbl.add htbl "msg" (Tstr "hello, world!") in let result = Jg_template2.from_string "{{ msg }}" ~models:(fun key -> try Hashtbl.find htbl key with Not_found -> Tnull )
データソースなしで、単なる関数にしてしまうと、さらに高速です。
open Jingoo open Jg_types let result = Jg_template2.from_string "{{ msg }}" ~models:(function | "msg" -> Tstr "hello, world!" | _ -> Tnull )
関数にすることで、乱数値みたいなものを扱うこともできます。
open Jingoo open Jg_types let result = Jg_template2.from_string "{{ msg }}, {{ rand }}" ~models:(function | "msg" -> Tstr "hello, world!" | "rand" -> Tint (Random.int 100) (* 0 ~ 100 の値をランダムに返す *) | _ -> Tnull )
将来的にはこっちをメインのAPIとして使用したいのですが、旧版のAPIで既に広く使用されてしまっているので、今回はモジュールを別名で分けることで対応しました。