ClassProp
ClassProp allows you to set properties of a class which can be inherited or
overridden by subclasses. For example, in the following code, the Base class
is created and includes ClassProp. Then it defines an inheritable property
called fco. Finally, it sets the value of that property to base.
class Base
include ClassProp
define_class_prop 'fco'
self.fco = 'base'
end
The fco property is now available from Base.
puts Base.fco # => 'base'
Another class can inherit from Base.
class X1 < Base
end
If X1 does not define its own fco property, then when that property is
retrieved from X1 it returns Base.fco.
puts X1.fco # => 'base'
X1 can set its own value for fco.
class X1
self.fco = 'x1'
end
That gives us this output.
puts X1.fco # => 'x1'
To delete a class property (so that the property is again inherited from the
superclass) use delete_class_prop.
class X1
delete_class_prop 'fco'
end
puts X1.fco # => 'base'
You can set a property so that it must be defined by subclasses. To do so, set
the property to ClassProp::MustDefine. If an inheriting class does not define
that property then an error is raised when the property is retrieved.
class Base
include ClassProp
define_class_prop 'fco'
self.fco = ClassProp::MustDefine
end
class X1 < Base
end
X1.fco # raises exception 'must-define-class-property: fco'
Install
gem install classprop
Author
Mike O'Sullivan [email protected]
History
| version | date | notes |
|---|---|---|
| 1.0 | Feb 24, 2020 | Initial upload. |
| 1.1 | Feb 24, 2020 | Reworked interface. |
| 1.2 | Feb 24, 2020 | Fixed minor problem with exception id. |