roger 1.4.6 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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