Adding abstraction to classes in Ruby
http://stackoverflow.com/questions/512466/how-to-implement-an-abstract-class-in-ruby
module Abstract
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def abstract_methods(*args)
args.each do |name|
class_eval(<<-END, __FILE__, __LINE__)
def #{name}(*args)
raise NotImplementedError.new("You must implement #{name}.")
end
end
end
end
end
end
require 'rubygems'
require 'spec'
describe "abstract methods" do
before(:each) do
@klass = Class.new do
include Abstract
abstract_methods :foo, :bar
end
end
it "raises NotImplementedError" do
proc {
@klass.new.foo
}.should raise_error(NotImplementedError)
end