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
tags() click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 165
def tags
  metadata[:tags]
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