*monkeypatch* is a new ruby projects that tries to protect you from patch collisions. == Project info *monkeypatch* introduces a small API that you can use when you want to fix external libraries. The mechanism is meant to be as straightforward as possible. Also, by adding monkeypatch as a gem dependency, you declare that your package is fixing other package's code. Version: 0.1.2 Stability: unstable Source code: http://github.com/zimbatm/monkeypatch/ RDoc: http://rdoc.info/projects/zimbatm/monkeypatch Blog: http://oree.ch == A small example ----- my_patch = MonkeyPatch.add_method(:to_blob) do def to_blog; "<blob>" end end my_patch.patch_class(String) "hello".to_blob #=> "<blob>" ------ == How does it work ? When applying a patch, there are two mechanism that enters the game ; conditions and conflicts. * Conditions are not fatal. If they don't match, the patch is simply not applied, and a message is passed to the MonkeyPatch.logger. Conditions are for library version matching for example. They are extensible buy using: #add_condition(msg, &cond) * Conflicts are fatal, in that they raise a ConflictError if they don't match. Conflicts are for patch collision. They are not extensible and provided by the API. The idea is that if your code has conflicting patches, you will get notified by a crashing application, so that you can fix it as early as possible. Another aspect are PatchSet (s). If you have a bundle of patches you want to apply, you can aggregate them with the & operator. You then get a PatchSet instance which you can use like a Patch. This is not fully done now, but theoritically, your bundle does not apply unless all patch conditions are met. == What's next ? This project API is intentionally unstable for now. What I'm really looking for now, is community feedback. I also intend to look at real-world patches to see how this library can be made more useful. So if you have some real-world patches or any comments, please give me your feedback ! Cheers, zimbatm -- Posted via http://www.ruby-forum.com/.