JbuilderTemplate
Constructors
Instance methods
json.array! posts, partial: "post", as: :post
json.cache! "cache-key" [, expires_in: span] do ... end Хит — фрагмент из кэша мержится в текущий скоп (Ruby: merge! value).
json.cache_if! condition, "cache-key" do ... end
json.cache_root! "cache-key" do ... end — кэш корневого JSON строкой.
json.partial! "partial", {"content" => "hello"} — партиал с locals (Ruby-форма "json.partial! 'partial', content: 'hello'" — именованные произвольные ключи в Crystal невыразимы; locals передаются Hash'ем).
json.partial! "post", collection: posts, as: :post [, cached: true]
json.partial! partial: "post", collection: posts, as: :post
json.posts posts, partial: "post", as: :post (inline-партиал под ключом)
nil-коллекция → [] (Ruby: _set_inline_partial object.nil? → [])
Macros
--- Регистрация партиалов (compile-time) ----------------------------------
JbuilderTemplate.compile_partials({ "post" => {path: "app/views/posts/_post.json.jbuilder", locals: {"post" => Post}}, "racers/racer" => {path: "app/views/racers/_racer.json.jbuilder", locals: {"racer" => Racer}}, })
Тело файла вставляется в метод как есть (DSL-вызовы json.* — валидный Crystal); партиал пишет в общий билдер через аргумент json — та же семантика, что options[:locals][:json] = self в Ruby.