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:
parent
245d9677d7
commit
736e6a78f1
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue