class JenkinsPipelineBuilder::ExtensionSet

Constants

SET_METHODS

Attributes

blocks[RW]
extensions[RW]
settings[RW]

Public Class Methods

new(type, path = nil, &block) click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 22
def initialize(type, path = nil, &block)
  @blocks = {}
  @settings = {}
  @extensions = []

  instance_eval(&block)

  blocks.each do |version, settings|
    add_extension type, version, settings, path
  end
end

Public Instance Methods

add_extension(type, version, settings, path = nil) click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 42
def add_extension(type, version, settings, path = nil)
  ext = JenkinsPipelineBuilder::Extension.new
  ext.min_version version
  ext.type type
  self.settings.merge(settings).each do |key, value|
    ext.send key, value
  end

  ext.path path unless ext.path
  extensions << ext
end
clear_installed_version() click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 34
def clear_installed_version
  @version = nil
end
errors() click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 144
def errors
  errors = {}
  errors['ExtensionSet'] = 'no extensions successfully registered' if extensions.empty?
  extensions.each do |ext|
    ver = ext.min_version || 'unknown'
    errors["#{ext.name} version #{ver}"] = ext.errors unless ext.valid?
  end
  errors
end
extension() click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 65
def extension
  # TODO: Support multiple xml sections for the native to jenkins plugins
  return extensions.first if settings[:plugin_id] == 'builtin'

  extension = versions[highest_allowed_version]

  unless extension
    raise %(Can't find version of #{name} lte #{installed_version}.
      Available versions: #{versions.keys.map(&:to_s)})
  end
  extension
end
installed_version() click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 54
def installed_version
  return @version if @version

  reg = JenkinsPipelineBuilder.registry
  version = reg.versions[settings[:plugin_id]]
  raise "Plugin #{settings[:name]} is not installed (plugin_id: #{settings[:plugin_id]})" if version.nil?

  self.installed_version = version
  @version
end
installed_version=(version) click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 38
def installed_version=(version)
  @version = Gem::Version.new version
end
merge(other_set) click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 78
def merge(other_set)
  mismatch = []
  SET_METHODS.each do |method_name|
    val1 = settings[method_name]
    val2 = other_set.settings[method_name]
    mismatch << "The values for #{method_name} do not match '#{val1}' : '#{val2}'" unless val1 == val2
  end
  mismatch.each do |error|
    logger.error error
  end
  raise 'Values did not match, cannot merge extension sets' if mismatch.any?

  self.extensions = versions.merge(other_set.versions).values
end
parameters(params) click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 93
def parameters(params)
  version = @min_version || '0'

  blocks[version] = {} unless blocks[version]
  blocks[version][:parameters] = params
end
valid?() click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 134
def valid?
  valid = errors.empty?
  unless valid
    name ||= 'A plugin with no name provided'
    logger.error "Encountered errors while registering #{name}"
    logger.error errors.map { |k, v| "#{k}: #{v}" }.join(', ')
  end
  valid
end
version(ver) { |block| ... } click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 114
def version(ver, &block)
  @min_version = ver
  yield block
end
versions() click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 154
def versions
  # Don't memoize this, it will prevent local overrides
  extensions.each_with_object({}) do |ext, hash|
    hash[Gem::Version.new(ext.min_version)] = ext
  end
end
xml(path: false, version: '0', &block) click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 100
def xml(path: false, version: '0', &block)
  if @min_version
    version = @min_version
  elsif version != '0'
    deprecation_warning(settings[:name], 'xml')
  end
  unless block
    raise "no block found for version #{version}" unless blocks.key version

    return blocks[version][:block]
  end
  store_xml version, block, path
end

Private Instance Methods

deprecation_warning(name, block) click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 185
def deprecation_warning(name, block)
  logger.warn %(WARNING: #{name} set the version in the #{block} block, this is deprecated.
  Please use a version block.)
end
highest_allowed_version() click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 167
def highest_allowed_version
  ordered_version_list.each do |version|
    return version if version <= installed_version
  end
end
logger() click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 163
def logger
  JenkinsPipelineBuilder.logger
end
ordered_version_list() click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 181
def ordered_version_list
  versions.keys.sort.reverse
end
store_xml(version, block, path) click to toggle source
# File lib/jenkins_pipeline_builder/extension_set.rb, line 173
def store_xml(version, block, path)
  if blocks[version]
    blocks[version].merge!(xml: block, path: path)
  else
    blocks[version] = { xml: block, path: path }
  end
end