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