address code review feedback from #3553

- change site:reset to site:after_reset
- raise an exception when registering uncallable hook
- set default hook priority at the public API level
This commit is contained in:
Stephen Crosby 2015-05-02 15:56:19 -07:00
parent 245d9677d7
commit 736e6a78f1
4 changed files with 16 additions and 12 deletions

View File

@ -2,11 +2,11 @@ Feature: Hooks
As a plugin author
I want to be able to run code during various stages of the build process
Scenario: Run some code on site reset
Scenario: Run some code after site reset
Given I have a _plugins directory
And I have a "_plugins/ext.rb" file with content:
"""
Jekyll::Hooks.register :site, :reset do |site|
Jekyll::Hooks.register :site, :after_reset do |site|
pageklass = Class.new(Jekyll::Page) do
def initialize(site, base)
@site = site

View File

@ -20,7 +20,7 @@ module Jekyll
# initial empty hooks
@registry = {
:site => {
reset: [],
after_reset: [],
post_read: [],
pre_render: [],
post_write: [],
@ -48,23 +48,23 @@ module Jekyll
@hook_priority = {}
NotAvailable = Class.new(RuntimeError)
Uncallable = Class.new(RuntimeError)
# register hook(s) to be called later
def self.register(owners, event, priority: nil, &block)
# register hook(s) to be called later, public API
def self.register(owners, event, priority: DEFAULT_PRIORITY, &block)
Array(owners).each do |owner|
register_one(owner, event, priority: priority_value(priority), &block)
register_one(owner, event, priority_value(priority), &block)
end
end
# Ensure the priority is a Fixnum
def self.priority_value(priority=nil)
return DEFAULT_PRIORITY unless priority
def self.priority_value(priority)
return priority if priority.is_a?(Fixnum)
PRIORITY_MAP[priority] || DEFAULT_PRIORITY
end
# register a single hook to be called later
def self.register_one(owner, event, priority: nil, &block)
# register a single hook to be called later, internal API
def self.register_one(owner, event, priority, &block)
unless @registry[owner]
raise NotAvailable, "Hooks are only available for the following " <<
"classes: #{@registry.keys.inspect}"
@ -75,6 +75,10 @@ module Jekyll
"following hooks #{@registry[owner].keys.inspect}"
end
unless block.respond_to? :call
raise Uncallable, "Hooks must respond to :call"
end
insert_hook owner, event, priority, &block
end

View File

@ -76,7 +76,7 @@ module Jekyll
raise ArgumentError, "limit_posts must be a non-negative number"
end
Jekyll::Hooks.trigger self, :reset
Jekyll::Hooks.trigger self, :after_reset
end
# Load necessary libraries, plugins, converters, and generators.

View File

@ -520,7 +520,7 @@ The complete list of available hooks is below:
<p><code>:site</code></p>
</td>
<td>
<p><code>:reset</code></p>
<p><code>:after_reset</code></p>
</td>
<td>
<p>Just after site reset</p>