module ForemanMaintain::Concerns::Metadata::ClassMethods
Public Instance Methods
abstract_class()
click to toggle source
Override if the class should be used as parent class only. By default, we assume the class that does't inherit from class with Metadata
is abstract = the base class of particular concept
# File lib/foreman_maintain/concerns/metadata.rb, line 124 def abstract_class !(superclass < Metadata) end
advanced_run?()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 185 def advanced_run? metadata[:advanced_run] end
after()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 177 def after metadata[:after] || [] end
all_sub_classes(ignore_abstract_classes = true)
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 136 def all_sub_classes(ignore_abstract_classes = true) ret = [] ret << self if !ignore_abstract_classes || !abstract_class sub_classes.each do |sub_class| ret.concat(sub_class.all_sub_classes(ignore_abstract_classes)) end ret end
autodetect?()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 132 def autodetect? metadata.fetch(:autodetect, true) end
before()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 173 def before metadata[:before] || [] end
description()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 161 def description metadata[:description] || to_s end
inherited(klass)
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 117 def inherited(klass) sub_classes << klass end
initialize_metadata()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 189 def initialize_metadata { :tags => [], :confine_blocks => [], :params => {}, :preparation_steps_blocks => [], :before => [], :after => [], :advanced_run => true }.tap do |metadata| if superclass.respond_to?(:metadata) metadata[:label] = superclass.metadata[:label] end end end
label()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 157 def label metadata[:label] || generate_label end
metadata(&block)
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 145 def metadata(&block) @metadata ||= initialize_metadata if block metadata_class.eval_dsl(@metadata, &block) end @metadata end
metadata_class()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 153 def metadata_class DSL end
params()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 169 def params metadata[:params] || {} end
preparation_steps(recursion_depth = 0, trace = [])
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 207 def preparation_steps(recursion_depth = 0, trace = []) raise "Too many dependent steps #{trace}" if recursion_depth > MAX_PREPARATION_STEPS_DEPTH return @preparation_steps if defined?(@preparation_steps) preparation_steps = metadata[:preparation_steps_blocks].map do |block| instance_exec(&block) end.flatten.compact preparation_steps.each { |step| raise ArgumentError unless step.is_a?(Executable) } all_preparation_steps = [] preparation_steps.each do |step| all_preparation_steps.concat( step.preparation_steps(recursion_depth + 1, trace + [step]) ) all_preparation_steps << step end @preparation_steps = all_preparation_steps end
present?()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 203 def present? evaluate_confines end
run_once?()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 181 def run_once? metadata[:run_once] end
sub_classes()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 128 def sub_classes @sub_classes ||= [] end
Private Instance Methods
evaluate_confines()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 226 def evaluate_confines raise 'Recursive confine block call detected' if @confines_evaluation_in_progress @confines_evaluation_in_progress = true metadata[:confine_blocks].all? do |block| instance_exec(&block) end ensure @confines_evaluation_in_progress = false end
generate_label()
click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 236 def generate_label label_parts = [] name.split('::').reduce(Object) do |parent_constant, name| constant = parent_constant.const_get(name) unless Metadata.top_level_modules.include?(constant) # CamelCase -> camel_case label_parts << name.split(/(?=[A-Z])/).map(&:downcase) end constant end label_parts.join('_').to_sym end