module Corefines::Support

Public Class Methods

classes_including_module(mod) { |e| ... } click to toggle source

@private Finds all classes that includes the specified module. Results are cached to speed-up repeated calls.

@param mod [Module] the module. @yield [Class] gives each class that includes the mod.

# File lib/corefines/support/classes_including_module.rb, line 14
def self.classes_including_module(mod)
  @classes_including_module[mod] ||=
    ::ObjectSpace.each_object(::Class).select do |klass|
      begin
        klass.included_modules.include?(mod)
      rescue
        # ignore errors
      end
    end

  @classes_including_module[mod].each { |e| yield e }
end