add more content_for helpers, disable caching for now
This commit is contained in:
parent
ddb15b2e35
commit
e2fdd9a4d3
16
features/content_for.feature
Normal file
16
features/content_for.feature
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
Feature: Support content_for and yield_content helpers
|
||||||
|
|
||||||
|
Scenario: content_for works as expected in erb
|
||||||
|
Given the Server is running at "test-app"
|
||||||
|
When I go to "/content_for_erb.html"
|
||||||
|
Then I should see "In Layout: I am the yielded content erb"
|
||||||
|
|
||||||
|
Scenario: content_for works as expected in haml
|
||||||
|
Given the Server is running at "test-app"
|
||||||
|
When I go to "/content_for_haml.html"
|
||||||
|
Then I should see "In Layout: I am the yielded content haml"
|
||||||
|
|
||||||
|
Scenario: content_for works as expected in slim
|
||||||
|
Given the Server is running at "test-app"
|
||||||
|
When I go to "/content_for_slim.html"
|
||||||
|
Then I should see "In Layout: I am the yielded content slim"
|
|
@ -15,6 +15,12 @@ page "/target_ignore.html", :proxy => "/should_be_ignored3.html", :ignore => tru
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
with_layout :content_for do
|
||||||
|
page "/content_for_erb.html"
|
||||||
|
page "/content_for_haml.html"
|
||||||
|
page "/content_for_slim.html"
|
||||||
|
end
|
||||||
|
|
||||||
with_layout false do
|
with_layout false do
|
||||||
page "/markdown.html"
|
page "/markdown.html"
|
||||||
page "/relative_image.html"
|
page "/relative_image.html"
|
||||||
|
|
5
fixtures/test-app/source/content_for_erb.html.erb
Normal file
5
fixtures/test-app/source/content_for_erb.html.erb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<% content_for :from_template do %>
|
||||||
|
I am the yielded content erb
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
I am in the template
|
4
fixtures/test-app/source/content_for_haml.html.haml
Normal file
4
fixtures/test-app/source/content_for_haml.html.haml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
- content_for :from_template do
|
||||||
|
= "I am the yielded content haml"
|
||||||
|
|
||||||
|
%p I am in the template
|
4
fixtures/test-app/source/content_for_slim.html.slim
Normal file
4
fixtures/test-app/source/content_for_slim.html.slim
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
- content_for :from_template do
|
||||||
|
| I am the yielded content slim
|
||||||
|
|
||||||
|
| I am in the template
|
4
fixtures/test-app/source/layouts/content_for.erb
Normal file
4
fixtures/test-app/source/layouts/content_for.erb
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
In Layout: <%= yield_content(:from_template).chomp.strip %>
|
||||||
|
|
||||||
|
In Template:
|
||||||
|
<%= yield %>
|
|
@ -14,6 +14,7 @@ module Middleman
|
||||||
|
|
||||||
# Custom Renderers
|
# Custom Renderers
|
||||||
module Renderers
|
module Renderers
|
||||||
|
autoload :Haml, "middleman/renderers/haml"
|
||||||
autoload :Sass, "middleman/renderers/sass"
|
autoload :Sass, "middleman/renderers/sass"
|
||||||
autoload :Markdown, "middleman/renderers/markdown"
|
autoload :Markdown, "middleman/renderers/markdown"
|
||||||
autoload :ERb, "middleman/renderers/erb"
|
autoload :ERb, "middleman/renderers/erb"
|
||||||
|
|
|
@ -373,13 +373,13 @@ class Middleman::Base
|
||||||
# @param [String] Request path
|
# @param [String] Request path
|
||||||
# @return [String] Path with index file if necessary
|
# @return [String] Path with index file if necessary
|
||||||
def full_path(path)
|
def full_path(path)
|
||||||
cache.fetch(:full_path, path) do
|
# cache.fetch(:full_path, path) do
|
||||||
parts = path ? path.split('/') : []
|
parts = path ? path.split('/') : []
|
||||||
if parts.last.nil? || parts.last.split('.').length == 1
|
if parts.last.nil? || parts.last.split('.').length == 1
|
||||||
path = File.join(path, index_file)
|
path = File.join(path, index_file)
|
||||||
end
|
end
|
||||||
"/" + path.sub(%r{^/}, '')
|
"/" + path.sub(%r{^/}, '')
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Add a new mime-type for a specific extension
|
# Add a new mime-type for a specific extension
|
||||||
|
|
|
@ -47,7 +47,7 @@ module Middleman
|
||||||
# Remove a specific key
|
# Remove a specific key
|
||||||
# @param Anything Hash can use as a key
|
# @param Anything Hash can use as a key
|
||||||
def remove(*key)
|
def remove(*key)
|
||||||
@cache.delete(key) if @cache.has_key?(key)
|
@cache.delete(key)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -12,6 +12,7 @@ module Middleman::CoreExtensions::Rendering
|
||||||
app.send :include, InstanceMethods
|
app.send :include, InstanceMethods
|
||||||
|
|
||||||
# Activate custom renderers
|
# Activate custom renderers
|
||||||
|
app.register Middleman::Renderers::Haml
|
||||||
app.register Middleman::Renderers::Sass
|
app.register Middleman::Renderers::Sass
|
||||||
app.register Middleman::Renderers::Markdown
|
app.register Middleman::Renderers::Markdown
|
||||||
app.register Middleman::Renderers::ERb
|
app.register Middleman::Renderers::ERb
|
||||||
|
@ -24,18 +25,35 @@ module Middleman::CoreExtensions::Rendering
|
||||||
end
|
end
|
||||||
|
|
||||||
module InstanceMethods
|
module InstanceMethods
|
||||||
|
def initialize
|
||||||
|
file_changed %r{^source/} do |file|
|
||||||
|
path = File.expand_path(file, root)
|
||||||
|
# cache.remove(:raw_template, path.to_sym)
|
||||||
|
end
|
||||||
|
|
||||||
|
super
|
||||||
|
end
|
||||||
|
|
||||||
def render_template(path, locs={}, opts={})
|
def render_template(path, locs={}, opts={})
|
||||||
|
extension = File.extname(path)
|
||||||
|
engine = extension[1..-1].to_sym
|
||||||
|
|
||||||
|
@current_engine, engine_was = engine, @current_engine
|
||||||
|
@_out_buf, _buf_was = "", @_out_buf
|
||||||
|
|
||||||
content = render_individual_file(path, locs, opts)
|
content = render_individual_file(path, locs, opts)
|
||||||
|
|
||||||
extension = File.extname(path)
|
|
||||||
needs_layout = !%w(.js .css .txt).include?(extension)
|
needs_layout = !%w(.js .css .txt).include?(extension)
|
||||||
engine = extension[1..-1].to_sym
|
|
||||||
|
|
||||||
if needs_layout && layout_path = fetch_layout(engine, opts)
|
if needs_layout && layout_path = fetch_layout(engine, opts)
|
||||||
content = render_individual_file(layout_path, locs, opts) { content }
|
content = render_individual_file(layout_path, locs, opts) { content }
|
||||||
end
|
end
|
||||||
|
|
||||||
content
|
content
|
||||||
|
ensure
|
||||||
|
@current_engine = engine_was
|
||||||
|
@_out_buf = _buf_was
|
||||||
|
@content_blocks = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
# Sinatra/Padrino render method signature.
|
# Sinatra/Padrino render method signature.
|
||||||
|
@ -79,22 +97,25 @@ module Middleman::CoreExtensions::Rendering
|
||||||
# @private
|
# @private
|
||||||
def render_individual_file(path, locs = {}, opts = {}, &block)
|
def render_individual_file(path, locs = {}, opts = {}, &block)
|
||||||
path = path.to_s
|
path = path.to_s
|
||||||
body = cache.fetch(:raw_template, path) do
|
body = #cache.fetch(:raw_template, path) do
|
||||||
|
# $stderr.puts "reading: #{path}"
|
||||||
File.read(path)
|
File.read(path)
|
||||||
end
|
# end
|
||||||
|
|
||||||
options = opts.merge(options_for_ext(File.extname(path)))
|
extension = File.extname(path)
|
||||||
|
options = opts.merge(options_for_ext(extension))
|
||||||
|
options[:outvar] ||= '@_out_buf'
|
||||||
|
|
||||||
template = cache.fetch(:compiled_template, options, body) do
|
template = #cache.fetch(:compiled_template, options, body) do
|
||||||
::Tilt.new(path, 1, options) { body }
|
::Tilt.new(path, 1, options) { body }
|
||||||
end
|
# end
|
||||||
|
|
||||||
template.render(self, locs, &block)
|
template.render(self, locs, &block)
|
||||||
end
|
end
|
||||||
|
|
||||||
# @private
|
# @private
|
||||||
def options_for_ext(ext)
|
def options_for_ext(ext)
|
||||||
cache.fetch(:options_for_ext, ext) do
|
# cache.fetch(:options_for_ext, ext) do
|
||||||
options = {}
|
options = {}
|
||||||
|
|
||||||
extension_class = ::Tilt[ext]
|
extension_class = ::Tilt[ext]
|
||||||
|
@ -105,7 +126,7 @@ module Middleman::CoreExtensions::Rendering
|
||||||
end
|
end
|
||||||
|
|
||||||
options
|
options
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
# @private
|
# @private
|
||||||
|
@ -166,10 +187,14 @@ module Middleman::CoreExtensions::Rendering
|
||||||
layout_path
|
layout_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def current_engine
|
||||||
|
@current_engine ||= nil
|
||||||
|
end
|
||||||
|
|
||||||
# @private
|
# @private
|
||||||
def resolve_template(request_path, options={})
|
def resolve_template(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{^/}, "")
|
||||||
on_disk_path = File.expand_path(relative_path, self.source_dir)
|
on_disk_path = File.expand_path(relative_path, self.source_dir)
|
||||||
|
|
||||||
|
@ -203,7 +228,7 @@ module Middleman::CoreExtensions::Rendering
|
||||||
else
|
else
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -11,8 +11,6 @@ module Middleman::CoreExtensions::Sitemap
|
||||||
|
|
||||||
module InstanceMethods
|
module InstanceMethods
|
||||||
def initialize
|
def initialize
|
||||||
::Middleman::Sitemap::Template.cache.clear
|
|
||||||
|
|
||||||
file_changed do |file|
|
file_changed do |file|
|
||||||
sitemap.touch_file(file)
|
sitemap.touch_file(file)
|
||||||
end
|
end
|
||||||
|
|
17
lib/middleman/renderers/haml.rb
Normal file
17
lib/middleman/renderers/haml.rb
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
module Middleman::Renderers::Haml
|
||||||
|
class << self
|
||||||
|
def registered(app)
|
||||||
|
require "haml"
|
||||||
|
app.send :include, ::Haml::Helpers
|
||||||
|
app.send :include, InstanceMethods
|
||||||
|
end
|
||||||
|
alias :included :registered
|
||||||
|
end
|
||||||
|
|
||||||
|
module InstanceMethods
|
||||||
|
def initialize
|
||||||
|
super
|
||||||
|
init_haml_helpers
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -123,8 +123,7 @@ module Middleman::Sitemap
|
||||||
|
|
||||||
protected
|
protected
|
||||||
def extensionless_path(file)
|
def extensionless_path(file)
|
||||||
@cache ||= ::Middleman::Cache.new
|
@cache.fetch(:extensionless_path, file) do
|
||||||
@cache.fetch(:extensionless_path, file) do
|
|
||||||
path = file.dup
|
path = file.dup
|
||||||
|
|
||||||
end_of_the_line = false
|
end_of_the_line = false
|
||||||
|
|
|
@ -31,7 +31,7 @@ module Middleman::Sitemap
|
||||||
end
|
end
|
||||||
|
|
||||||
def metadata
|
def metadata
|
||||||
cache.fetch(:metadata, source_file) do
|
# store.cache.fetch(:metadata, source_file) do
|
||||||
metadata = { :options => {}, :locals => {} }
|
metadata = { :options => {}, :locals => {} }
|
||||||
app.provides_metadata.each do |callback, matcher|
|
app.provides_metadata.each do |callback, matcher|
|
||||||
next if !matcher.nil? && !source_file.match(matcher)
|
next if !matcher.nil? && !source_file.match(matcher)
|
||||||
|
@ -39,7 +39,7 @@ module Middleman::Sitemap
|
||||||
metadata = metadata.deep_merge(result)
|
metadata = metadata.deep_merge(result)
|
||||||
end
|
end
|
||||||
metadata
|
metadata
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
def render(opts={}, locs={}, &block)
|
def render(opts={}, locs={}, &block)
|
||||||
|
@ -53,14 +53,5 @@ module Middleman::Sitemap
|
||||||
app.instance_eval(&block) if block_given?
|
app.instance_eval(&block) if block_given?
|
||||||
app.render_template(source_file, locs, opts)
|
app.render_template(source_file, locs, opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
|
||||||
def self.cache
|
|
||||||
@_cache ||= ::Middleman::Cache.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def cache
|
|
||||||
self.class.cache
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -1,5 +1,5 @@
|
||||||
<% content_for :head do %>
|
<% content_for :head do %>
|
||||||
<title>The Middleman!</title>
|
<title>The Middleman!</title>
|
||||||
<% end%>
|
<% end %>
|
||||||
|
|
||||||
<h1>The Middleman is watching.</h1>
|
<h1>The Middleman is watching.</h1>
|
Loading…
Reference in a new issue