module Mihari::Mixins::Configuration

Public Instance Methods

config_template() click to toggle source

Returns a template for config

@return [String] A template for config

# File lib/mihari/mixins/configuration.rb, line 53
def config_template
  config = Mihari.config.values.keys.map do |key|
    [key.to_s, nil]
  end.to_h

  YAML.dump(config)
end
initialize_config_yaml(filename, files = Dry::Files.new, template: config_template) click to toggle source

Create (blank) config file

@param [String] filename @param [Dry::Files] files @param [String] template

@return [nil]

# File lib/mihari/mixins/configuration.rb, line 70
def initialize_config_yaml(filename, files = Dry::Files.new, template: config_template)
  files.write(filename, template)
end
load_config(path) click to toggle source

Load config file into hash

@param [String] path Path to YAML file

@return [Hash]

# File lib/mihari/mixins/configuration.rb, line 16
def load_config(path)
  data = _load_config(path)
  data.transform_keys(&:downcase)
end
validate_config(config) click to toggle source

Validate config schema

@param [Hash] config

# File lib/mihari/mixins/configuration.rb, line 26
def validate_config(config)
  error_message = "Failed to parse the input as a config!"

  contract = Schemas::ConfigurationContract.new
  result = contract.call(config)
  unless result.errors.empty?
    puts error_message.colorize(:red)
    show_validation_errors result.errors
    raise ArgumentError, "Invalid config schema"
  end

  # check keys
  # TODO: check keys with dry-schema
  valid_keys = Mihari.config.values.keys
  config.each_key do |key|
    unless valid_keys.include?(key)
      puts error_message.colorize(:red)
      raise ArgumentError, "#{key} is not a valid key."
    end
  end
end

Private Instance Methods

_load_config(path) click to toggle source
# File lib/mihari/mixins/configuration.rb, line 83
def _load_config(path)
  return YAML.safe_load(File.read(path), symbolize_names: true) if Pathname(path).exist?

  YAML.safe_load(path, symbolize_names: true)
end
show_validation_errors(errors) click to toggle source
# File lib/mihari/mixins/configuration.rb, line 76
def show_validation_errors(errors)
  errors.messages.each do |message|
    path = message.path.map(&:to_s).join
    puts "- #{path} #{message.text}".colorize(:red)
  end
end