-
Notifications
You must be signed in to change notification settings - Fork 8
/
render.cr
40 lines (35 loc) · 1019 Bytes
/
render.cr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
require "ecr/macros"
module Artanis
# TODO: render views in subpaths (eg: views/blog/posts/show.ecr => render_blog_posts_show_ecr)
module Render
macro ecr(name, layout = "layout")
render {{ name }}, "ecr", layout: {{ layout }}
end
macro render(name, engine, layout = "layout")
{% if layout %}
render_{{ layout.id }}_{{ engine.id }} do
render_{{ name.id }}_{{ engine.id }}
end
{% else %}
render_{{ name.id }}_{{ engine.id }}
{% end %}
end
macro views_path(path)
{%
views = `cd #{ path } 2>/dev/null && ls *.ecr || echo -n ""`
.lines
.map(&.strip.gsub(/\.ecr/, ""))
%}
{% for view in views %}
def render_{{ view.id }}_ecr
render_{{ view.id }}_ecr {}
end
def render_{{ view.id }}_ecr(&block)
String.build do |__str__|
embed_ecr "{{ path.id }}/{{ view.id }}.ecr", "__str__"
end
end
{% end %}
end
end
end