Class: JenkinsPipelineBuilder::ExtensionSet

Inherits:
Object
  • Object
show all
Defined in:
lib/jenkins_pipeline_builder/extension_set.rb

Constant Summary collapse

SET_METHODS =
%i[
  name
  plugin_id
  jenkins_name
  description
  announced
  type
].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type, path = nil, &block) ⇒ ExtensionSet

Returns a new instance of ExtensionSet.



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 21

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

Instance Attribute Details

#blocksObject

Returns the value of attribute blocks.



19
20
21
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 19

def blocks
  @blocks
end

#extensionsObject

Returns the value of attribute extensions.



19
20
21
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 19

def extensions
  @extensions
end

#settingsObject

Returns the value of attribute settings.



19
20
21
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 19

def settings
  @settings
end

Instance Method Details

#add_extension(type, version, settings, path = nil) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
# 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_versionObject



33
34
35
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 33

def clear_installed_version
  @version = nil
end

#errorsObject



140
141
142
143
144
145
146
147
148
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 140

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

#extensionObject



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 63

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_versionObject



54
55
56
57
58
59
60
61
# 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) ⇒ Object



37
38
39
40
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 37

def installed_version=(version)
  version = version.match(/\d+\.\d+(\.\d+)?/)
  @version = Gem::Version.new version
end

#merge(other_set) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 76

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) ⇒ Object



91
92
93
94
95
96
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 91

def parameters(params)
  version = @min_version || '0'

  blocks[version] = {} unless blocks[version]
  blocks[version][:parameters] = params
end

#valid?Boolean

Returns:

  • (Boolean)


130
131
132
133
134
135
136
137
138
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 130

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| ... } ⇒ Object

Yields:

  • (block)


111
112
113
114
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 111

def version(ver, &block)
  @min_version = ver
  yield block
end

#versionsObject



150
151
152
153
154
155
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 150

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) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 98

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