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