add support for “sidecar” frontmatter at the destination url of proxied resources

a “cheap” way to support adding data to pages created through `proxy` or `page` by adding frontmatter at the expected destination url.

for example proxying a page to `/proxied.html`, by adding a sidecar frontmatter file at `source/proxied.html.frontmatter` (or source/proxied.frontmatter if directory indexes is activated) the frontmatter will be merged with the proxy source and available to `current_resource` at the destination.
This commit is contained in:
Steven Sloan 2014-12-22 13:59:27 -05:00
parent 4a59ebefe3
commit 85fa3fac02
3 changed files with 28 additions and 1 deletions

View file

@ -149,3 +149,22 @@ Feature: Neighboring YAML Front Matter
Then I should see "Layout in use: Override" Then I should see "Layout in use: Override"
When I go to "/page_mentioned.html.erb.frontmatter" When I go to "/page_mentioned.html.erb.frontmatter"
Then I should see "File Not Found" Then I should see "File Not Found"
Scenario: Neighbor frontmatter for destination of proxy resources
Given the Server is running at "frontmatter-settings-neighbor-app"
And the file "source/proxied_with_frontmatter.html.frontmatter" has the contents
"""
---
title: Proxied title
---
"""
And the file "source/ignored.html.erb" has the contents
"""
---
ignored: true
---
<%= current_resource.data.title %>
"""
When I go to "/proxied_with_frontmatter.html"
Then I should see "Proxied title"

View file

@ -1,4 +1,5 @@
# Proxy ignored.html, which should ignore itself through a frontmatter # Proxy ignored.html, which should ignore itself through a frontmatter
page 'proxied.html', :proxy => 'ignored.html' page 'proxied.html', :proxy => 'ignored.html'
page 'proxied_with_frontmatter.html', :proxy => 'ignored.html'
page 'override_layout.html', :layout => :alternate page 'override_layout.html', :layout => :alternate
page 'page_mentioned.html' page 'page_mentioned.html'

View file

@ -61,7 +61,14 @@ module Middleman::CoreExtensions
# @private # @private
# @return [Hash] # @return [Hash]
def raw_data def raw_data
app.extensions[:frontmatter].data(source_file).first data = app.extensions[:frontmatter].data(source_file).first
if proxy?
url_data = app.extensions[:frontmatter].data( File.join( app.source_dir, url ).chomp('/') ).first
data = data.deep_merge(url_data)
end
data
end end
# This page's frontmatter # This page's frontmatter