fixed 'after_render' hook is not work.

- 'before_render' hook is called twice.
- add simple cucumber test about some hooks.
This commit is contained in:
yterajima 2015-05-06 16:16:30 +09:00
parent 486d34a2c1
commit c444b3f232
4 changed files with 62 additions and 1 deletions

View file

@ -0,0 +1,13 @@
Feature: Extension author could use some hooks
Scenario: When build
Given a fixture app "extension-hooks-app"
When I run `middleman build`
Then the exit status should be 0
And the output should contain "/// after_configuration ///"
And the output should contain "/// ready ///"
And the output should contain "/// before_build ///"
And the output should contain "/// before ///"
And the output should contain "/// before_render ///"
And the output should contain "/// after_render ///"
And the output should contain "/// after_build ///"

View file

@ -0,0 +1,39 @@
set :layout, false
class MyFeature < Middleman::Extension
def initialize(app, options_hash = {}, &block)
super
app.before do
puts '/// before ///'
end
app.ready do
puts '/// ready ///'
end
app.before_render do |body, path, locs, template_class|
puts "/// before_render ///"
end
app.after_render do |content, path, locs, template_class|
puts "/// after_render ///"
end
app.before_build do |builder|
puts "/// before_build ///"
end
app.after_build do |builder|
puts "/// after_build ///"
end
end
def after_configuration
puts '/// after_configuration ///'
end
end
::Middleman::Extensions.register(:my_feature, MyFeature)
activate :my_feature

View file

@ -0,0 +1,9 @@
<html>
<head>
<meta charset="utf-8">
<title>extension-hooks-app</title>
</head>
<body>
<h1>extension-hooks-app</h1>
</body>
</html>

View file

@ -76,7 +76,7 @@ module Middleman
end
# Allow hooks to manipulate the result after render
content = @app.callbacks_for(:before_render).reduce(content) do |sum, callback|
content = @app.callbacks_for(:after_render).reduce(content) do |sum, callback|
callback.call(sum, path, locs, template_class) || sum
end