This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Jekyll
|
||||
class Plugin
|
||||
PRIORITIES = {
|
||||
:low => -10,
|
||||
:highest => 100,
|
||||
:lowest => -100,
|
||||
:normal => 0,
|
||||
:high => 10,
|
||||
}.freeze
|
||||
|
||||
#
|
||||
|
||||
def self.inherited(const)
|
||||
catch_inheritance(const) do |const_|
|
||||
catch_inheritance(const_)
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
def self.catch_inheritance(const)
|
||||
const.define_singleton_method :inherited do |const_|
|
||||
(@children ||= Set.new).add const_
|
||||
yield const_ if block_given?
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
def self.descendants
|
||||
@children ||= Set.new
|
||||
out = @children.map(&:descendants)
|
||||
out << self unless superclass == Plugin
|
||||
Set.new(out).flatten
|
||||
end
|
||||
|
||||
# Get or set the priority of this plugin. When called without an
|
||||
# argument it returns the priority. When an argument is given, it will
|
||||
# set the priority.
|
||||
#
|
||||
# priority - The Symbol priority (default: nil). Valid options are:
|
||||
# :lowest, :low, :normal, :high, :highest
|
||||
#
|
||||
# Returns the Symbol priority.
|
||||
def self.priority(priority = nil)
|
||||
@priority ||= nil
|
||||
@priority = priority if priority && PRIORITIES.key?(priority)
|
||||
@priority || :normal
|
||||
end
|
||||
|
||||
# Get or set the safety of this plugin. When called without an argument
|
||||
# it returns the safety. When an argument is given, it will set the
|
||||
# safety.
|
||||
#
|
||||
# safe - The Boolean safety (default: nil).
|
||||
#
|
||||
# Returns the safety Boolean.
|
||||
def self.safe(safe = nil)
|
||||
@safe = safe unless defined?(@safe) && safe.nil?
|
||||
@safe || false
|
||||
end
|
||||
|
||||
# Spaceship is priority [higher -> lower]
|
||||
#
|
||||
# other - The class to be compared.
|
||||
#
|
||||
# Returns -1, 0, 1.
|
||||
def self.<=>(other)
|
||||
PRIORITIES[other.priority] <=> PRIORITIES[priority]
|
||||
end
|
||||
|
||||
# Spaceship is priority [higher -> lower]
|
||||
#
|
||||
# other - The class to be compared.
|
||||
#
|
||||
# Returns -1, 0, 1.
|
||||
def <=>(other)
|
||||
self.class <=> other.class
|
||||
end
|
||||
|
||||
# Initialize a new plugin. This should be overridden by the subclass.
|
||||
#
|
||||
# config - The Hash of configuration options.
|
||||
#
|
||||
# Returns a new instance.
|
||||
def initialize(config = {})
|
||||
# no-op for default
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user