roger 1.4.6 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +13 -5
- data/.travis.yml +1 -1
- data/CHANGELOG.md +9 -0
- data/doc/templating.md +9 -4
- data/lib/roger/rack/roger.rb +4 -3
- data/lib/roger/release/processors/mockup.rb +25 -42
- data/lib/roger/renderer.rb +294 -0
- data/lib/roger/resolver.rb +118 -37
- data/lib/roger/template.rb +44 -115
- data/lib/roger/template/helpers/capture.rb +4 -2
- data/lib/roger/template/helpers/partial.rb +9 -20
- data/lib/roger/template/helpers/rendering.rb +15 -0
- data/lib/roger/template/template_context.rb +10 -4
- data/lib/roger/version.rb +1 -1
- data/test/project/html/formats/markdown-erb.md.erb +0 -0
- data/test/project/html/formats/preferred.html.erb +0 -0
- data/test/project/html/formats/preferred.json.erb +0 -0
- data/test/project/html/partials/_local.html.erb +1 -0
- data/test/project/html/renderer/file.html.erb +1 -0
- data/test/project/html/renderer/recursive.html.erb +1 -0
- data/test/project/partials/test/_underscored.html.erb +1 -0
- data/test/project/partials/test/deep_recursive.html.erb +1 -0
- data/test/project/partials/test/recursive.html.erb +1 -0
- data/test/unit/release/processors/mockup_test.rb +31 -15
- data/test/unit/renderer/renderer_base_test.rb +123 -0
- data/test/unit/renderer/renderer_content_for_test.rb +50 -0
- data/test/unit/renderer/renderer_helper_test.rb +54 -0
- data/test/unit/renderer/renderer_partial_test.rb +88 -0
- data/test/unit/resolver_test.rb +43 -22
- data/test/unit/template/template_base_test.rb +29 -0
- metadata +39 -11
- data/test/unit/template_test.rb +0 -208
@@ -0,0 +1,15 @@
|
|
1
|
+
module Roger
|
2
|
+
class Template
|
3
|
+
module Helpers
|
4
|
+
# The partial helper
|
5
|
+
module Rendering
|
6
|
+
# Render any file on disk
|
7
|
+
#
|
8
|
+
# @see Renderer#render_file
|
9
|
+
def render_file(path, options = {})
|
10
|
+
renderer.render_file(path, options)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/helpers/capture"
|
2
2
|
require File.dirname(__FILE__) + "/helpers/partial"
|
3
|
+
require File.dirname(__FILE__) + "/helpers/rendering"
|
3
4
|
|
4
5
|
module Roger
|
5
6
|
class Template
|
@@ -7,20 +8,25 @@ module Roger
|
|
7
8
|
class TemplateContext
|
8
9
|
include Helpers::Capture
|
9
10
|
include Helpers::Partial
|
11
|
+
include Helpers::Rendering
|
10
12
|
|
11
|
-
def initialize(
|
12
|
-
@
|
13
|
+
def initialize(renderer, env = {})
|
14
|
+
@_renderer = renderer
|
13
15
|
@_env = env
|
14
16
|
end
|
15
17
|
|
18
|
+
def renderer
|
19
|
+
@_renderer
|
20
|
+
end
|
21
|
+
|
16
22
|
# The current Roger::Template in use
|
17
23
|
def template
|
18
|
-
@
|
24
|
+
@_renderer.current_template
|
19
25
|
end
|
20
26
|
|
21
27
|
# Access to the front-matter of the document (if any)
|
22
28
|
def document
|
23
|
-
@_data ||= OpenStruct.new(
|
29
|
+
@_data ||= OpenStruct.new(@_renderer.data)
|
24
30
|
end
|
25
31
|
|
26
32
|
# The current environment variables.
|
data/lib/roger/version.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
local
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= "file" %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= renderer.render_file("recursive.html.erb") %>
|
@@ -0,0 +1 @@
|
|
1
|
+
underscored
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= partial("test/recursive") %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= partial("test/recursive") %>
|
@@ -18,44 +18,60 @@ module Roger
|
|
18
18
|
files = @mockup.call(@release)
|
19
19
|
assert_equal 0, files.length
|
20
20
|
end
|
21
|
+
|
22
|
+
def test_run_on_file
|
23
|
+
@release.project.construct.directory "build" do |dir|
|
24
|
+
dir.file "test.html.erb", "<%= 'test' %>"
|
25
|
+
end
|
26
|
+
|
27
|
+
@mockup.call(@release)
|
28
|
+
|
29
|
+
file = @release.build_path + "test.html"
|
30
|
+
|
31
|
+
assert file.exist?
|
32
|
+
assert_equal "test", File.read(file.to_s)
|
33
|
+
end
|
21
34
|
end
|
22
35
|
|
23
36
|
# Test the target_path function of Mockup
|
24
37
|
class MockupTargetPathTest < ::Test::Unit::TestCase
|
25
38
|
def setup
|
26
39
|
@base = File.dirname(__FILE__) + "/../../../project"
|
27
|
-
@template = Roger::Template.open(@base + "/html/formats/erb.html.erb")
|
28
40
|
@processor = Roger::Release::Processors::Mockup.new
|
29
41
|
end
|
30
42
|
|
31
43
|
def test_with_html_extension
|
32
|
-
|
33
|
-
|
44
|
+
assert_output "bla/test.html", "bla/test.html"
|
45
|
+
assert_output "test.html", "test.html"
|
34
46
|
end
|
35
47
|
|
36
48
|
def test_with_double_extension
|
37
|
-
|
38
|
-
|
39
|
-
|
49
|
+
assert_output "bla/test.html", "bla/test.html.erb"
|
50
|
+
assert_output "test.html", "test.html.erb"
|
51
|
+
assert_output "test.html", "test.html.test"
|
40
52
|
end
|
41
53
|
|
42
54
|
def test_with_unknown_template_mime
|
43
|
-
|
44
|
-
|
55
|
+
assert_output "bla/test.supafriek", "bla/test.supafriek"
|
56
|
+
assert_output "test.supafriek", "test.supafriek"
|
45
57
|
end
|
46
58
|
|
47
59
|
def test_with_template_mime_with_existing_extension
|
48
|
-
|
49
|
-
|
50
|
-
assert_equal "bla/test.csv", @processor.target_path("bla/test.rcsv", template).to_s
|
51
|
-
assert_equal "test.csv", @processor.target_path("test.erb", template).to_s
|
60
|
+
assert_equal "bla/test.csv", @processor.target_path("bla/test.rcsv").to_s
|
61
|
+
assert_equal "test.csv", @processor.target_path("test.rcsv").to_s
|
52
62
|
end
|
53
63
|
|
54
64
|
def test_with_template_mime_without_existing_extension
|
55
|
-
|
65
|
+
assert_output "bla/test", @processor.target_path("bla/test").to_s
|
66
|
+
assert_output "test", @processor.target_path("test").to_s
|
67
|
+
end
|
68
|
+
|
69
|
+
def assert_output(outfile, infile)
|
70
|
+
assert_equal outfile, @processor.target_path(infile).to_s
|
71
|
+
end
|
56
72
|
|
57
|
-
|
58
|
-
|
73
|
+
def template(path)
|
74
|
+
Roger::Template.new("", {}, source_path: path)
|
59
75
|
end
|
60
76
|
end
|
61
77
|
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Generators register themself on the CLI module
|
3
|
+
require "test_helper"
|
4
|
+
require "./lib/roger/renderer.rb"
|
5
|
+
|
6
|
+
module Roger
|
7
|
+
# Roger template tests
|
8
|
+
class RendererBaseTest < ::Test::Unit::TestCase
|
9
|
+
def setup
|
10
|
+
@base = Pathname.new(File.dirname(__FILE__) + "/../../project")
|
11
|
+
@config = {
|
12
|
+
partials_path: @base + "partials",
|
13
|
+
layouts_path: @base + "layouts",
|
14
|
+
source_path: @base + "html/test.html.erb"
|
15
|
+
}
|
16
|
+
@template_path = @base + "html"
|
17
|
+
|
18
|
+
@renderer = Renderer.new({}, @config)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_render
|
22
|
+
result = @renderer.render("test.html.erb", source: "<%= 'yes' %>")
|
23
|
+
assert_equal "yes", result
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_render_file_absolute
|
27
|
+
result = @renderer.render_file(@base + "html/renderer/file.html.erb")
|
28
|
+
assert_equal "file", result
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_render_file_relative
|
32
|
+
result = @renderer.render(
|
33
|
+
@base + "html/dir1/test.html.erb",
|
34
|
+
source: "<%= renderer.render_file('../renderer/file.html.erb') %>"
|
35
|
+
)
|
36
|
+
assert_equal "file", result
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_render_file_prevent_recursive
|
40
|
+
assert_raise(ArgumentError) do
|
41
|
+
@renderer.render(@base + "html/renderer/recursive.html.erb")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Formats
|
46
|
+
|
47
|
+
def test_render_md
|
48
|
+
result = @renderer.render("test.md", source: "# h1")
|
49
|
+
assert_equal "<h1>h1</h1>\n", result
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_render_md_erb
|
53
|
+
result = @renderer.render("test.md.erb", source: "<%= '# h1' %>")
|
54
|
+
assert_equal "<h1>h1</h1>\n", result
|
55
|
+
end
|
56
|
+
|
57
|
+
# Environment
|
58
|
+
|
59
|
+
def test_template_env
|
60
|
+
renderer = Renderer.new({ test: "test" }, @config)
|
61
|
+
result = renderer.render("test.erb", source: "<%= env[:test] %>")
|
62
|
+
assert_equal "test", result
|
63
|
+
end
|
64
|
+
|
65
|
+
# Extension
|
66
|
+
def test_source_extension
|
67
|
+
mime_types = {
|
68
|
+
"html" => "html",
|
69
|
+
# "md.erb" => "md.erb",
|
70
|
+
"html.erb" => "html.erb",
|
71
|
+
"css.erb" => "css.erb",
|
72
|
+
"json.erb" => "json.erb",
|
73
|
+
"sjon.json.erb" => "json.erb",
|
74
|
+
"js.erb" => "js.erb"
|
75
|
+
}
|
76
|
+
|
77
|
+
mime_types.each do |ext, ext_out|
|
78
|
+
assert_equal(
|
79
|
+
ext_out,
|
80
|
+
Renderer.source_extension_for(@base + "html/file.#{ext}")
|
81
|
+
)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_target_extension
|
86
|
+
mime_types = {
|
87
|
+
"html" => "html",
|
88
|
+
"html.erb" => "html",
|
89
|
+
# "md" => "html",
|
90
|
+
# "md.erb" => "html",
|
91
|
+
"css.erb" => "css",
|
92
|
+
"json.erb" => "json",
|
93
|
+
"js.erb" => "js"
|
94
|
+
}
|
95
|
+
|
96
|
+
mime_types.each do |ext, ext_out|
|
97
|
+
assert_equal(
|
98
|
+
ext_out,
|
99
|
+
Renderer.target_extension_for(@base + "html/file.#{ext}")
|
100
|
+
)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Mime type
|
105
|
+
def test_target_mime_type
|
106
|
+
mime_types = {
|
107
|
+
"html" => "text/html",
|
108
|
+
# "md" => "text/html",
|
109
|
+
# "md.erb" => "text/html",
|
110
|
+
"html.erb" => "text/html",
|
111
|
+
"css.erb" => "text/css",
|
112
|
+
"json.erb" => "application/json"
|
113
|
+
}
|
114
|
+
|
115
|
+
mime_types.each do |ext, mime|
|
116
|
+
assert_equal(
|
117
|
+
mime,
|
118
|
+
Renderer.target_mime_type_for(@base + "html/file.#{ext}")
|
119
|
+
)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Generators register themself on the CLI module
|
3
|
+
require "test_helper"
|
4
|
+
require "./lib/roger/renderer.rb"
|
5
|
+
|
6
|
+
module Roger
|
7
|
+
# Roger template tests
|
8
|
+
class RendererContentForTest < ::Test::Unit::TestCase
|
9
|
+
def setup
|
10
|
+
@base = Pathname.new(File.dirname(__FILE__) + "/../../project")
|
11
|
+
@config = {
|
12
|
+
partials_path: @base + "partials",
|
13
|
+
layouts_path: @base + "layouts"
|
14
|
+
}
|
15
|
+
@template_path = @base + "html"
|
16
|
+
|
17
|
+
@source_path = @base + "html/test.html.erb"
|
18
|
+
|
19
|
+
@renderer = Renderer.new({}, @config)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Content for parts
|
23
|
+
|
24
|
+
def test_content_for_not_returning_in_template
|
25
|
+
content_for_block = 'B<% content_for :one do %><%= "one" %><% end %>A'
|
26
|
+
assert_equal "BA", @renderer.render(@source_path, source: content_for_block)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_content_for_yield_in_layout
|
30
|
+
content_for_block = "---\nlayout: \"yield\"\n---\n"
|
31
|
+
content_for_block << "B<% content_for :one do %><%= \"one\" %><% end %>A"
|
32
|
+
|
33
|
+
assert_equal "BAone", @renderer.render(@source_path, source: content_for_block)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_content_for_yield_in_layout_without_content_for
|
37
|
+
content_for_block = "---\nlayout: \"yield\"\n---\nBA"
|
38
|
+
assert_equal "BA", @renderer.render(@source_path, source: content_for_block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_content_for_yield_with_partial_with_block
|
42
|
+
template_string = "---\nlayout: \"yield\"\n---\nB"
|
43
|
+
template_string << "<% content_for :one do %>"
|
44
|
+
template_string << "<% partial 'test/yield' do %>CONTENT<% end %>"
|
45
|
+
template_string << "<% end %>A"
|
46
|
+
|
47
|
+
assert_equal "BAB-CONTENT-A", @renderer.render(@source_path, source: template_string)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Generators register themself on the CLI module
|
3
|
+
require "test_helper"
|
4
|
+
require "./lib/roger/renderer.rb"
|
5
|
+
|
6
|
+
module Roger
|
7
|
+
# A simple template helper to use for testing
|
8
|
+
module RendererHelper
|
9
|
+
def a
|
10
|
+
"a"
|
11
|
+
end
|
12
|
+
|
13
|
+
def from_env(key)
|
14
|
+
env[key]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Roger template tests
|
19
|
+
class RendererHelperTest < ::Test::Unit::TestCase
|
20
|
+
def setup
|
21
|
+
@base = Pathname.new(File.dirname(__FILE__) + "/../../project")
|
22
|
+
@config = {
|
23
|
+
partials_path: @base + "partials",
|
24
|
+
layouts_path: @base + "layouts"
|
25
|
+
}
|
26
|
+
@template_path = @base + "html"
|
27
|
+
|
28
|
+
@source_path = @base + "html/test.html.erb"
|
29
|
+
|
30
|
+
@renderer = Renderer.new({}, @config)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_register_helper
|
34
|
+
Roger::Renderer.helper RendererHelper
|
35
|
+
|
36
|
+
assert Roger::Renderer.helpers.include?(RendererHelper)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_helper_works
|
40
|
+
Roger::Renderer.helper RendererHelper
|
41
|
+
|
42
|
+
result = @renderer.render(@source_path, source: "<%= a %>")
|
43
|
+
assert_equal "a", result
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_helper_has_access_to_env
|
47
|
+
Roger::Renderer.helper RendererHelper
|
48
|
+
|
49
|
+
renderer = Renderer.new({ test: "test" }, @config)
|
50
|
+
result = renderer.render(@source_path, source: "<%= from_env(:test) %>")
|
51
|
+
assert_equal result, "test"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Generators register themself on the CLI module
|
3
|
+
require "test_helper"
|
4
|
+
require "./lib/roger/template.rb"
|
5
|
+
|
6
|
+
module Roger
|
7
|
+
# Roger template tests
|
8
|
+
class RendererPartialTest < ::Test::Unit::TestCase
|
9
|
+
def setup
|
10
|
+
@base = Pathname.new(File.dirname(__FILE__) + "/../../project")
|
11
|
+
@config = {
|
12
|
+
partials_path: @base + "partials",
|
13
|
+
layouts_path: @base + "layouts",
|
14
|
+
source_path: @base + "html/test.html.erb"
|
15
|
+
}
|
16
|
+
@template_path = @base + "html"
|
17
|
+
|
18
|
+
@renderer = Renderer.new({}, @config)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Partials
|
22
|
+
|
23
|
+
def test_partial
|
24
|
+
result = render_erb_template "<%= partial 'test/simple' %>"
|
25
|
+
assert_equal result, "ERB"
|
26
|
+
|
27
|
+
result = render_erb_template "<%= partial 'test/simple.html' %>"
|
28
|
+
assert_equal result, "ERB"
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_partial_with_double_template_extensions
|
32
|
+
result = render_erb_template "<%= partial 'test/json.json' %>"
|
33
|
+
assert_equal result, "{ key: value }"
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_partial_with_underscored_name
|
37
|
+
result = render_erb_template "<%= partial 'test/underscored' %>"
|
38
|
+
assert_equal result, "underscored"
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_local_partial
|
42
|
+
result = render_erb_template "<%= partial 'local' %>"
|
43
|
+
assert_equal result, "local"
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_partial_with_preferred_extension
|
47
|
+
assert_raise(ArgumentError) do
|
48
|
+
render_erb_template "<%= partial 'test/json' %>"
|
49
|
+
end
|
50
|
+
result = @renderer.render(@base + "html/test.json.erb", source: "<%= partial 'test/json' %>")
|
51
|
+
assert_equal result, "{ key: value }"
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_partial_with_block
|
55
|
+
result = render_erb_template "<% partial 'test/yield' do %>CONTENT<% end %>"
|
56
|
+
assert_equal result, "B-CONTENT-A"
|
57
|
+
|
58
|
+
result = render_erb_template "<% partial 'test/yield' do %><%= 'CONTENT' %><% end %>"
|
59
|
+
assert_equal result, "B-CONTENT-A"
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_partial_with_block_without_yield
|
63
|
+
result = render_erb_template "<% partial 'test/simple' do %>CONTENT<% end %>"
|
64
|
+
assert_equal result, "ERB"
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_front_matter_partial_access
|
68
|
+
result = render_erb_template "---\ntest: yay!\n---\n<%= partial 'test/front_matter' %>"
|
69
|
+
assert_equal result, "yay!"
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_partial_prevent_recursive
|
73
|
+
assert_raise(ArgumentError) do
|
74
|
+
render_erb_template "<% partial 'test/recursive' %>"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_partial_prevent_deep_recursive
|
79
|
+
assert_raise(ArgumentError) do
|
80
|
+
render_erb_template "<% partial 'test/deep_recursive' %>"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def render_erb_template(template)
|
85
|
+
@renderer.render(@base + "html/partials/test.html.erb", source: template)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|