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
|
As a plugin author
|
||||||
I want to be able to run code during various stages of the build process
|
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
|
Given I have a _plugins directory
|
||||||
And I have a "_plugins/ext.rb" file with content:
|
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
|
pageklass = Class.new(Jekyll::Page) do
|
||||||
def initialize(site, base)
|
def initialize(site, base)
|
||||||
@site = site
|
@site = site
|
||||||
|
|
|
@ -20,7 +20,7 @@ module Jekyll
|
||||||
# initial empty hooks
|
# initial empty hooks
|
||||||
@registry = {
|
@registry = {
|
||||||
:site => {
|
:site => {
|
||||||
reset: [],
|
after_reset: [],
|
||||||
post_read: [],
|
post_read: [],
|
||||||
pre_render: [],
|
pre_render: [],
|
||||||
post_write: [],
|
post_write: [],
|
||||||
|
@ -48,23 +48,23 @@ module Jekyll
|
||||||
@hook_priority = {}
|
@hook_priority = {}
|
||||||
|
|
||||||
NotAvailable = Class.new(RuntimeError)
|
NotAvailable = Class.new(RuntimeError)
|
||||||
|
Uncallable = Class.new(RuntimeError)
|
||||||
|
|
||||||
# register hook(s) to be called later
|
# register hook(s) to be called later, public API
|
||||||
def self.register(owners, event, priority: nil, &block)
|
def self.register(owners, event, priority: DEFAULT_PRIORITY, &block)
|
||||||
Array(owners).each do |owner|
|
Array(owners).each do |owner|
|
||||||
register_one(owner, event, priority: priority_value(priority), &block)
|
register_one(owner, event, priority_value(priority), &block)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Ensure the priority is a Fixnum
|
# Ensure the priority is a Fixnum
|
||||||
def self.priority_value(priority=nil)
|
def self.priority_value(priority)
|
||||||
return DEFAULT_PRIORITY unless priority
|
|
||||||
return priority if priority.is_a?(Fixnum)
|
return priority if priority.is_a?(Fixnum)
|
||||||
PRIORITY_MAP[priority] || DEFAULT_PRIORITY
|
PRIORITY_MAP[priority] || DEFAULT_PRIORITY
|
||||||
end
|
end
|
||||||
|
|
||||||
# register a single hook to be called later
|
# register a single hook to be called later, internal API
|
||||||
def self.register_one(owner, event, priority: nil, &block)
|
def self.register_one(owner, event, priority, &block)
|
||||||
unless @registry[owner]
|
unless @registry[owner]
|
||||||
raise NotAvailable, "Hooks are only available for the following " <<
|
raise NotAvailable, "Hooks are only available for the following " <<
|
||||||
"classes: #{@registry.keys.inspect}"
|
"classes: #{@registry.keys.inspect}"
|
||||||
|
@ -75,6 +75,10 @@ module Jekyll
|
||||||
"following hooks #{@registry[owner].keys.inspect}"
|
"following hooks #{@registry[owner].keys.inspect}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unless block.respond_to? :call
|
||||||
|
raise Uncallable, "Hooks must respond to :call"
|
||||||
|
end
|
||||||
|
|
||||||
insert_hook owner, event, priority, &block
|
insert_hook owner, event, priority, &block
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ module Jekyll
|
||||||
raise ArgumentError, "limit_posts must be a non-negative number"
|
raise ArgumentError, "limit_posts must be a non-negative number"
|
||||||
end
|
end
|
||||||
|
|
||||||
Jekyll::Hooks.trigger self, :reset
|
Jekyll::Hooks.trigger self, :after_reset
|
||||||
end
|
end
|
||||||
|
|
||||||
# Load necessary libraries, plugins, converters, and generators.
|
# Load necessary libraries, plugins, converters, and generators.
|
||||||
|
|
|
@ -520,7 +520,7 @@ The complete list of available hooks is below:
|
||||||
<p><code>:site</code></p>
|
<p><code>:site</code></p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p><code>:reset</code></p>
|
<p><code>:after_reset</code></p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>Just after site reset</p>
|
<p>Just after site reset</p>
|
||||||
|
|
Loading…
Reference in New Issue