Sort of my own ruby extlib. There is a spec for everything and it is very clean. It does avoid monkey patching and relies on modules.
Template for extentiones
Say we want to extend Object by adding some methods dealing with magic. This would go to the file lib/monkey/object/magic_stuff.rb:
module Monkey
module Object
# It's magic!
module MagicStuff
::Object.send :include, self
def hokus_pokus
Spell.perform(self)
end
def vanish_in_thin_air
class << self
instance_methods.each { |m| undef_method(m) }
end
end
end
end
end
Add to lib/monkey/object.rb:
require "monkey/object/magic_stuff"
If that file didn’t exist before, add to lib/monkey.rb:
require "monkey/object"
Write a spec in spec/monkey/object/magic_stuff_spec.rb:
require __FILE__.sub("monkey/object/magic_stuff_spec.rb", "spec_helper")
require "monkey/object/magic_stuff"
describe Monkey::Object::MagicStuff do
it "performs magic" do
# ...
end
end