lib/renum/enumerated_value.rb in renum-1.3.1 vs lib/renum/enumerated_value.rb in renum-1.4.0
- old
+ new
@@ -1,29 +1,34 @@
require 'forwardable'
module Renum
- # This is the superclass of all enumeration classes.
+ # This is the superclass of your enumeration classes.
+ # The class methods defined here are intended to be called on your enumerated value classes.
# An enumeration class is Enumerable over its values and exposes them by numeric index via [].
# Values are also comparable, sorting into the order in which they're declared.
class EnumeratedValue
class << self
include Enumerable
extend Forwardable
def_delegators :values, :each, :[]
- # Returns an array of values in the order they're declared.
+ # @return [Array] values of this type in the order they're declared.
def values
@values ||= []
end
+ # Lookup by name.
+ # @param [String] name of the value you want
+ # @return [EnumeratedValue, nil] the value with `name` or nil if there is no value by that name
def with_name name
values_by_name[name]
end
+ # @return [{String => EnumeratedType}] values keyed by name.
def values_by_name
@values_by_name ||= values.inject({}) do |memo, value|
memo[value.name] = value
memo
end.freeze
@@ -33,25 +38,31 @@
include Comparable
attr_reader :name, :index
+ # You should never directly new-up an EnumeratedValue, so this is basically internal.
+ # It sets up the value with its class, so if you override, be sure to call super!
+ # Better yet define init as shown in the README.
def initialize name
@name = name.to_s.freeze
@index = self.class.values.size
self.class.values << self
end
# Returns the fully qualified name of the constant referring to this value.
- # Don't override this if you're using Renum with the constantize_attribute
+ # Don't override this if you're using Renum with the constantize_attribute
# plugin, which relies on this behavior.
def to_s
"#{self.class}::#{name}"
end
# Sorts enumerated values into the order in which they're declared.
def <=> other
index <=> other.index
end
+ def == other
+ equal? other
+ end
end
end