retroactive_module_inclusion 1.2.2
This gem circumvents the "dynamic module include" (aka "double inclusion") problem, which is the fact that M.module_eval { include N } does not make the methods of module N available to modules and classes which had included module M beforehand, only to the ones that include it thereafter. This behaviour hurts the least surprise principle, specially because if K is a class, then K.class_eval { include M } *does* make all methods of M available to all classes which had previously inherited it.