Implied extensions. Closes #304

This commit is contained in:
Thomas Reynolds 2012-03-29 18:22:43 +01:00
parent aab9644185
commit e769477e93
9 changed files with 102 additions and 19 deletions

View file

@ -28,6 +28,7 @@
* Add pid for cleanup * Add pid for cleanup
* Use guard/listen for file watching * Use guard/listen for file watching
* Merge full i18n support * Merge full i18n support
* Implied file extensions (style.scss => sytle.css)
2.0.14 2.0.14
==== ====

View file

@ -13,23 +13,23 @@ Feature: Text Files Without Extensions Should Build and Preview
| LICENSE | | LICENSE |
| README | | README |
Scenario: Building Text Files with directory indexes Scenario: Building Text Files with directory indexes
Given a fixture app "extensionless-text-files-app" Given a fixture app "extensionless-text-files-app"
And a file named "config.rb" with: And a file named "config.rb" with:
""" """
activate :directory_indexes activate :directory_indexes
""" """
And a successfully built app at "extensionless-text-files-app" And a successfully built app at "extensionless-text-files-app"
When I cd to "build" When I cd to "build"
Then the following files should exist: Then the following files should exist:
| CNAME | | CNAME |
| LICENSE | | LICENSE |
| README | | README |
Then the following files should not exist: Then the following files should not exist:
| CNAME/index.html | | CNAME/index.html |
| LICENSE/index.html | | LICENSE/index.html |
| README/index.html | | README/index.html |
Scenario: Previewing Text Files without directory indexes Scenario: Previewing Text Files without directory indexes
Given "directory_indexes" feature is "disabled" Given "directory_indexes" feature is "disabled"

View file

@ -0,0 +1,52 @@
Feature: Use default extensions when user doesn't supply them
Scenario: Default extensions preview
Given the Server is running at "implied-extensions-app"
When I go to "/index.html"
Then I should see "hello: world"
When I go to "/index.erb"
Then I should see "File Not Found"
When I go to "/index"
Then I should see "File Not Found"
Scenario: Default extensions preview
Given a fixture app "implied-extensions-app"
And a file named "config.rb" with:
"""
template_extensions :erb => :htm
"""
And the Server is running
When I go to "/index.htm"
Then I should see "hello: world"
When I go to "/index.erb"
Then I should see "File Not Found"
When I go to "/index"
Then I should see "File Not Found"
When I go to "/index.html"
Then I should see "File Not Found"
Scenario: Default extensions build
Given a fixture app "implied-extensions-app"
And a successfully built app at "implied-extensions-app"
When I cd to "build"
Then the following files should exist:
| index.html |
Then the following files should not exist:
| index |
| index.erb |
And the file "index.html" should contain "hello: world"
Scenario: Default extensions build with override
Given a fixture app "implied-extensions-app"
And a file named "config.rb" with:
"""
template_extensions :erb => :htm
"""
And a successfully built app at "implied-extensions-app"
When I cd to "build"
Then the following files should exist:
| index.htm |
Then the following files should not exist:
| index |
| index.erb |
| index.html |

View file

@ -0,0 +1 @@
hello: <%= "world" %>

View file

@ -33,6 +33,11 @@ module Middleman::CoreExtensions::Rendering
# Override init to clear cache on file removal # Override init to clear cache on file removal
def initialize def initialize
# Default extension map
@_template_extensions = {
}
super super
static_path = source_dir.sub(self.root, "").sub(/^\//, "") static_path = source_dir.sub(self.root, "").sub(/^\//, "")
@ -44,6 +49,14 @@ module Middleman::CoreExtensions::Rendering
end end
end end
# Add or overwrite a default template extension
#
# @param [Hash] extension_map
# @return [void]
def template_extensions(extension_map={})
@_template_extensions.merge!(extension_map)
end
# Render a template, with layout, given a path # Render a template, with layout, given a path
# #
# @param [String] path # @param [String] path

View file

@ -10,6 +10,10 @@ module Middleman::Renderers::ERb
app.set :erb_engine, :erb app.set :erb_engine, :erb
app.set :erb_engine_prefix, ::Tilt app.set :erb_engine_prefix, ::Tilt
app.before_configuration do
template_extensions :erb => :html
end
# After config # After config
app.after_configuration do app.after_configuration do
# Find the user's prefered engine # Find the user's prefered engine

View file

@ -176,6 +176,15 @@ module Middleman::Sitemap
end end
end end
# If there is no extension, look for one
if File.extname(path).empty?
input_ext = File.extname(file).split(".").last.to_sym
if app.template_extensions.has_key?(input_ext)
path << ".#{app.template_extensions[input_ext]}"
end
end
path path
end end
end end

View file

@ -21,9 +21,7 @@ Given /^current environment is "([^\"]*)"$/ do |env|
@current_env = env.to_sym @current_env = env.to_sym
end end
Given /^the Server is running at "([^\"]*)"$/ do |app_path| Given /^the Server is running$/ do
step %Q{a fixture app "#{app_path}"}
root_dir = File.expand_path(current_dir) root_dir = File.expand_path(current_dir)
if File.exists?(File.join(root_dir, "source")) if File.exists?(File.join(root_dir, "source"))
@ -49,6 +47,11 @@ Given /^the Server is running at "([^\"]*)"$/ do |app_path|
@browser = ::Rack::Test::Session.new(::Rack::MockSession.new(app_rack)) @browser = ::Rack::Test::Session.new(::Rack::MockSession.new(app_rack))
end end
Given /^the Server is running at "([^\"]*)"$/ do |app_path|
step %Q{a fixture app "#{app_path}"}
step %Q{the Server is running}
end
When /^I go to "([^\"]*)"$/ do |url| When /^I go to "([^\"]*)"$/ do |url|
@browser.get(url) @browser.get(url)
end end