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.
@@ -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(template, env = {})
12
- @_template = template
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
- @_template
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(template.data)
29
+ @_data ||= OpenStruct.new(@_renderer.data)
24
30
  end
25
31
 
26
32
  # The current environment variables.
data/lib/roger/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # Roger main namespace
2
2
  module Roger
3
- VERSION = "1.4.6"
3
+ VERSION = "1.5.0"
4
4
  end
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
- assert_equal "bla/test.html", @processor.target_path("bla/test.html", @template).to_s
33
- assert_equal "test.html", @processor.target_path("test.html", @template).to_s
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
- assert_equal "bla/test.html", @processor.target_path("bla/test.html.erb", @template).to_s
38
- assert_equal "test.html", @processor.target_path("test.html.erb", @template).to_s
39
- assert_equal "test.html", @processor.target_path("test.html.test", @template).to_s
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
- assert_equal "bla/test.rhtml", @processor.target_path("bla/test.rhtml", @template).to_s
44
- assert_equal "test.rhtml", @processor.target_path("test.rhtml", @template).to_s
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
- template = Roger::Template.open(@base + "/html/formats/csv.rcsv")
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
- template = Roger::Template.open(@base + "/html/formats/csv.rcsv")
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
- assert_equal "bla/test.csv", @processor.target_path("bla/test", template).to_s
58
- assert_equal "test.csv", @processor.target_path("test", template).to_s
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