Class: JenkinsPipelineBuilder::ExtensionSet
- Inherits:
-
Object
- Object
- JenkinsPipelineBuilder::ExtensionSet
- 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
-
#blocks ⇒ Object
Returns the value of attribute blocks.
-
#extensions ⇒ Object
Returns the value of attribute extensions.
-
#settings ⇒ Object
Returns the value of attribute settings.
Instance Method Summary collapse
- #add_extension(type, version, settings, path = nil) ⇒ Object
- #clear_installed_version ⇒ Object
- #errors ⇒ Object
- #extension ⇒ Object
-
#initialize(type, path = nil, &block) ⇒ ExtensionSet
constructor
A new instance of ExtensionSet.
- #installed_version ⇒ Object
- #installed_version=(version) ⇒ Object
- #merge(other_set) ⇒ Object
- #parameters(params) ⇒ Object
- #valid? ⇒ Boolean
- #version(ver) {|block| ... } ⇒ Object
- #versions ⇒ Object
- #xml(path: false, version: '0', &block) ⇒ Object
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
#blocks ⇒ Object
Returns the value of attribute blocks.
19 20 21 |
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 19 def blocks @blocks end |
#extensions ⇒ Object
Returns the value of attribute extensions.
19 20 21 |
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 19 def extensions @extensions end |
#settings ⇒ Object
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_version ⇒ Object
33 34 35 |
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 33 def clear_installed_version @version = nil end |
#errors ⇒ Object
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 |
#extension ⇒ Object
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_version ⇒ Object
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
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
111 112 113 114 |
# File 'lib/jenkins_pipeline_builder/extension_set.rb', line 111 def version(ver, &block) @min_version = ver yield block end |
#versions ⇒ Object
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 |