module AbstractController::Helpers::Resolution

def all_helpers_from_path(path)

def all_helpers_from_path(path)
  helpers = Array(path).flat_map do |_path|
    names = Dir["#{_path}/**/*_helper.rb"].map { |file| file[_path.to_s.size + 1..-"_helper.rb".size - 1] }
    names.sort!
  end
  helpers.uniq!
  helpers
end

def helper_modules_from_paths(paths)

def helper_modules_from_paths(paths)
  modules_for_helpers(all_helpers_from_path(paths))
end

def modules_for_helpers(modules_or_helper_prefixes)

:nodoc:
def modules_for_helpers(modules_or_helper_prefixes)
  modules_or_helper_prefixes.flatten.map! do |module_or_helper_prefix|
    case module_or_helper_prefix
    when Module
      module_or_helper_prefix
    when String, Symbol
      helper_prefix = module_or_helper_prefix.to_s
      helper_prefix = helper_prefix.camelize unless helper_prefix.start_with?(/[A-Z]/)
      "#{helper_prefix}Helper".constantize
    else
      raise ArgumentError, "helper must be a String, Symbol, or Module"
    end
  end
end