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