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