lib/logstash-docket/plugin.rb (48 lines of code) (raw):

# encoding: utf-8 module LogstashDocket ## # A {@link Plugin} represents a versioned release of a Logstash Plugin. # # It provides metadata about the plugin version and methods for retrieving # plugin documentation from its {@link Repository}. # # There are two implementations of this interface module: # # - {@link ArtifactPlugin}, representing traditional plugins backed directly # by a named and versioned artifact on rubygems.org, AND # - {@link EmbeddedPlugin}, representing plugins that are packaged _inside_ # an "integration" {@link ArtifactPlugin}. # module Plugin ## # @api private # # @param type [String] # @param name [String] def initialize(type:, name:) @type = type @name = name @canonical_name = "logstash-#{type}-#{name}" end ## # @return [String] attr_reader :name ## # @return [String] attr_reader :type ## # @return [String] attr_reader :canonical_name ## # @return [Gem::Version] def version fail NotImplementedError end ## # @return [Time,nil] def release_date fail NotImplementedError end ## # @return [String] def changelog_url fail NotImplementedError end ## # @return [String] def tag fail NotImplementedError end ## # @return [String] def documentation fail NotImplementedError end ## # A string suitable for describing this {@link Plugin} in log messages # # @return [String] def desc fail NotImplementedError end def with_alias(alias_definitions) yield self return unless alias_definitions.key?(type) alias_definitions[type]&.each do |alias_definition| if alias_definition.fetch("from") == name yield AliasPlugin.new(canonical_plugin: self, alias_name: alias_definition.fetch("alias"), doc_headers: alias_definition.fetch("docs", [])) end end end ## # @return [Boolean] def ==(other) return false unless other.kind_of?(Plugin) return false unless self.type == other.type return false unless self.name == other.name return false unless self.version == other.version true end end end