lib/logstash-docket/embedded_plugin.rb (39 lines of code) (raw):
# encoding: utf-8
require_relative 'plugin'
require 'set'
module LogstashDocket
##
# A {@link EmbeddedPlugin} is a {@link Plugin} that is provided within
# an {@link ArtifactPlugin} "integration" plugin.
#
# @api semiprivate (@see ArtifactPlugin#embedded_plugins)
class EmbeddedPlugin
SUPPORTED_TYPES = Set.new(%w(input output filter codec).map(&:freeze)).freeze
include Plugin
##
# Returns the {@link ArtifactPlugin} that embedded this {@link EmbeddedPlugin}.
#
# @return [ArtifactPlugin]
attr_reader :artifact_plugin
##
# @see Plugin#initialize
#
# @param artifact_plugin [ArtifactPlugin]
def initialize(artifact_plugin:, **args)
fail(ArgumentError) unless artifact_plugin.kind_of?(ArtifactPlugin)
super(**args)
fail("#{artifact_plugin.desc} plugin type #{type} not supported as a wrapped plugin") unless SUPPORTED_TYPES.include?(type)
@artifact_plugin = artifact_plugin
end
##
# @see Plugin#version
def version
@artifact_plugin.version
end
##
# @see Plugin#documentation
def documentation
@artifact_plugin.repository.read_file("docs/#{type}-#{name}.asciidoc", version)
end
##
# @see Plugin#release_date
def release_date
@artifact_plugin.release_date
end
##
# @see Plugin#changelog_url
def changelog_url
@artifact_plugin.changelog_url
end
##
# @see Plugin#tag
def tag
@artifact_plugin.tag
end
##
# @see Plugin#desc
def desc
@desc ||= "[plugin:#{artifact_plugin.canonical_name}/#{canonical_name}@#{tag}]"
end
##
# @see Plugin#==
def ==(other)
return false unless super
return false unless other.kind_of?(EmbeddedPlugin)
return false unless self.artifact_plugin == other.artifact_plugin
return true
end
end
end