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
-
.extended(mod) ⇒ Object
Extension callback – mark the extended object’s .new as private.
-
.included(mod) ⇒ Object
Inclusion callback – support backward-compatible inclusion.
Instance Method Summary collapse
-
#inherited(subclass) ⇒ Object
Inheritance callback – Turn subclasses’ .new methods back to public.
-
#pure_virtual(*syms) ⇒ Object
Define one or more “virtual” methods which will raise NotImplementedErrors when called via a concrete subclass.
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 |