Getting a list of classes that include a module

前端 未结 3 515
离开以前
离开以前 2020-12-20 11:31

I have a mixin for which I would like to get a list of all the classes that have included it. In the mixin module, I did the following:

module MyModule
  def         


        
相关标签:
3条回答
  • 2020-12-20 11:54

    Actually, your module extension module works. The problem is in your test: when you created a random unnamed class with Class.new, you forgot to include MyModule. As a side note, you can take your read-only accessor for classes that include the module and use the helpful Module#attr_reader method.

    0 讨论(0)
  • 2020-12-20 11:58

    You probably should use extend instead of include since former adds class level methods, while latter - instance level methods (why you have access to @classes).

    Try this:

    module MyModule
      extend ListIncludedClasses::ClassMethods
    end
    
    0 讨论(0)
  • 2020-12-20 12:04
    module MyMod; end
    
    class A; include MyMod; end
    class B < A; end
    class C; end
    
    ObjectSpace.each_object(Class).select { |c| c.included_modules.include? MyMod }
      #=> [B, A]
    
    0 讨论(0)
提交回复
热议问题