Problem

To extract redandunt codes into a method to commonalize them is a usual strategy for OOP. It allows us to streamline our codes and modify at one stop even though the method is used at anywhere, anytimes.

I don't like when highly commonalized OOP structure disturbes me from quick tracing where such methods are defined. It's OOP's natural defect, I think. Once classes/modules are defined, it's inevitable that the classes/modules are inherited/included at anywhere we don't know.

In that way, inheritance/inclusion-based OOP resembles goto programming; There's no clear reason why some classes/modules are inherited/included by another classes/modules. Even though there's some structural thought in your classes/modules design, such an excessively free inheritance/inclusion prevent us from grasping the whole code quickily.

Solution

This library provides a "method repository" in which you can add your methods to commonalize redandunt codes here and there in your whole codes, which is just same as usual module usage. However, the methods you define in the "repository" will never be included automatically into other classes/modules unless not permitted explicitely.

This is the point; There's no chance the methods in the "repository" appear at somewhere the "repository" don't know. To commonalize redanduncy is our intension, but we don't want the methods to be used where we don't know. The way this library provides solves the problem.

In this case, the methods in Repository are, of course, defined as instance methods of each classes, not singleton methods of each objects.

Conclusion

This library solves a problem that OOP's inheritance is too free to design clearly understandable codes. It limits us to freely use commonalized methods from classes/modules. I think explicit declaration can help us to avoid such a goto-like chaos. I'll be very glad if you give me your opinion.