tests for partials
This commit is contained in:
parent
2b545f8e35
commit
7c50c9e4d5
30
features/partials.feature
Normal file
30
features/partials.feature
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
Feature: Provide Sane Defaults for Partial Behavior
|
||||||
|
|
||||||
|
Scenario: Finds shared partials relative to the root
|
||||||
|
Given the Server is running at "partials-app"
|
||||||
|
When I go to "/index.html"
|
||||||
|
Then I should see "Header"
|
||||||
|
And I should see "Footer"
|
||||||
|
|
||||||
|
Scenario: Finds shared partials relative to the root (sub)
|
||||||
|
Given the Server is running at "partials-app"
|
||||||
|
When I go to "/sub/index.html"
|
||||||
|
Then I should see "Header"
|
||||||
|
And I should see "Footer"
|
||||||
|
|
||||||
|
Scenario: Prefers partials of the same engine type
|
||||||
|
Given the Server is running at "partials-app"
|
||||||
|
When I go to "/index.html"
|
||||||
|
Then I should see "ERb Main"
|
||||||
|
|
||||||
|
Scenario: Prefers partials of the same engine type
|
||||||
|
Given the Server is running at "partials-app"
|
||||||
|
When I go to "/second.html"
|
||||||
|
Then I should see "Haml Main"
|
||||||
|
And I should see "Header"
|
||||||
|
And I should see "Footer"
|
||||||
|
|
||||||
|
Scenario: Finds partial relative to template
|
||||||
|
Given the Server is running at "partials-app"
|
||||||
|
When I go to "/sub/index.html"
|
||||||
|
Then I should see "Local Partial"
|
|
@ -1,15 +0,0 @@
|
||||||
@wip
|
|
||||||
Feature: Tiny Src
|
|
||||||
In order automatically scale images for mobile devices
|
|
||||||
|
|
||||||
Scenario: Rendering html with the feature disabled
|
|
||||||
Given "tiny_src" feature is "disabled"
|
|
||||||
And the Server is running at "test-app"
|
|
||||||
When I go to "/tiny_src.html"
|
|
||||||
Then I should see "http://test.com/image.jpg"
|
|
||||||
|
|
||||||
Scenario: Rendering html with the feature enabled
|
|
||||||
Given "tiny_src" feature is "enabled"
|
|
||||||
And the Server is running at "test-app"
|
|
||||||
When I go to "/tiny_src.html"
|
|
||||||
Then I should see "http://i.tinysrc.mobi/http://test.com/image.jpg"
|
|
0
fixtures/partials-app/config.rb
Normal file
0
fixtures/partials-app/config.rb
Normal file
1
fixtures/partials-app/source/_main.erb
Normal file
1
fixtures/partials-app/source/_main.erb
Normal file
|
@ -0,0 +1 @@
|
||||||
|
ERb Main
|
1
fixtures/partials-app/source/_main.haml
Normal file
1
fixtures/partials-app/source/_main.haml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Haml Main
|
3
fixtures/partials-app/source/index.html.erb
Executable file
3
fixtures/partials-app/source/index.html.erb
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
<%= partial "shared/header" %>
|
||||||
|
<%= partial "main" %>
|
||||||
|
<%= partial "shared/footer" %>
|
3
fixtures/partials-app/source/second.html.haml
Executable file
3
fixtures/partials-app/source/second.html.haml
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
= partial "shared/header"
|
||||||
|
= partial "main"
|
||||||
|
= partial "shared/footer"
|
1
fixtures/partials-app/source/shared/_footer.erb
Normal file
1
fixtures/partials-app/source/shared/_footer.erb
Normal file
|
@ -0,0 +1 @@
|
||||||
|
%footer Footer
|
1
fixtures/partials-app/source/shared/_header.erb
Normal file
1
fixtures/partials-app/source/shared/_header.erb
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<header>Header</header>
|
1
fixtures/partials-app/source/sub/_local.erb
Normal file
1
fixtures/partials-app/source/sub/_local.erb
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<h2>Local Partial</h2>
|
3
fixtures/partials-app/source/sub/index.html.erb
Normal file
3
fixtures/partials-app/source/sub/index.html.erb
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<%= partial "shared/header" %>
|
||||||
|
<%= partial "local" %>
|
||||||
|
<%= partial "shared/footer" %>
|
|
@ -381,16 +381,40 @@ class Middleman::Base
|
||||||
# @return [String] Output
|
# @return [String] Output
|
||||||
def render(engine, data, options={}, locals={}, &block)
|
def render(engine, data, options={}, locals={}, &block)
|
||||||
data = data.to_s
|
data = data.to_s
|
||||||
template_path = File.join(source_dir, data)
|
|
||||||
|
|
||||||
if sitemap.exists?(data)
|
found_partial = false
|
||||||
sitemap.page(data).render(options, locals, &block)
|
engine = nil
|
||||||
elsif File.exists?(template_path)
|
|
||||||
body = app.cache.fetch(:raw_template, template_path) do
|
if sitemap.exists?(current_path)
|
||||||
File.read(template_path)
|
page = sitemap.page(current_path)
|
||||||
|
current_dir = File.dirname(page.source_file)
|
||||||
|
engine = File.extname(page.source_file)[1..-1].to_sym
|
||||||
|
|
||||||
|
if current_dir != self.source_dir
|
||||||
|
relative_dir = File.join(current_dir.sub("#{self.source_dir}/", ""), data)
|
||||||
|
|
||||||
|
found_partial, found_engine = Middleman::Sitemap::Template.resolve_template(self, relative_dir, :preferred_engine => engine)
|
||||||
|
|
||||||
|
if !found_partial
|
||||||
|
found_partial, found_engine = Middleman::Sitemap::Template.resolve_template(self, relative_dir)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Middleman::Sitemap::Template.static_render(self, template_path, body, locals, options, &block)
|
if !found_partial && !engine.nil?
|
||||||
|
found_partial, found_engine = Middleman::Sitemap::Template.resolve_template(self, data, :preferred_engine => engine)
|
||||||
|
end
|
||||||
|
|
||||||
|
if !found_partial
|
||||||
|
found_partial, found_engine = Middleman::Sitemap::Template.resolve_template(self, data)
|
||||||
|
end
|
||||||
|
|
||||||
|
if found_partial
|
||||||
|
body = cache.fetch(:raw_template, found_partial) do
|
||||||
|
File.read(found_partial)
|
||||||
|
end
|
||||||
|
|
||||||
|
Middleman::Sitemap::Template.static_render(self, found_partial, body, locals, options, &block)
|
||||||
else
|
else
|
||||||
throw "Could not find file to render: #{data}"
|
throw "Could not find file to render: #{data}"
|
||||||
end
|
end
|
||||||
|
|
|
@ -124,28 +124,28 @@ module Middleman::Sitemap
|
||||||
|
|
||||||
if !preferred_engine.nil?
|
if !preferred_engine.nil?
|
||||||
# Check root
|
# Check root
|
||||||
layout_path, *etc = resolve_template(name, :preferred_engine => preferred_engine)
|
layout_path, *etc = self.class.resolve_template(app, name, :preferred_engine => preferred_engine)
|
||||||
|
|
||||||
# Check layouts folder
|
# Check layouts folder
|
||||||
if !layout_path
|
if !layout_path
|
||||||
layout_path, *etc = resolve_template(File.join("layouts", name.to_s), :preferred_engine => preferred_engine)
|
layout_path, *etc = self.class.resolve_template(app, File.join("layouts", name.to_s), :preferred_engine => preferred_engine)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Check root, no preference
|
# Check root, no preference
|
||||||
if !layout_path
|
if !layout_path
|
||||||
layout_path, *etc = resolve_template(name)
|
layout_path, *etc = self.class.resolve_template(app, name)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Check layouts folder, no preference
|
# Check layouts folder, no preference
|
||||||
if !layout_path
|
if !layout_path
|
||||||
layout_path, *etc = resolve_template(File.join("layouts", name.to_s))
|
layout_path, *etc = self.class.resolve_template(app, File.join("layouts", name.to_s))
|
||||||
end
|
end
|
||||||
|
|
||||||
layout_path
|
layout_path
|
||||||
end
|
end
|
||||||
|
|
||||||
def resolve_template(request_path, options={})
|
def self.resolve_template(app, request_path, options={})
|
||||||
request_path = request_path.to_s
|
request_path = request_path.to_s
|
||||||
cache.fetch(:resolve_template, request_path, options) do
|
cache.fetch(:resolve_template, request_path, options) do
|
||||||
relative_path = request_path.sub(%r{^/}, "")
|
relative_path = request_path.sub(%r{^/}, "")
|
||||||
|
@ -196,9 +196,9 @@ module Middleman::Sitemap
|
||||||
def self.static_render(app, path, body, locs = {}, opts = {}, &block)
|
def self.static_render(app, path, body, locs = {}, opts = {}, &block)
|
||||||
options = opts.merge(options_for_ext(File.extname(path)))
|
options = opts.merge(options_for_ext(File.extname(path)))
|
||||||
|
|
||||||
# template = cache.fetch(:compiled_template, options, body) do
|
template = cache.fetch(:compiled_template, options, body) do
|
||||||
template = ::Tilt.new(path, 1, options) { body }
|
::Tilt.new(path, 1, options) { body }
|
||||||
# end
|
end
|
||||||
|
|
||||||
template.render(app, locs, &block)
|
template.render(app, locs, &block)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue