lib/fusuma/config.rb in fusuma-3.3.0 vs lib/fusuma/config.rb in fusuma-3.3.1

- old
+ new

@@ -1,13 +1,13 @@ # frozen_string_literal: true -require_relative "./multi_logger" -require_relative "./config/index" -require_relative "./config/searcher" -require_relative "./config/yaml_duplication_checker" -require_relative "./plugin/manager" -require_relative "./hash_support" +require_relative "multi_logger" +require_relative "config/index" +require_relative "config/searcher" +require_relative "config/yaml_duplication_checker" +require_relative "plugin/manager" +require_relative "hash_support" require "singleton" require "yaml" # module as namespace module Fusuma @@ -63,10 +63,11 @@ @keymap = validate(config_path) | plugin_defaults MultiLogger.info "reload config: #{config_path}" # reset searcher cache @searcher = Searcher.new + @cache_execute_keys = nil self rescue InvalidFileError => e MultiLogger.error e.message exit 1 @@ -115,13 +116,20 @@ def find_execute_key(index) @execute_keys ||= Plugin::Executors::Executor.plugins.map do |executor| executor.new.execute_keys end.flatten - execute_params = search(index) - return if execute_params.nil? || !execute_params.is_a?(Hash) + @cache_execute_keys ||= {} - @execute_keys.find { |k| execute_params.key?(k) } + cache_key = [index.cache_key, Searcher.context].join + + return @cache_execute_keys[cache_key] if @cache_execute_keys.has_key?(cache_key) + + @cache_execute_keys[cache_key] = + @execute_keys.find do |execute_key| + new_index = Config::Index.new(index.keys | [execute_key]) + search(new_index) + end end private def find_config_filepath