trabajo-afectivo/lib/mixin/required_sub_paths.rb
2022-01-01 14:38:12 +01:00

38 lines
1.1 KiB
Ruby

# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
module Mixin
module RequiredSubPaths
def self.included(_base)
path = caller_locations(1..1).first.path
sub_path = File.join(File.dirname(path), File.basename(path, '.rb'))
eager_load_recursive(sub_path)
end
# Loads a directory recursively. This can be needed when accessing
# modules not directly via .constantize on a known string, but dynamically
# via the inheritance tree, e.g. via .descendants (which assumes they have
# previously been loaded).
def self.eager_load_recursive(path)
excluded = ['.', '..']
sub_paths = []
Dir.entries(path).each do |entry|
next if excluded.include?(entry)
sub_path = File.join(path, entry)
if File.directory?(sub_path)
sub_paths.push(sub_path)
elsif sub_path =~ %r{\A(.*)\.rb\z}
require_path = $1
require_dependency(require_path)
end
end
sub_paths.each do |sub_path|
eager_load_recursive(sub_path)
end
end
end
end