OpenSCAP/foreman_openscap

View on GitHub
app/services/foreman_openscap/lookup_key_overrides_common.rb

Summary

Maintainability
A
45 mins
Test Coverage
module ForemanOpenscap
  module LookupKeyOverridesCommon
    extend ActiveSupport::Concern

    def override(config)
      return unless handle_config_not_available(config)
      override_required_params config
    end

    def override_required_params(config)
      return unless config.managed_overrides?
      item = config.find_config_item

      return unless handle_config_item_not_available(config, item)
      override_params item.public_send(config.override_method_name), config
    end

    def override_params(lookup_keys, config)
      policies_param = lookup_keys.find_by :key => config.policies_param
      port_param = lookup_keys.find_by :key => config.port_param
      server_param = lookup_keys.find_by :key => config.server_param

      missing_keys = missing_lookup_keys(config.policies_param => policies_param,
                                         config.port_param => port_param,
                                         config.server_param => server_param)

      return unless handle_missing_lookup_keys config, missing_keys.compact.join(', ')

      override_policies_param(policies_param, config)
      override_port_param(port_param, config)
      override_server_param(server_param, config)
    end

    def override_policies_param(parameter, config)
      override_param 'policies', config.policies_param, parameter, config, 'array', config.policies_param_default_value
    end

    def override_port_param(param, config)
      override_param 'port', config.port_param, param, config, 'integer'
    end

    def override_server_param(param, config)
      override_param 'server', config.server_param, param, config, 'string'
    end

    def override_param(handler, param_name, param, config, key_type, default_value = nil)
      param.override = true
      param.hidden_value = false
      param.key_type = key_type
      param.default_value = default_value

      send("handle_#{handler}_param_override", config, param)
    end

    def missing_lookup_keys(hash)
      return [] if hash.values.all?
      hash.reduce([]) do |memo, (key, value)|
        memo << key if value.blank?
        memo
      end
    end
  end
end