# frozen_string_literal: true require 'eac_cli/runner_with/subcommands' require 'eac_ruby_utils/core_ext' module Avm module WithDynamicRunners # @return [Hash<String, EacCli::Runner>] def extra_available_subcommands extra_available_subcommands_from_runners_module end # @return [Hash<String, EacCli::Runner>] def extra_available_subcommands_from_runners_module self.class.ancestors.reverse.inject({}) do |a, e| a.merge(RunnersFromModule.new(e).result) end end class RunnersFromModule enable_simple_cache common_constructor :the_module # @return [Hash<String, EacCli::Runner>] def result return {} if runners_module.blank? ::EacCli::RunnerWith::Subcommands.subcommands_from_module(runners_module) end def runners_module_uncached return nil if the_module.module_parent.blank? begin the_module.module_parent.const_get('Runners') rescue ::NameError nil end end end end end