Class: AMT::Utility::Enum
- Inherits:
-
Object
- Object
- AMT::Utility::Enum
- Defined in:
- lib/amt/utility/enum.rb
Overview
A simple class that behaves like an enumeration. I.e. you can associate an arbitrary value with a name.
The class allows you to get to a specific enumeration instance by using either the name or the value.
It isn’t useful to create objects directly from this class but one should create a subclass and use the provided class methods.
Here is an example: You have a Processor class and this processor class should have a field which contains the current status of the processor. The status is given by an integer with a predefined range. You could model the status field as enumeration by creating a new enumeration class:
class Status < AMT::Utility::Enum
multi_add(0 => 'Unknown', 1 => 'Enabled', 2 => 'Disabled by user via BIOS setup',
3 => 'Disabled by BIOS (POST Error)', 4 => 'Idle, waiting to be enabled',
7 => 'Other')
end
Then you can use this new Status class in the constructor of the Processor class:
class Processor
attr_reader :status
def initialize(status)
@status = Status.for(status)
end
end
Direct Known Subclasses
PTStatus, Service::HardwareAsset::AssetType, Service::HardwareAsset::MemoryModule::FormFactor, Service::HardwareAsset::MemoryModule::Type, Service::HardwareAsset::PortableBattery::DeviceChemistry, Service::HardwareAsset::Processor::Family, Service::HardwareAsset::Processor::Status, Service::HardwareAsset::Processor::Type, Service::HardwareAsset::Processor::UpgradeInformation, Service::RemoteControl::OemParameters, Service::RemoteControl::RemoteControlCommand, Service::RemoteControl::SpecialCommand, Service::SecurityAdministration::AccessPermission, Service::SecurityAdministration::EnabledInterface, Service::SecurityAdministration::Interface, Service::SecurityAdministration::ProvisioningMode, Service::SecurityAdministration::TlsAuthentication, Service::SecurityAdministration::UserAclRealm
Instance Attribute Summary collapse
-
#description ⇒ Object
readonly
The enumeration description.
-
#name ⇒ Object
readonly
The enumeration name.
-
#value ⇒ Object
readonly
The enumeration value.
Class Method Summary collapse
-
.add(value, name = nil, description = nil) ⇒ Object
Add a new enumeration value to the enumeration.
-
.for(value_or_name) ⇒ Object
Return an enumeration value for the given parameter which can either be the value or the name of an enumeration instance.
-
.multi_add(values) ⇒ Object
Add all values of the provided collection as enumeration values.
-
.values ⇒ Object
Return an array with all defined enumeration values.
Instance Method Summary collapse
-
#==(other) ⇒ Object
:nodoc:.
-
#inspect ⇒ Object
:nodoc:.
-
#to_str ⇒ Object
(also: #to_s)
An enumeration instance can be treated like a String.
Instance Attribute Details
#description ⇒ Object (readonly)
The enumeration description.
46 47 48 |
# File 'lib/amt/utility/enum.rb', line 46 def description @description end |
#name ⇒ Object (readonly)
The enumeration name.
43 44 45 |
# File 'lib/amt/utility/enum.rb', line 43 def name @name end |
#value ⇒ Object (readonly)
The enumeration value.
40 41 42 |
# File 'lib/amt/utility/enum.rb', line 40 def value @value end |
Class Method Details
.add(value, name = nil, description = nil) ⇒ Object
Add a new enumeration value to the enumeration.
value
-
The value of the enumeration (normally an Integer or String)
name
-
The name of the value (a Symbol or a String)
description
-
A textual description of the value.
95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/amt/utility/enum.rb', line 95 def self.add(value, name = nil, description = nil) @value_map ||= {} @name_map ||= {} name ||= value.to_s if @value_map.has_key?(value) || @name_map.has_key?(name) raise ArgumentError, "value #{value} or name '#{name}' are already taken" end inst = new(value, name, description) @value_map[value] = inst @name_map[name] = inst inst end |
.for(value_or_name) ⇒ Object
Return an enumeration value for the given parameter which can either be the value or the name of an enumeration instance.
86 87 88 |
# File 'lib/amt/utility/enum.rb', line 86 def self.for(value_or_name) (value_or_name.kind_of?(self) ? value_or_name : @value_map[value_or_name] || @name_map[value_or_name]) end |
.multi_add(values) ⇒ Object
Add all values of the provided collection as enumeration values. The values of the collection should either have the form [value, [name, description]]
or the collection should be a hash mapping values to [name, description]
arrays.
111 112 113 |
# File 'lib/amt/utility/enum.rb', line 111 def self.multi_add(values) values.each {|v, (n,d)| add(v,n,d)} end |
.values ⇒ Object
Return an array with all defined enumeration values.
80 81 82 |
# File 'lib/amt/utility/enum.rb', line 80 def self.values @value_map.values end |
Instance Method Details
#==(other) ⇒ Object
:nodoc:
66 67 68 69 70 71 72 |
# File 'lib/amt/utility/enum.rb', line 66 def ==(other) #:nodoc: if other.kind_of?(self.class) self.value == other.value else self.value == other || self.name == other end end |
#inspect ⇒ Object
:nodoc:
74 75 76 |
# File 'lib/amt/utility/enum.rb', line 74 def inspect #:nodoc: "#<#{self.class.name} #{@name}>" end |
#to_str ⇒ Object Also known as: to_s
An enumeration instance can be treated like a String. It’s string value is its description.
61 62 63 |
# File 'lib/amt/utility/enum.rb', line 61 def to_str description end |