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 101
def abstract_class
  !(superclass < Metadata)
end
all_sub_classes(ignore_abstract_classes = true) click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 113
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 109
def autodetect?
  metadata.fetch(:autodetect, true)
end
description() click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 134
def description
  metadata[:description] || to_s
end
inherited(klass) click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 94
def inherited(klass)
  sub_classes << klass
end
initialize_metadata() click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 146
def initialize_metadata
  { :tags => [],
    :confine_blocks => [],
    :params => {},
    :preparation_steps_blocks => [] }.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 130
def label
  metadata[:label] || generate_label
end
metadata(&block) click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 122
def metadata(&block)
  @metadata ||= initialize_metadata
  if block
    DSL.eval_dsl(@metadata, &block)
  end
  @metadata
end
params() click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 142
def params
  metadata[:params] || []
end
preparation_steps(recursion_depth = 0, trace = []) click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 161
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(&:call)
  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 157
def present?
  evaluate_confines
end
sub_classes() click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 105
def sub_classes
  @sub_classes ||= []
end
tags() click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 138
def tags
  metadata[:tags]
end

Private Instance Methods

evaluate_confines() click to toggle source
# File lib/foreman_maintain/concerns/metadata.rb, line 178
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 188
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