# frozen_string_literal: true require 'logger' require 'hcheck/configuration/service' module Hcheck # configuration class that loads configs via various ways # initializes service classes from config class Configuration attr_reader :services DEFAULT_HCHECK_DIR = Gem.loaded_specs['rails'] ? 'config/' : '' DEFAULT_CONFIG_PATH = [DEFAULT_HCHECK_DIR, 'hcheck.yml'].join def initialize(config) @services = config.map do |key, options| options = [options] unless options.is_a?(Array) options.map { |o| Service.new(key, o) } end.flatten end class << self def load(config) Hcheck.configure config end def load_argv(args) load_file(args[1].strip) if argv_config_present?(args) end def load_file(path) load read(path) end def load_default load_file(DEFAULT_CONFIG_PATH) end def read(path) YAML.safe_load(ERB.new(File.read(path)).result, [Symbol]) || {} rescue StandardError => e raise Hcheck::Errors::ConfigurationError, e end def generate_config FileUtils.copy_file(Gem.loaded_specs['hcheck'].gem_dir + '/hcheck.sample.yml', DEFAULT_CONFIG_PATH) puts "Generated #{DEFAULT_CONFIG_PATH}" end private def argv_config_present?(argvs) !argvs.empty? && argvs[0].match(/-+(config|c)/i) end end end end