cstd
Version:
CoffeeScript Standart Library
47 lines (40 loc) • 1.28 kB
text/coffeescript
# File of a base class for all subclasses
# method for create abstract class
#
# NewClass = abstract class NewClass
#
# {*} ctor any object for convert to abstract
# {ctor} from input
abstract = (ctor) ->
Object.defineProperty ctor, 'isAbstract',
enumerable: false
writable: false
value: true
ctor
global.abstract = abstract
# Simple abstract class for all classes.
#
# `destructor` is abstract method, must be defined by extended classes
#
# CSObject
class CSObject
# Constructor of all classes by lib.
# Can be call for check defined destructor.
#
#
# {TypeError} if call `new CSObject()`
# {Error} if `destructor` is not defined by child class
constructor: ->
if is CSObject
throw new TypeError "'CSObject' is abstract"
if is CSObject::destructor
throw new Error "You must define 'destructor' by class"
# Destructor is method for clear object. Must be override
#
# {Error} if not defined by child class
destructor: ->
if is CSObject::destructor
throw new Error 'Extended class destructor is not defined'
return null
CSObject = abstract CSObject
module.exports = { CSObject }