module TypedEnum
A TypedEnum
can be used to represent a typed, enumerated set of values. A TypedEnum
offers the following features:
* Instances are restricted (in the absence of class-opening) to the set of instances defined in the class definition * Available values can be enumerated in a consistent order via a call to the * #values class method * Instances can be retrieved via class constants * Instances can be retrieved by parsing a string/symbol * Instances can be serialized to a string
Basic usage example:
class Color @enum = lambda {[ RED = self.new(:red), GREEN = self.new(:green), BLUE = self.new(:blue) ]} include TypedEnum end Color::RED => #<Color:0x163d59f8 @name=:red> Color.from_name(:red) => #<Color:0x163d59f8 @name=:red> Color.from_name('red') => #<Color:0x163d59f8 @name=:red> Color::RED.name => :red Color.values => [#<Color:0x163d59f8 @name=:red>, #<Color:0x163d59a8 @name=:green>, #<Color:0x163d5980 @name=:blue>]
Attributes
name[R]
Public Class Methods
included(klass)
click to toggle source
Calls superclass method
# File lib/typed_enum.rb, line 83 def TypedEnum.included(klass) super klass.extend TypedEnumClassMethods klass.init klass.private_class_method :new, :allocate end
new(name)
click to toggle source
# File lib/typed_enum.rb, line 31 def initialize(name) @name = name end
Public Instance Methods
clone()
click to toggle source
# File lib/typed_enum.rb, line 35 def clone raise TypeError, "Can't clone instance of TypedEnum #{self.class}" end
dump(depth=-1)
click to toggle source
# File lib/typed_enum.rb, line 41 def dump(depth=-1) @name.to_s end
dup()
click to toggle source
# File lib/typed_enum.rb, line 38 def dup raise TypeError, "Can't dup instance of TypedEnum #{self.class}" end