93 lines
2.2 KiB
Ruby
93 lines
2.2 KiB
Ruby
# 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
|