Sha256: 17ef1ea6b266ba2c66577a1269120913d3af2cc34cec12cec67da9353a067b70
Contents?: true
Size: 725 Bytes
Versions: 1
Compression:
Stored size: 725 Bytes
Contents
require 'abstractize/version' require 'abstractize/abstract_error' # Mixin for abstract classes module Abstractize def self.included(base) (class << base; self; end).instance_eval do define_method(:new, Abstractize.abstract_new(base)) define_method(:define_abstract_method, Abstractize.abstract_method) end end protected def abstract_new(base) lambda do |*args| fail AbstractError, "cannot instanciate #{name}" if self == base super(*args) end end def abstract_method lambda do |name| define_method(name) do |*_args| fail AbstractError, 'not implemented' end end end module_function :abstract_new module_function :abstract_method end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
abstractize-0.1.2 | lib/abstractize.rb |