Module: Strelka::AbstractClass

Included in:
AuthProvider, HTTPRequest::AcceptParam, Router, Session
Defined in:
lib/strelka/mixins.rb

Overview

Hides your class’s ::new method and adds a pure_virtual method generator for defining API methods. If subclasses of your class don’t provide implementations of “pure_virtual” methods, NotImplementedErrors will be raised if they are called.

# AbstractClass
class MyBaseClass
    extend Strelka::AbstractClass

    # Define a method that will raise a NotImplementedError if called
    pure_virtual :api_method
end

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(mod) ⇒ Object

Extension callback – mark the extended object’s .new as private



29
30
31
32
# File 'lib/strelka/mixins.rb', line 29

def self::extended( mod )
	super
	mod.class_eval { private_class_method :new }
end

.included(mod) ⇒ Object

Inclusion callback – support backward-compatible inclusion.



36
37
38
39
# File 'lib/strelka/mixins.rb', line 36

def self::included( mod )
	mod.extend( self )
	super
end

Instance Method Details

#inherited(subclass) ⇒ Object

Inheritance callback – Turn subclasses’ .new methods back to public.



56
57
58
59
# File 'lib/strelka/mixins.rb', line 56

def inherited( subclass )
	subclass.module_eval { public_class_method :new }
	super
end

#pure_virtual(*syms) ⇒ Object

Define one or more “virtual” methods which will raise NotImplementedErrors when called via a concrete subclass.



44
45
46
47
48
49
50
51
52
# File 'lib/strelka/mixins.rb', line 44

def pure_virtual( *syms )
	syms.each do |sym|
		define_method( sym ) do |*args|
			raise ::NotImplementedError,
			"%p does not provide an implementation of #%s" % [ self.class, sym ],
			caller(1)
		end
	end
end